Autor: Michal Pohorelsky
Uverejneno: BAJT 07/94, str. 120-122
Zpetny prekladac v novem havu


Psal se rok 1989. U nasi zemi se prosadila FoxBASE 2.10, ktera vedle vetsi rychlosti, lepsich vyvojovych nastroju, prinesla hlavne moznost kompilace vytvorenych programu. Koncem roku 1991 se objevilo FoxPro 2.0, ktere bylo oceneno jako nejrychlejsi databazovy program prinasejici vyrazne zlepseni prace vyvojarum, vcetne moznosti kompilovat programy v ramci vyvojoveho prostredi. FoxBASE 2.10 a vsechny verze FoxPro maji jedno spolecne. Nemaji skutecne kompilatory, jenz by prekladaly do strojoveho kodu, ale semikompilatory. Semikompilator prevadi kompilovany program do kodu virtualniho pocitace. Virtualni pocitac vytvoreny mezikod, casto nazyvany "p-kod", velmi rychle interpretuje. Tato koncepce ma nektere vyhody. Pro ruzne strojove nekompatibilni pocitace staci prepsat pouze interpreter, zatimco vlastni mezikod zustane stejny (FoxPro 2.5 for Macintosh). Vzhledem k tomu, ze mezikod byl vytvoren z ohledem na prekladany jazyk, je mozne provest dukladnou optimalizaci celeho systemu. Krome toho prikazy mezikodu lze povazovat stale za prikazy jazyka vyssi urovne, volajiciho podprogramy napsane v asembleru nebo v Cecku kvuli vetsi rychlosti.
Dalsi diskutovanou vyhodou je moznost zpetneho prekladu vytvoreneho mezikodu. FoxPro sice ma moznost vytvaret sifrovany mezikod, ale pro specialistu to nepredstavuje vaznou prekazku. Proto vzniklo v zahranici i u nas nekolik zpetnych prekladacu umoznujicich vytvorit dodatecne zdrojovy kod aplikace. Hlavnim ucelem dekompilatoru je snizeni rizika nahodne ztraty zdrojovych textu pri neocekavane chybe na disku. Jednim z nejznamejsich zpetnych prekladacu u nas je AntiPro od firmy FROG SYSTEMS s.r.o., a proto se mu dnes budeme venovat. AntiPro dokaze dekompilovat *.FOX soubory pochazejici z FoxBASE 2.10, *.FXP soubory vytvorene ve FoxPro 1.0x a *.FXP, *.APP i *.EXE soubory vytvorene ve FoxPro 2.x. Nejnovejsi verze AntiPro Plus 3.1 umi pracovat take ve FoxPro 2.5 for Windows.

Instalace

AntiPro se instaluje pomoci davky INSTALL.BAT, coz v dobe komfortnich instalacnich programu s vlastni napovedou nedela firme FROG dobrou reklamu. INSTALL.BAT musi byt spusten z distribucni diskety s dvema parametry - disk a cesta pro umisteni instalovanych souboru. Pri instalaci je kontrolovana pritomnost vsech souboru na diskete. Teprve po prenosu souboru na disk je spusten slusne vypadajici instalacni program, ktery vedle dalsich funkci nabizi vyber kodu pro zobrazovani ceske diakritiky. AntiPro se dodava na jedne diskete 5.25" HD (1.2 MB) nebo na jedne diskete 3.5" HD (1.44 MB) a vyzaduje priblizne 2.2 MB na pevnem disku.
K programu se dodava dobre napsana 100 strankova prirucka formatu A5, ktera obsahuje take nekolik dodatku a tabulek. Autorem programu jsem byl ujisten, ze prirucka byla napsana s urcitym predstihem, a proto vsechny odkazy na dosud neexistujici verzi 4.0 je mozne v plne mire uplatnit jiz v aktualni verzi programu.

Prvni kroky

S programem jsem se seznamil minuly rok v tehdy aktualni verzi 2.53, ktera mohla dekompilovat pouze FoxPro 2.0 a nizsi verze. Jedina vec, ktera me tehdy zarazila byla dvojjazycnost programu. Po spusteni programu AntiPro se k systemovemu menu prida dalsi popup s nazvem "AntiPro". Vsechny funkce a dialogy aplikace komunikuji s uzivatelem anglicky, pouze napoveda a informacni radek k menu jsou v cestine. Bohuzel i nejnovejsi verze se drzi tradice, takze lze ocekavat u vetsiny uzivatelu smisene pocity. Je vsak dobre, ze kazda polozka napovedy je doprovazena sejmutym obrazkem popisovaneho dialogu. Dekompilator je dodavan ve dvou modifikacich - Standard a Professional. Professinal verze se od zakladni lisi pouze tim, ze umoznuje dekompilaci zasifrovanych souboru. Antipro menu obsahuje nasledujici volby:

Program se dodava ve dvou rozdilnych verzich, podle toho jak mohou byt pouzivany. Soubor ANTIPRO.APP pouzijeme, jestlize chceme zaclenit AntiPro do vyvojoveho prostredi FoxPro a nepotrebujeme Runtime modul. Soubor ANTIPRO.EXE pouzijeme, jestlize chceme AntiPro pouzivat jako samostatnou aplikaci.
Program lze bez jakykoliv potizi spustit take ve FoxPro 2.5 for Windows, takze jde skutecne o multiplatformni aplikaci, ktera se automaticky prizpusobuje prostredi ve kterem je spustena.

Testovani

Pri testovani programu jsem pouzil rozsirenou verzi FoxPro 2.5 pro DOS a FoxPro 2.5b pro Windows. Po spusteni ANTIPRO.APP ve FoxPro pro DOS se objevila hlaska "Warning: FoxPro 2.5a is better for running AntiPro...", jenz pres svou jednoznacnost neni popsana v uzivatelske prirucce. Pokud je AntiPro spusteno ve Windows, samo si vygeneruje soubor _ANTIIO.FLL o velikosti 27 KB. Antipro jsem zkousel na priblizne 250 souborech *.FXP, *.APP a *.EXE vytvorenych ve FoxPro 2.5 pro obe platformy. Rychlost zpetneho prekladu na slusnem pocitaci neni prilis pomala, i kdyz AntiPro bylo vytvoreno jako FoxPro aplikace. Na pocitaci PC/386DX - 40 MHz se 4 MB RAM trval zpetny preklad mnou vytvorene aplikace EKOMAN.EXE o velikosti 329 KB celkem 351 sekund v prostredi rozsirene FoxPro 2.5 pro DOS. V prostredi FoxPro pro Windows doslo pri pokusu dekompilovat stejnou aplikaci k chybe "Kurzor je mimo obrazovku", coz nevypada na nedostatek pameti.

Zpetny preklad

Pri zpetnem prekladu vyzaduje program nejdrive zadani jmena dekompilovaneho souboru. Jestlize je jmeno vstupniho souboru vlozeno pomoci voleb "Input File" nebo "Output file(s)" uschova ho AntiPro ve vlastni databazi a pri dalsi praci ho jiz nevyzaduje. Pokud je jmeno vstupniho souboru uschovano v databazi, zobrazuje je take v prvnim radku popup menu "AntiPro" v systemovem menu.
Vetsina aplikaci ve FoxPro 2.x je slozena z vice vclenenych souboru. Ponevadz neni nutne vzdy vsechny dekompilovat, je dobre vybrat jen urcite soubory pomoci volby "Output file(s)". Je mozne rovnez nastavit odlisny vystupni disk a adresar (Jestlize adresar neexistuje, muzeme ho zde vytvorit !).
Volba "File Info" umi zobrazit vsechny dostupne informace o vstupnim souboru. Nejdrive se zobrazi typ a velikost vstupniho souboru vcetne seznamu vclenenych souboru. Je-li vstupem soubor *.FXP nebo *.FOX, je v seznamu zobrazen pouze 1 radek.
AntiPro pozna vsechny typy souboru (bezne kompilovane i sifrovane) databazovych programu FoxBASE 2.10, FoxPro 1.0x, FoxPro 2.0 a FoxPro 2.5, dale soubor vytvoreny v DBASE 1.x (*.DBO - ovsem jinak tento typ neni podporovan) a soubor chraneny proti dekompilaci (viz dale). Ve druhem dialogu uzivatel uvidi informace o vclenenych souborech, dale seznam vsech procedur a funkci, pocet pouzitych promennych a nekolik dalsich symbolu.
Volba "Decompile" zahaji ihned zpetny preklad vstupniho souboru. Prubeh dekompilace se zobrazuje formou horizontalniho sloupcoveho grafu nebo, je-li nastaven vystup na obrazovku, generovany kod se primo zobrazuje ve vystupnim okne. Dekompilaci muzeme zastavit stiskem klavesy ESC. Zajimave je, ze dekompilace s vystupem na obrazovku neni o nic pomalejsi nez dekompilace zobrazovana horizontalnim grafem. V nekolika malo pripadech nastavaji urcite nejednoznacnosti pri generovani vystupniho kodu, ktere obvykle nemaji vliv na funkcnost vysledneho kodu. Trivialni pripady nejednoznacnosti vystupniho kodu jsou u operatoru, funkci a klicovych slov, ktere jsou v jazyce FoxPro synonymy. Takove pripady jsou vyreseny prepinaci ve volbe "Settings...".
AntiPro rozpozna i nektere nepublikovane prikazy a funkce, ktere jsou zcela funkcni a jsou zarazeny z duvodu kompatibility se starsimi systemy (napr. ASSIST).
Dekompilator generuje vystupni kod vcetne puvodnich jmen promennych, procedur, funkci, oken, menu i dalsich objektu, coz je jeho znacnou prednosti. Dekompilator vsak nemuze do generovaneho kodu zahrnout komentare a dalsi prvky, jenz byly pri prekladu vypusteny.

Ochrana proti dekompilaci

Volba "Protect" je nejvetsi novinkou aktualni verze AntiPro 3.1 ! Protect zacne ihned zpracovavat vstupni soubor do takoveho formatu, aby se nedal dekompilovat zadnym ze soucasne dostupnych dekompilatoru vcetne AntiPro. Ochrana je ucinna pouze na soubory *.FXP, *.APP a *.EXE vytvorene ve FoxPro 2.0 i 2.5. Nezalezi na tom, jakym zpusobem byl program prelozen. Zajimave pusobi fakt, ze chraneny soubor se muze nejen prodlouzit, ale i zkratit.
Jestlize se pokusi jakykoliv uzivatel dekompilovat chraneny program starsi verzi AntiPro, objevi se zprava typu "Soubor neznameho formatu". Soucasna verze AntiPro odmitne zpetny preklad se zpravou "Branded FoxPro application - access denied". Z toho je zrejme, ze AntiPro neposkytuje zadnou moznost chranene programy dekompilovat. Jmena puvodnich programu jsou odvozena od jmen chranenych souboru nahradou prvniho znaku pripony znakem vlnovka (~).

Vyhodna investice ?

Myslim, ze kazdemu programatorovi se bude AntiPro hodit, pokud ho vyuzije v ramci autorskeho zakona. Necekana chyba disku nebo omyl pri mazani souboru muze ochromit na dlouhou dobu cely vyvojovy tym a prinest velke financni ztraty. Pritom nakupem dekompilatoru tomu lze elegantne zabranit. S jeho pomoci muzeme rovnez studovat ukazkove DEMO aplikace jinych firem.




Skok na dalsi stranku Skok na hlavni menu Skok na dalsi stranku


Copyright (c) 1993-2000 Michal Pohorelsky