Autor: Michal Pohořelský
Uveřejněno: BAJT 07/94, str. 120-122
Zpětný překladač v novém hávu


Psal se rok 1989. U naší zemi se prosadila FoxBASE 2.10, která vedle větší rychlosti, lepších vývojových nástrojů, přinesla hlavně možnost kompilace vytvořených programů. Koncem roku 1991 se objevilo FoxPro 2.0, které bylo oceněno jako nejrychlejší databázový program přinášející vyrazné zlepšení práce vývojářům, včetně možnosti kompilovat programy v rámci vývojového prostředí. FoxBASE 2.10 a všechny verze FoxPro mají jedno společné. Nemají skutečné kompilátory, jenž by překládaly do strojového kódu, ale semikompilátory. Semikompilátor převádí kompilovaný program do kódu virtuálního počítače. Virtuální počítač vytvořený mezikód, částo nazývaný "p-kód", velmi rychle interpretuje. Tato koncepce má některé výhody. Pro různé strojově nekompatibilní počítače stačí přepsat pouze interpreter, zatímco vlastní mezikód zůstane stejný (FoxPro 2.5 for Macintosh). Vzhledem k tomu, že mezikód byl vytvořen z ohledem na překládaný jazyk, je možné provést důkladnou optimalizaci celého systému. Kromě toho příkazy mezikódu lze považovat stále za příkazy jazyka vyšší úrovně, volajícího podprogramy napsané v asembleru nebo v Céčku kvůli větší rychlosti.
Další diskutovanou výhodou je možnost zpětného překladu vytvořeného mezikódu. FoxPro sice má možnost vytvářet šifrovaný mezikód, ale pro specialistu to nepředstavuje vážnou překážku. Proto vzniklo v zahraničí i u nás několik zpětných překladačů umožňujících vytvořit dodatečně zdrojový kód aplikace. Hlavním účelem dekompilátoru je snížení rizika náhodné ztráty zdrojových textů při neočekávané chybě na disku.
Jedním z nejznámějších zpětných překladačů u nás je AntiPro od firmy FROG SYSTEMS s.r.o., a proto se mu dnes budeme věnovat. AntiPro dokáže dekompilovat *.FOX soubory pocházející z FoxBASE 2.10, *.FXP soubory vytvořené ve FoxPro 1.0x a *.FXP, *.APP i *.EXE soubory vytvořené ve FoxPro 2.x. Nejnovější verze AntiPro Plus 3.1 umí pracovat také ve FoxPro 2.5 for Windows.

Instalace

AntiPro se instaluje pomocí dávky INSTALL.BAT, což v době komfortních instalačních programů s vlastní nápovědou nedělá firmě FROG dobrou reklamu. INSTALL.BAT musí být spuštěn z distribuční diskety s dvěma parametry - disk a cesta pro umístění instalovaných souborů. Při instalaci je kontrolována přítomnost všech souborů na disketě. Teprve po přenosu souborů na disk je spuštěn slušně vypadající instalační program, který vedle dalších funkcí nabízí výběr kódu pro zobrazování české diakritiky. AntiPro se dodává na jedné disketě 5.25" HD (1.2 MB) nebo na jedné disketě 3.5" HD (1.44 MB) a vyžaduje přibližně 2.2 MB na pevném disku.
K programu se dodává dobře napsaná 100 stránková příručka formátu A5, která obsahuje také několik dodatků a tabulek. Autorem programu jsem byl ujištěn, že příručka byla napsána s určitým předstihem, a proto všechny odkazy na dosud neexistující verzi 4.0 je možné v plné míře uplatnit již v aktuální verzi programu.

První kroky

S programem jsem se seznámil minulý rok v tehdy aktuální verzi 2.53, která mohla dekompilovat pouze FoxPro 2.0 a nižší verze. Jediná věc, která mě tehdy zarazila byla dvojjazyčnost programu. Po spuštění programu AntiPro se k systémovému menu přidá další popup s názvem "AntiPro". Všechny funkce a dialogy aplikace komunikují s uživatelem anglicky, pouze nápověda a informační řádek k menu jsou v češtině. Bohužel i nejnovější verze se drží tradice, takže lze očekávat u většiny uživatelů smíšené pocity. Je však dobré, že každá položka nápovědy je doprovázena sejmutým obrázkem popisovaného dialogu. Dekompilátor je dodáván ve dvou modifikacích - Standard a Professional. Professinal verze se od základní liší pouze tím, že umožňuje dekompilaci zašifrovaných souborů. Antipro menu obsahuje následující volby:

Program se dodává ve dvou rozdílných verzích, podle toho jak mohou být používany. Soubor ANTIPRO.APP použijeme, jestliže chceme začlenit AntiPro do vývojového prostředí FoxPro a nepotřebujeme Runtime modul. Soubor ANTIPRO.EXE použijeme, jestliže chceme AntiPro používat jako samostatnou aplikaci.
Program lze bez jakýkoliv potíží spustit také ve FoxPro 2.5 for Windows, takže jde skutečně o multiplatformní aplikaci, která se automaticky přizpůsobuje prostředí ve kterém je spuštěna.

Testování

Při testování programu jsem použil rozšířenou verzi FoxPro 2.5 pro DOS a FoxPro 2.5b pro Windows. Po spuštění ANTIPRO.APP ve FoxPro pro DOS se objevila hláška "Warning: FoxPro 2.5a is better for running AntiPro...", jenž přes svou jednoznačnost není popsána v uživatelské příručce. Pokud je AntiPro spuštěno ve Windows, samo si vygeneruje soubor _ANTIIO.FLL o velikosti 27 KB. Antipro jsem zkoušel na přibližně 250 souborech *.FXP, *.APP a *.EXE vytvořených ve FoxPro 2.5 pro obě platformy. Rychlost zpětného překladu na slušném počítači není příliš pomalá, i když AntiPro bylo vytvořeno jako FoxPro aplikace. Na počítači PC/386DX - 40 MHz se 4 MB RAM trval zpětný překlad mnou vytvořené aplikace EKOMAN.EXE o velikosti 329 KB celkem 351 sekund v prostředí rozšířené FoxPro 2.5 pro DOS. V prostředí FoxPro pro Windows došlo při pokusu dekompilovat stejnou aplikaci k chybě "Kurzor je mimo obrazovku", což nevypadá na nedostatek paměti.

Zpětný překlad

Při zpětném překladu vyžaduje program nejdříve zadání jména dekompilovaného souboru. Jestliže je jméno vstupního souboru vloženo pomocí voleb "Input File" nebo "Output file(s)" uschová ho AntiPro ve vlastní databázi a při další práci ho již nevyžaduje. Pokud je jméno vstupního souboru uschováno v databázi, zobrazuje je také v prvním řádku popup menu "AntiPro" v systémovém menu.
Většina aplikací ve FoxPro 2.x je složena z více včleněných souborů. Poněvadž není nutné vždy všechny dekompilovat, je dobré vybrat jen určité soubory pomocí volby "Output file(s)". Je možné rovněž nastavit odlišný výstupní disk a adresář (Jestliže adresář neexistuje, můžeme ho zde vytvořit !).
Volba "File Info" umí zobrazit všechny dostupné informace o vstupním souboru. Nejdříve se zobrazí typ a velikost vstupního souboru včetně seznamu včleněných souborů. Je-li vstupem soubor *.FXP nebo *.FOX, je v seznamu zobrazen pouze 1 řádek.
AntiPro pozná všechny typy souborů (běžně kompilované i šifrované) databázových programů FoxBASE 2.10, FoxPro 1.0x, FoxPro 2.0 a FoxPro 2.5, dále soubor vytvořený v DBASE 1.x (*.DBO - ovšem jinak tento typ není podporován) a soubor chráněný proti dekompilaci (viz dále). Ve druhém dialogu uživatel uvidí informace o včleněných souborech, dále seznam všech procedur a funkcí, počet použitých proměnných a několik dalších symbolů.
Volba "Decompile" zahájí ihned zpětný překlad vstupního souboru. Průběh dekompilace se zobrazuje formou horizontálního sloupcového grafu nebo, je-li nastaven výstup na obrazovku, generovaný kód se přímo zobrazuje ve výstupním okně. Dekompilaci můžeme zastavit stiskem klávesy ESC. Zajímavé je, že dekompilace s výstupem na obrazovku není o nic pomalejší než dekompilace zobrazovaná horizontálním grafem. V několika málo případech nastávají určité nejednoznačnosti při generování výstupního kódu, které obvykle nemají vliv na funkčnost výsledného kódu. Triviální případy nejednoznačnosti výstupního kódu jsou u operátorů, funkcí a klíčových slov, které jsou v jazyce FoxPro synonymy. Takové případy jsou vyřešeny přepínači ve volbě "Settings...".
AntiPro rozpozná i některé nepublikované příkazy a funkce, které jsou zcela funkční a jsou zařazeny z důvodu kompatibility se staršími systémy (např. ASSIST).
Dekompilátor generuje výstupní kód včetně původních jmen proměnných, procedur, funkcí, oken, menu i dalších objektů, což je jeho značnou předností. Dekompilátor však nemůže do generovaného kódu zahrnout komentáře a další prvky, jenž byly při překladu vypuštěny.

Ochrana proti dekompilaci

Volba "Protect" je největší novinkou aktuální verze AntiPro 3.1 ! Protect začne ihned zpracovávat vstupní soubor do takového formátu, aby se nedal dekompilovat žádným ze současně dostupných dekompilátorů včetně AntiPro. Ochrana je účinná pouze na soubory *.FXP, *.APP a *.EXE vytvořené ve FoxPro 2.0 i 2.5. Nezáleží na tom, jakým způsobem byl program přeložen. Zajímavě působí fakt, že chráněný soubor se může nejen prodloužit, ale i zkrátit.
Jestliže se pokusí jakýkoliv uživatel dekompilovat chráněný program starší verzí AntiPro, objeví se zpráva typu "Soubor neznámého formátu". Současná verze AntiPro odmítne zpětný překlad se zprávou "Branded FoxPro application - access denied". Z toho je zřejmé, že AntiPro neposkytuje žádnou možnost chráněné programy dekompilovat. Jména původních programů jsou odvozena od jmén chráněných souborů náhradou prvního znaku přípony znakem vlnovka (~).

Výhodná investice ?

Myslím, že každému programátorovi se bude AntiPro hodit, pokud ho využije v rámci autorského zákona. Nečekaná chyba disku nebo omyl při mazání souborů může ochromit na dlouhou dobu celý vývojový tým a přinést velké finanční ztráty. Přitom nákupem dekompilátoru tomu lze elegantně zabránit. S jeho pomocí můžeme rovněž studovat ukázkové DEMO aplikace jiných firem.




Skok na další stránku Skok na hlavní menu Skok na další stránku


Copyright (c) 1999 Michal Pohořelský