Mac平台反编译Unity编译的安卓apk
时间: 2017.09.06
参考资料:
- Android APK 反编译实践 http://www.jianshu.com/p/9e0d1c3e342e
- 提取Unity游戏资源和脚本 http://www.cnblogs.com/AaronBlogs/p/6853179.html
个人总结
一. 获取java代码(dex2jar-2.0工具)
- 拿到apk
- 修改后缀名(如 apple.apk 该成 apple.zip) 然后对.zip进行解压
解压出来的额文件中的 classes.dex是安卓代码的核心部分,,dex是在Dalvik虚拟机上可以执行的文件。如果发现里面有多个(如 classes2.dex, classes3.dex)的都需要进行相同的操作, 但是我实践时只有一个, 因为工程方法数没有超过64k. - 将这些 classes.dex 拷贝到 dex2jar-2.0目录下(dex2jar-2.0 是之前好的, 根据参考资料1, 中下载的)
- 打开终端, 进入dex2jar-2.0目录下
- 执行命令
sh d2j-dex2jar.sh classes.dex
得到classes-dex2jar.jar - 打开JD-GUI 这个app(参考资料1中有下), 将刚得到的 classes-dex2jar.jar 拖到软件中
- 如果apk 没有进行混淆的话, 里面有个com文件, 然后结合apk 的公司名和 apk对应的应用名,就大概知道哪里是有用的代码(编写的, 不是一些lib上的代码)
二. 获取res资源(如: layout样式, 动画, 文字values, 图片(应该是些UI图片) (apktool工具)
- 拿到apk
- 打开终端, 进入apk所在的路径下
- 执行命令
apktool d carIabTest.apk
- 这时候生成的 文件中, res 下面就可以找到你需要的资源还可以看到 AndroidManifest.xml里面的东西
说明:
* original文件夹是原始的AndroidManifest.xml文件
* res文件夹是反编译出来的资源
* smali文件夹是反编译出来的代码 (smali是有点类似于汇编的语法,是Android虚拟机所使用的寄存器语言。)
注意: 如果是Unity项目, 那么在assets/bin/Data/Managed/Assembly-CSharp.dll
就是Unity的代码了. 如果要看的话可以将它拖到mono里面看, 但是好像看不了方法的具体实现什么的.只能看有哪些类, 方法和一些变量