[Blog] Zabezpečenie flash aplikácií/anim. pred krádežou kódu

Grafika, webdesign, spracovanie videa a zvuku...
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

[Blog] Zabezpečenie flash aplikácií/anim. pred krádežou kódu

Príspevok od používateľa weroro »

Niektoré informácie v článku, už nie sú aktuálne - AMAYETA SWF ENCRYPT BOL PRELOMENÝ

Dlhodobo bol presadzovaný názor, že výstupný súbor z flash editoru (*.swf) je needitovateľný. Svojim spôsobom je to pravda, lebo flash editor tento súbor nevie spätne načítať, tak aby sa dal upravovať. Postupom času sa ale vyvinuli aplikácie na prevedenie swf súboru do zdrojového, flash editorom upravovateľného formátu *.fla, takzvané Dekompilery. Dekompiler ako taký nie je zlá vec. Stalo sa a nielen mne, že som nechtiac zmazal svoj zdrojový súbor *.fla alebo *.as a keďže sa jednalo rozsiahly projekt, rádovo stovky riadkov kódu a originálnych algoritmov, bol som fakt dosť nešťastný až zúfalý, keď som si predstavil že som dáta stratil a projekt buď padne alebo ho bude treba urobiť od začiatku (niekedy projekt trvá aj viac ako 3 mesiace). Vtedy je namieste použiť Dekompiler, ktorý ušetrí veľmi veľa roboty, nervov a peňazí.

Dekompilerov je veľké množstvo, ale azda najlepším dekompilerom aký kedy uzrel svetlo sveta je Dekompiler od spoločnosti Sothink. Tento program vie rozobrať aj najzložitejšiu aplikáciu (s výnimkou komponentov) do základného formátu fla a potom ju jednoducho upraviť vo flash editore a znova vyexportovať nové swf. Veľkú výhodu dekompileru pocítia aj začínajúci flash programátori, ktorý si môžu pomocou dekompileru naštudovať rôzne použité postupy skriptovania. Postupom času sa ale Dekompilery stali aj nepriateľmi flash programátorov, a to vtedy keď s ich pomocou začali ľudia, ktorý si privlastňovali cudziu prácu alebo časti zložitých kódov, kradnúť dekompilovaním cudzie práce. Preto sa zo začiatku vyvíjali mnohé techniky ako znepríjemniť alebo odradiť „zlodejov“ od použitia kódu, ktorý získajú dekompilovaním. Robilo sa to rôznymi „fintami“ ako napríklad používanie XORovania kódu, vytváranie falošných funkcii a premenných, ktoré mali zmiasť prípadného škodcu, a tak isto do dnes mnou používaná finta (ktorú som si vymyslel ale neskôr som zistil, že som nebol prvý :D ) a tou je používanie dvoch a viac array polí, z ktorých vytváram funkcie. Tento spôsob sa osvedčil ale má to aj háčik. Výsledný kód je tak neprehľadný, že ak mám rozpracovanú aplikáciu a vrátim sa k nej o týždeň tak len 2 dni lúštim svoj vlastný kód, aby som vedel pokračovať. Toto riešenie však ale odradí (odfiltruje) iba väčšinu škodcov, Lamerov ktorý flash nevedia alebo ho vedia len trosku a keď uvidia taký kód tak to vzdajú. Ľudia, ktorý flash vedia a aj tak si nedajú tu námahu vymyslieť niečo vlastné a kradnú, to budú vedieť ďalej spracovať. Preto som hľadal iné riešenie a aj som ho našiel. Prišla sním spoločnosť Amayeta, ktorá vytvorila najlepší dostupný flash encrypter, ktorý je dnes na trhu. Jeho použitie je jednoduché, spustíte program nájdete swf súbor, ktorý chcete šifrovať a kliknete na tlačítko Encrypt, a to je celé, mate istotu, že vašu swf aplikáciu ani po dekompilovaní nikto nerozlúšti. Je to aj výhoda pre samotného programátora, ktorý už nemusí vymýšľať alebo používať rôzne „finty“ na znepríjemnenie dekompilovania a jeho vlastný kód ostane stále prehľadný a bez zmien.

Na ukážku Vám ukážem, ako dekompiler zobrazí časť originálneho kódu a šifrovaného programom od spoločnosti Amayeta.

Originálny kód ActionScript2:

Kód: Vybrať všetko

for (i=0; i<=f; i++) {
	if (!hit1 && Key.getCode() == 39) {
		_root["s"+i]._x += a;
		hit2 = false;
	} else if (!hit2 && Key.getCode() == 37) {
		_root["s"+i]._x -= a;
		hit1 = false;
	}
}
A teraz ten istý, ale šifrovaný kód programom od Amayety (dám sem len časť toho kódu je veľmi dlhý):

Kód: Vybrať všetko

function   (){
    \x03 = 1839 % 511 * true;
    return (eval("\x03"));
}
var \x01 = -237 + \x04\x05();
for (\x01 = eval("\x01") + 553; eval("\x01") == 622; \x01 = eval("\x01") - 176){
    \x01 = eval("\x01") - 395;
    if (false){
        continue;
}
}
if (eval("\x01") == 411){
    \x01 = eval("\x01") - 206;
    if (!null){
}else{
        \x01 = eval("\x01") - 4;
}    
}
.
.
.
Ako ste si mohli všimnúť na tejto ukážke, šifrovaný skript je oproti originálnemu na nerozoznanie. To však ale pôsobí ďalší problém pre programátora. Takýmto šifrovaním totiž už pre nás poctivých flash programátorov nemá Dekompiler žiadne opodstatnenie lebo aj keby sme si zmazali svoje zdrojové kódy, nemôžme takto chránenú flash aplikáciu dekompilovať lebo je kód v takomto stave nepoužiteľný a neexistuje žiadny dekrypter, takže dešifrovanie nie je možné. Preto si treba dávať čo najlepší pozor na svoje zdrojové súbory a robiť si ich zálohu kdekoľvek to len ide, v mobile, na prenosné médiá, u suseda, v maile ako príloha a pod.

Na záver chcem dodať, že aj keď je celý tento článok o tom ako chrániť ActionScript neznamená to, aby ste si svoje malé aplikácie (aj keď pre vás majú veľkú hodnotu lebo sú to vaše prvé práce) zbytočne nešifrovali, šifrovaním sa totiž veľkosť swf o niečo zvýši lebo šifrovaného kódu je oveľa viac ako originálneho. Zažil som už aj prípad, keď originálny swf mal 500KB a po šifrovaní mal 1200KB, takže si treba dobre zvážiť či také prípadné navŕšenie veľkosti súboru stojí za to. Ak by niekoho zaujímalo ako ochrániť použitú grafiku v animáciách/aplikáciách, tak vás sklamem. Bohužiaľ zatiaľ neexistuje technika alebo program, ktorý by dokázal zabezpečiť grafický obsah swf súboru pred jeho dekompilovaním alebo kradnutím celkovo.

(Akákoľvek reprodukcia ľubovoľnej časti článku, nie je bez písomného súhlasu autora dovolená.)
Napísať odpoveď