dex文件格式一

一.生成dex文件

我们可以通过java文件来生成一个简单的dex文件

编译过程:

首先编写java代码如下:

(1) 编译成 java class 文件

执行命令 : javac Hello.java

编译完成后 ,目录下生成 Hello.class 文件

(2) 编译成 dex 文件

dx --dex --output=Hello.dex Hello.class

编译正常会生成 Hello.dex 文件

00 34指明jdk版本,这个原因是jdk版本过高了,我们得使用1.6版本的JDK来进行编译

这个时候我们可以指明编译指定版本的来进行编译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

第一次运行会在data/dalvik-cache目录生成一个odex的文件

有些加固没有考虑这个文件,dex的加固直接就废掉了

直接把这个文件拖到ida是可以分析的,拖到jeb就显示未知的文件格式

我们使用winhex查看,发现前面多了一些内容

把这些内容剪切掉,在用jeb分析,就成功解析出来了

二.dalvik文件文档

文档目录

android2.3.7/dalvik/docs/dex-format.html

相关源码目录:

android2.3.7\dalvik\libdex

android2.3.7\dalvik\libdex\DexFile.c   dexFileParse 做主要的解析工作

需要注意的是每个Android源码版本的路径可能不一样,dex文件的格式也可能会有细微的变化,请参考相关平台的源码

用source insight来进行源码分析

分析可以使用010Editor脚本进行分析

三.dex文件格式

整体格式概要

Android dex文件格式样例

文件格式相互之间的联系

来自为知笔记(Wiz)

时间: 2024-10-13 00:28:47

dex文件格式一的相关文章

Dalvik虚拟机【2】——Dex文件格式

整个文件的布局 文件头 索引区 string_ids type_ids proto_ids field_ids method_ids 数据区 class_def class_data_item code_item data 附录 测试用的Dex的java代码 参考资料 整个文件的布局 整个Dex文件可以分成三部分,文件头.索引区.数据区,如下图所示. 文件头 记录Dex文件的概览.包含文件大小.校验码以及其他字段的偏移和大小 索引区 记录字符串常量.类型.方法原形.域.方法的信息的索引 数据区

DEX文件格式

1 .DEX文件中使用的数据类型 u1,u2,u4,u8表示占某固定字节的无符号数 sleb128表示有符号的LEB128类型数据,uleb128表示无符号的LEB128,uleb128p1表示无符号的LEB128+1 , 关于LEB128: LEB128是一种DEX文件中特有的用来存储最大32位数的数据类型,他的特点是字节数可以1-5可变.每个字节的第一位用来表示是否用到下个字节,剩下的7位为有效位,所以第5个字节的收位一定不能为1.有符号LEB128(SLEB128)的符号由最后字节的有效位

Android Dex文件格式(二)

第三块: 数据区 索引区中的最终数据偏移以及文件头中描述的map_off偏移都指向数据区, 还包括了即将要解析的class_def_item, 这个结构非常重要,下面就开始解析 class_def_item: 这个结构由dex文件头中的classDefsSize和classDefsOff所指向, 描述Dex文件中所有类定义信息, 每一个DexClassDef中包含一个DexClassData的结构(classDataOff), 每一个DexClassData中包含了一个Class的数据, Cla

Android Dex文件格式(一)

dex是Android平台上(Dalvik虚拟机)的可执行文件, 相当于Windows平台中的exe文件, 每个Apk安装包中都有dex文件, 里面包含了该app的所有源码, 通过反编译工具可以获取到相应的java源码. 为什么需要学习dex文件格式? 最主要的一个原因: 由于通过反编译dex文件可以直接看到java源码, 越来越多的app(包括恶意病毒app)都使用了加固技术以防止app被轻易反编译, 当需要对一个加固的恶意病毒app进行分析或对一个app进行破解时, 就需要了解dex文件格式

Android逆向之旅---解析编译之后的Dex文件格式

一.前言 新的一年又开始了,大家是否还记得去年年末的时候,我们还有一件事没有做,那就是解析Android中编译之后的classes.dex文件格式,我们在去年的时候已经介绍了: 如何解析编译之后的xml文件格式: http://blog.csdn.net/jiangwei0910410003/article/details/50568487 如何解析编译之后的resource.arsc文件格式: http://blog.csdn.net/jiangwei0910410003/article/de

dex文件格式二

一. dex文件头 (1) magic value 在DexFile.c   dexFileParse函数中 会先检查magic opt 啥是magic opt呢? 我们刚刚从cache目录拷贝出来的那个 前面的dey 036就是magic opt 在源码中会先解析magic opt,然后重设dexfile指针 重设magic opt指针后开始解析magic value 这 8 个 字节一般是常量.数组的值可以转换为一个字符串如下 : { 0x64 0x65 0x78 0x0a 0x30 0x3

[Android Security] DEX文件格式分析

copy from : https://segmentfault.com/a/1190000007652937 0x00 前言 分析 dex 文件格式最好的方式是找个介绍文档,自己再写一个简单的 demo 然后用 010Editor 对照着分析.文档可以参考官方文档http://source.android.com/devices/tech/dalvik/dex-format.html,英文差的也可以找个中文的,比如说我...... 010Editor 这个工具比较好用,之前分析 elf 文件也

dex文件格式三

先来看看整体的结构,结构体定义在DexFile.h里面 在dexFileSetupBasicPointers中设置各个子结构体,当然是在解析DexHeader之后 源码在DexFile.c文件中 在解析每个子结构体之前我们先了解下leb128格式, 源码leb128.c中解析这种格式  LEB128 ( little endian base 128 ) 格式 ,是基于 1 个 Byte 的一种不定长度的编码方式 .若第一个 Byte 的最高位为 1 ,则表示还需要下一个 Byte 来描述 ,直至

【原】tinker dex文件格式的dump工具tinker-dex-dump

序言 Tinker是微信推出的热更新开源项目,同其它热更新方案相比具有补丁包小,支持类,so,资源文件的替换等优点.其中在类替换的方案里自主研发了DexDiff算法,使得补丁包变的更小.DexDiff算法最终生成的产物虽然也以.dex作为格式后缀,但和实际虚拟机中的dex文件是二种完全不同的格式. 关于tinker-dex-dump tinker-dex-dump是针对dexdiff生成的.dex格式文件,查看其内部数据的工具.主要目的是帮助大家对dexdiff生成的dex格式有一个更加直观的了