Dekompilace v Javě a co proti ní
Java je na platformě nezávislý jazyk, a proto se programy v ní napsané překládají do meziproduktu zvaného bajtkód, který zkompiluje až javový virtuální stroj (JVM) v rámci běhu aplikace. Tento bajtkód ovšem není problém převést opět do zdrojového kódu. Jednou z technik, jak případnou dekompilaci a následnou úpravu programů alespoň zkomplikovat, je obfuskování.
Dekompilace
Snadná dekompilace, neboli získání zdrojového kódu k přeloženým Javovým třídám, může být postrachem výrobců aplikací psaných v Javě. Nestačí, že k programu nedají zdrojový kód, musí ještě navíc vymýšlet komplikované způsoby ochrany aplikace, aby nebylo příliš jednoduché ji „kreknout“.
Existují ovšem i celkem legální důvody, proč dekompilátor použít. Například máte-li aplikaci bez zdrojového kódu, jejíž výrobce se od ní již dávno distancoval, nebo ukradne-li vám někdo počítač se zdrojovými kódy (eventuelně naštvaná přítelkyně zformátuje disk) a zároveň máte to štěstí, že aplikace už běží i někde jinde.
Dekompilátorů se dá najít na internetu bezpočet, jako ukázku jsem vybrala uživatelsky velmi kamarádský DJ Java Decompiler. Stačí myší přetáhnout .class soubor do jeho okna a chvíli počkat, než aplikace bajtkód zpracuje. Sice je jen pro Windows, ale linuxoví uživatelé si hravě poradí s dekompilátorem Jad, který se ovládá z příkazové řádky.
Obfuskování neboli matení kódu
Obfuskátor se pro změnu snadné dekompilaci snaží zabránit. Obvykle pracuje s bajtkódem a může provádět více dílčích činností:
- přejmenování tříd, jejich proměnných a metod – nejčastěji jsou nová jména jednopísmenná, což znatelně zmenší velikost kódu a znesnadní jeho čitelnost po dekompilaci; pomocí parametrů lze nastavit, co se přejmenovat nemá (například hlavní třída, kterou se aplikace spouští).
- detekce a odstranění nepoužitých metod, proměnných, tříd – dá se použít pouze u cílové aplikace nikoli u knihovny.
- přeskupení příkazů bajtkódu – cílem je, aby bajtkód nešel dekompilovat do rozumně strukturovaného zdrojového kódu.
Obfuskování kódu se provádí ze dvou základních důvodů, jednak kvůli zmenšení velikosti aplikace, jednak pro znepříjemnění dekompilace a následné úpravy kódu. Pokud je aplikaci potřeba stáhnout po síti, je velikost aplikace velmi důležitá. Typickým příkladem by mohly být třídy potřebné pro aplet. A pro aplikaci na mobilní telefon je její velikost otázkou života a smrti. Přece jen 32 KB je dost drastické omezení a obfuskátor může velikost snížit až o 30 %.
Různé obfuskátory jsou samozřejmě různě kvalitní, zadarmo nebo za peníze, lepšího výsledku může být dosaženo kombinací více obfuskátorů. Celkem dobré výsledky, co se týká velikosti, má v kategorii obfuskátorů zadarmo program ProGuard.
Ukázka
Originální zdrojový kód:
image = Image.createImage(getWidth(), getHeight());
buffer = image.getGraphics();
buffer.setColor(0,0,0);
buffer.fillRect(0,0,getWidth(), getHeight());
buffer.setColor(255,255,255);
cmdExit = new Command(„Konec“, Command.EXIT, 2);
addCommand(cmdExit);
cmdThrow = new Command(„Hazej“, Command.SCREEN, 1);
addCommand(cmdThrow);
setCommandListener(this);
Týž kus kódu poté, co byl přeložen, obfuskován s použitím programu RetroGuard a dekompilován DJ Java dekompilátorem:
d = Image.createImage(getWidth(), getHeight());
g = d.getGraphics();
g.setColor(0, 0, 0);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(255, 255, 255);
a = new Command(„Konec“, 7, 2);
addCommand(a);
b = new Command(„Hazej“, 1, 1);
addCommand(b);
setCommandListener(this);
Samozřejmě komentáře z původního zdrojového kódu tento proces také nepřežijí, protože se do bajtkódu nedávají.
Odkazy
Dekompilátory:
- DJ Java Decompiler – dekompilátor s grafickým uživatelským rozhraním, pouze pro Windows
- Jad – tento dekompilátor je jádrem DJ Java dekompilátoru, sice pracuje pouze na příkazové řádce, zato je pro více operačních systémů
Obfuskátory (všechny jsou napsány v Javě):
- ProGuard
- RetroGuard
- Jshrink (narozdíl od předchozích obfuskátorů má zdarma pouze desetidenní licenci)
Mohlo by vás také zajímat
-
Thunderbolt 4 vs. OCuLink: Přišel čas na upgrade?
27. května 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024