Android 逆向入门系列-apk 文件架构与dex2jar获取java层代码

来源:互联网 发布:华为mate8预装软件列表 编辑:程序博客网 时间:2024/06/05 03:15

  • APK 文件结构
  • dex2jarjd-gui获取java层代码
  • java代码分析
  • 总结

APK 文件结构

最简单的HelloWorld.apk zip 解压后的文件目录:
apk文件目录
- META-INF:存放apk签名信息,完整性校验信息。
- res:存放资源文件。
- AndroidMainfest.xml,apk配置xml文件,经过压缩,直接打开为乱码。
- classes.dex:dex字节码文件(在Davlik虚拟机中运行的代码文件)。
- resources.arsc:资源文件与资源文件ID的映射关系。

这只是最基础的apk文件目录,很多apk的文件目录不止包含这些。(还可能包括lib、assets等文件夹)
lib:存放so库文件;assets包含资源文件,与res有差别。


dex2jar、jd-gui获取java层代码

1.将apk zip解压目录下得dex文件拷贝至dex2jar目录下
2.dex2jar目录下运行d2j-dex2jar.bat(windows环境下)

d2j-dex2jar.bat classes.dex

dex2jar目录下将生成一个jar文件
3.jar文件可以用jd-gui打开:
jd-gui加载dex2jar生成的jar

java代码分析

由上图我们可以看到jar中不仅包含开发者编写的java代码,还包含android自带的代码库,我们直接分析开发者编写的代码即可。
查看MainActivity.class:
反编译的MainActivity.class
与android studio源码比较:
MainActivity.class源代码
课件反编译效果很棒,不过参数名被重新命名资源ID未还原至映射的资源,在R.class里可以对应找到:
R.class资源映射ID

总结

apk的文件架构可以帮助读者理解apk的运行过程,dex反汇编为java代码可能更容易让不熟悉smali代码的人阅读分析。当然smali代码是进阶要求,在后面需要完成apk插桩重打包等功能时是必不可少的。
java代码分析时要注意区分库代码和开发者编写代码,把主要的精力放在开发者编写代码上。

阅读全文
0 0