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
-
Jak zabezpečit váš chytrý telefon před kybernetickými hrozbami
30. listopadu 2023 -
Jak nainstalovat šablonu ve WordPressu
23. července 2024 -
Monitory OLED: klíčové pojmy a funkce
13. května 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024