安卓逆向学习——dex文件

DEX文件实际上就是Dalvik虚拟机的可执行程序,所以这个文件对于逆向分析工程师是十分重要的,因为我们需要对可执行文件进行调试分析结果。
JAVA文件的编译过程是由.java文件生成.class文件,然后在进行编译,编译成.dex文件的过程。
我们可以随便在一个文本文件中编写JAVA程序如下
在这里插入图片描述
注意JAVA类名是什么,这个java文件名应该就是什么。而且如果出现中文最好用反编译工具转换成Unicode防止乱码。
接下来我们将Java文件编译成Class文件,如下图,输入javac命令后直接将文件拖入命令行
在这里插入图片描述
发现桌面生成了一个Class文件
在这里插入图片描述
不过使用这种默认编译的话,生成的Class文件版本比较低,我们可以自己指定编译版本。、
在这里插入图片描述
转换成class文件后,接下来需要转换成Android的可执行文件形式也就是dex文件。这个转换工具在Android的SDK目录->build-tools目录->android-4.3目录下的dx.bat文件
在这里插入图片描述
我们将java和class文件都复制到该文件夹下,启动cmd并切换到该目录。
在这里插入图片描述
在这里插入图片描述
生成dex文件
在这里插入图片描述
接下来测试是否能在模拟器上运行dex文件,打开模拟器,重启模拟器服务
在这里插入图片描述
检测是否重启成功并连接模拟器
在这里插入图片描述
如果进的的模拟器shell不是root权限,可以使用su命令进入root权限
在这里插入图片描述
接下来要将文件从实体机传输到模拟器的文件路径。需要重新打开一个命令行,输入以下命令格式adb push 文件路径 目标文件路径。我们将它传到sd卡目录。
在这里插入图片描述
然后回到最开始的虚拟机命令行,执行这个文件
在这里插入图片描述
dex文件结构解析
在这里插入图片描述
我们使用010Editor查看Dex文件的结构
在这里插入图片描述
以下是文件头的整体布局
在这里插入图片描述
结合010Editor进行观察数据结构,首先看文件头,开头大小占用了8字节是一个结构体,结构体中由dex字符串,newline占1字节,3字节的版本号ver和1字节Zero,它们共同组成了dex的magic魔术字。dex字符是跟PE文件结构相同的代表文件类型的标志,后面的035代表对应的版本号
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下一个结构是4字节的校验和,用于校验文件完整性。这里显示0x65335EFD
在这里插入图片描述
接下来是一个SHA1算法的数字签名,占用20字节,它是使用除了前两个字段的所有二进制内容计算而成了hash。
在这里插入图片描述
第四字段file_size记录整个文件头大小
在这里插入图片描述
接下来大家按照如上方法挨个校验各字段学习即可

发布了30 篇原创文章 · 获赞 5 · 访问量 1915

猜你喜欢

转载自blog.csdn.net/AlexSmoker/article/details/104490364