dex文件格式一
Posted Bingghost
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dex文件格式一相关的知识,希望对你有一定的参考价值。
一.生成dex文件
我们可以通过java文件来生成一个简单的dex文件
编译过程:
![](https://image.cha138.com/20210611/b8923dfa48e1482ab9f5ad5344382477.jpg)
首先编写java代码如下:
![](https://image.cha138.com/20210611/9fca562e605e47cd8515e2826e0b2801.jpg)
(1) 编译成 java class 文件
执行命令 : javac Hello.java
![](https://image.cha138.com/20210611/600d402d3d07455fb8b457ce6621f87e.jpg)
编译完成后 ,目录下生成 Hello.class 文件
(2) 编译成 dex 文件
dx --dex --output=Hello.dex Hello.class
编译正常会生成 Hello.dex 文件
![](https://image.cha138.com/20210611/da0bde7cf49843acb19c85588e7728d7.jpg)
00 34指明jdk版本,这个原因是jdk版本过高了,我们得使用1.6版本的JDK来进行编译
![](https://image.cha138.com/20210611/284811d655c94b149bae5b4959e4a2b7.jpg)
这个时候我们可以指明编译指定版本的来进行编译class文件
javac -source 1.6 -target 1.6 Hello.java
(3). 使用 ADB 运行测试
测试命令和输出结果如下 :
adb push Hello.dex /mnt/sdcard/
adb shell dalvikvm -cp /mnt/sdcard/Hello.dex Hello
![](https://image.cha138.com/20210611/0946145f5ba5431f9684b3bbe9b622c8.jpg)
第一次运行会在data/dalvik-cache目录生成一个odex的文件
![](https://image.cha138.com/20210611/d30a36774430444d94d882db31bc12ec.jpg)
有些加固没有考虑这个文件,dex的加固直接就废掉了
直接把这个文件拖到ida是可以分析的,拖到jeb就显示未知的文件格式
我们使用winhex查看,发现前面多了一些内容
![](https://image.cha138.com/20210611/9fb775920fbf464eae481b8fc54e9c26.jpg)
把这些内容剪切掉,在用jeb分析,就成功解析出来了
![](https://image.cha138.com/20210611/c7d42509e0344f96a9435d786683b3d4.jpg)
二.dalvik文件文档
文档目录
相关源码目录:
android2.3.7\\dalvik\\libdex
android2.3.7\\dalvik\\libdex\\DexFile.c dexFileParse 做主要的解析工作
需要注意的是每个Android源码版本的路径可能不一样,dex文件的格式也可能会有细微的变化,请参考相关平台的源码
用source insight来进行源码分析
![](https://image.cha138.com/20210611/3a35dc0475fc47e6a18a64189f848bc5.jpg)
分析可以使用010Editor脚本进行分析
![](https://image.cha138.com/20210611/31a8373dec80439eab4fab38e7fd717b.jpg)
三.dex文件格式
整体格式概要
![](https://image.cha138.com/20210611/6dd68eae1163453aaeca5af7c94671b9.jpg)
Android dex文件格式样例
![附图1 DEX文件格式.jpg](https://image.cha138.com/20210611/0bae7cc62c5a40babaede2e3e1b6b3cd.jpg)
文件格式相互之间的联系
![](https://image.cha138.com/20210611/f4cf0af19b8043c6916862dc17ec1fd1.jpg)
以上是关于dex文件格式一的主要内容,如果未能解决你的问题,请参考以下文章