APK反编译为Java代码

413 查看

找到一个APK包想学习,但是看不到源码,之前看过apktool的介绍,可以将代码反编译成smali代码,smali代码可以看到变量名,但是并不容易阅读,后来发现了dex2jar+jd-gui这个神奇的东西,记录一下。

首先需要将APK包解压缩,我们只用其中的classes.dex文件,android的编译机制将所有的java类都打包在了classes.dex里面。
然后使用dex2jar将classes.dex转化为jar包(dx可以将jar编译成dex)这个过程看来并没有太多信息损失,方法名都完整的保存下来了(必须的不然反射机制怎么用)。
jar包可以用jd-gui工具来查看,然后看到的就是源码了
看到的源码其实并不能完全还原为编译前的样子,毕竟编译器还是做了一些优化工作的(不知道理论上有没有完全还原回去的可能性),这使得这个世界还有一点安全感。