APK 文件结构
最简单的HelloWorld.apk zip 解压后的文件目录:
- 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打开:
java代码分析
由上图我们可以看到jar中不仅包含开发者编写的java代码,还包含android自带的代码库,我们直接分析开发者编写的代码即可。
查看MainActivity.class:
与android studio源码比较:
课件反编译效果很棒,不过参数名被重新命名,资源ID未还原至映射的资源,在R.class里可以对应找到:
总结
apk的文件架构可以帮助读者理解apk的运行过程,dex反汇编为java代码可能更容易让不熟悉smali代码的人阅读分析。当然smali代码是进阶要求,在后面需要完成apk插桩重打包等功能时是必不可少的。
java代码分析时要注意区分库代码和开发者编写代码,把主要的精力放在开发者编写代码上。
本文介绍了APK的基本文件结构,包括META-INF、res、AndroidManifest.xml、classes.dex和resources.arsc。接着通过使用dex2jar和jd-gui工具将dex文件转换为Java代码,分析了如何在转换后的代码中区分开发者代码和库代码。最后强调了Java代码分析在理解apk运行过程和逆向工程中的作用。
626

被折叠的 条评论
为什么被折叠?



