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

本文介绍了APK的基本文件结构,包括META-INF、res、AndroidManifest.xml、classes.dex和resources.arsc。接着通过使用dex2jar和jd-gui工具将dex文件转换为Java代码,分析了如何在转换后的代码中区分开发者代码和库代码。最后强调了Java代码分析在理解apk运行过程和逆向工程中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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代码分析时要注意区分库代码和开发者编写代码,把主要的精力放在开发者编写代码上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值