Mac平台反编译Unity编译的安卓apk

Mac平台反编译Unity编译的安卓apk

时间: 2017.09.06

参考资料:

  1. Android APK 反编译实践 http://www.jianshu.com/p/9e0d1c3e342e
  2. 提取Unity游戏资源和脚本 http://www.cnblogs.com/AaronBlogs/p/6853179.html

个人总结

一. 获取java代码(dex2jar-2.0工具)

  1. 拿到apk
  2. 修改后缀名(如 apple.apk 该成 apple.zip) 然后对.zip进行解压
    解压出来的额文件中的 classes.dex是安卓代码的核心部分,,dex是在Dalvik虚拟机上可以执行的文件。如果发现里面有多个(如 classes2.dex, classes3.dex)的都需要进行相同的操作, 但是我实践时只有一个, 因为工程方法数没有超过64k.
  3. 将这些 classes.dex 拷贝到 dex2jar-2.0目录下(dex2jar-2.0 是之前好的, 根据参考资料1, 中下载的)
  4. 打开终端, 进入dex2jar-2.0目录下
  5. 执行命令 sh d2j-dex2jar.sh classes.dex 得到classes-dex2jar.jar
  6. 打开JD-GUI 这个app(参考资料1中有下), 将刚得到的 classes-dex2jar.jar 拖到软件中
  7. 如果apk 没有进行混淆的话, 里面有个com文件, 然后结合apk 的公司名和 apk对应的应用名,就大概知道哪里是有用的代码(编写的, 不是一些lib上的代码)

二. 获取res资源(如: layout样式, 动画, 文字values, 图片(应该是些UI图片) (apktool工具)

  1. 拿到apk
  2. 打开终端, 进入apk所在的路径下
  3. 执行命令 apktool d carIabTest.apk
  4. 这时候生成的 文件中, res 下面就可以找到你需要的资源还可以看到 AndroidManifest.xml里面的东西

说明:

* original文件夹是原始的AndroidManifest.xml文件
* res文件夹是反编译出来的资源
* smali文件夹是反编译出来的代码 (smali是有点类似于汇编的语法,是Android虚拟机所使用的寄存器语言。)

注意: 如果是Unity项目, 那么在assets/bin/Data/Managed/Assembly-CSharp.dll 就是Unity的代码了. 如果要看的话可以将它拖到mono里面看, 但是好像看不了方法的具体实现什么的.只能看有哪些类, 方法和一些变量

三. 如何拿到 apk(Unity制作的游戏) 的资源呢?

四. 如果apk 进行了代码混淆, 那么如何处理呢?

你可能感兴趣的:(Mac平台反编译Unity编译的安卓apk)