近期学习DEX文件结构为学习APP加壳脱壳打基础,自实现了一个简易的DEX解析器加深理解
DEX文件结构整体看不复杂,深究时发现DexCLassDef结构非常复杂,编码的数据结构,嵌套和指向关系
本文作为近期学习的一个阶段总结以及知识分享,后期再完善Todo部分
由于本人水平有限,文章错漏之处还望大佬批评指正
环境&工具:
010editor 15.0.1 (13.0.1有bug,打开大文件分析时容易崩溃)
Clion 2024.2.3
JDK 11.0.23
MinGW 14.2.0
Android Studio
准备
自行编译dex文件供后续分析
public class HelloDEX{
public static void main(String[] args){
System.out.println("Hello Dex!");
}
}
javac HelloDEX.java
d8 HelloDEX.class
可能遇到报错如下,这是因为d8需要java11+的环境,不支持java8
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/android/tools/r8/D8 has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
数据类型
Android源码 http://androidxref.com/2.3.7/xref/dalvik/libdex/DexFile.h 定义了dex文件用到的数据结构
[table]
[tr]
自定义类型[/td]
原类型[/td]
含义[/td]
[/tr]
[tr]
[td]s1