Kód Java pro Android je kompilován do bajtového kódu Dalvik, který je docela dobře čitelný. Zajímalo by mě, je možné teoreticky i v praxi napsat dekompilační software pro Dalvikův bajtový kód?
Kód Java pro Android je kompilován do bajtového kódu Dalvik, který je docela dobře čitelný. Zajímalo by mě, je možné teoreticky i v praxi napsat dekompilační software pro Dalvikův bajtový kód?
Je to nejen možné, ale bylo to již provedeno, nejen jednou. Tady jsou tři, o kterých vím, a může jich být více.
Kivlad od Cody Brocious
DAD by Zost (projekt Androguard):
JEB od Nicolase Falliere (komerční)
Pak existují všechny Java dekompilátory, které lze použít po použití dex2jar
nebo odvážit se v binárce Dalvik.
Myslím, že by to mělo být možné i se současnými dekompilátory Java, opravou jejich kódu. Mají alespoň jeden velký rozdíl - zatímco JVM je založen na zásobníku, Dalvik je založen na registrech. Tento rozdíl by bylo možné zvládnout s ne tolik kódu. Druhý rozdíl - formát bytecode. Potřebujete tedy použít kód, který je schopen rozebrat formát Dalvik bytecode.
Nezapomeňte http://dexter.dexlabs.org/ - Dexter je statický nástroj pro analýzu aplikací pro Android.
Dalším nástrojem je Bytecode Viewer :
https://github.com/Konloch/bytecode-viewer
Bytecode Viewer je pokročilý odlehčený prohlížeč Java Bytecode, GUI Java Decompiler, GUI Bytecode Editor, GUI Smali, GUI Baksmali, GUI APK Editor, GUI Dex Editor, GUI APK Decompiler, GUI DEX Decompiler, GUI Procyon Java Decompiler, GUI Krakatau , GUI CFR Java Decompiler, GUI FernFlower Java Decompiler, GUI DEX2Jar, GUI Jar2DEX, GUI Jar-Jar, Hex Viewer, Code Searcher, Debugger a další. Je napsán kompletně v Javě a je otevřený. V současné době je udržován a vyvíjen společností Konloch.
Kromě softwaru uvedeného Igorem existují i nástroje jako apktool, které lze použít k dekompilaci kódu: transformuje dalvik bytecode na smali, jazyk specifický pro virtuální stroj dalvik (viz pokyny / opcodes zde například).
Můžete také upravit zdroje v aplikaci a vytvořit ji zpět (ale původní podpis se rozbije, protože budete muset znovu -přihlaste to svým vlastním klíčem)