-
-
[原创][分享]Dex动态加载关键函数调用链
-
发表于:
2020-3-21 17:35
6018
-
写在后面,以上所有图,都是上完@hanbingle师傅的课程后,自己看源码后整理的,如果有错误,欢迎指摘;最后在这里感谢@hanbingle师傅的指导和鼓励。
----------------------------更新实践部分-------------------
为了证实我的图中标注的脱壳点有效,拿了一个腾讯加固的例子
这里选取我之前总结的调用图中的DexFileVerifier::Verify
和DexFileVerifier
以及OpenFile
函数与DexFile::DexFile
函数作为脱壳点,
在函数中插入以下dump dex的代码
编译源码,刷机,
刷机成功后,安装并给予应用存储权限,然后运行app,并在sdcard目录下使用grep
命令过滤dex,最终得到脱壳后的文件如下

可以发现最终是可以脱下来的,有兴趣的可以测一测其他的加固,应当都是能脱下来的,测试的apk见
链接:07dK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6H3j5h3&6Q4x3X3g2T1j5h3W2V1N6g2)9J5k6h3y4G2L8g2)9J5c8Y4y4Q4x3V1j5I4P5V1S2*7e0g2k6v1z5g2S2k6g2o6c8I4i4K6u0V1e0X3N6%4f1q4u0T1x3e0u0m8 密码:q7x4
DexFileVerifier(const DexFile* dex_file,
const uint8_t* begin,
size_t size,
const char* location,
bool verify_checksum)
: dex_file_(dex_file),
begin_(begin),
size_(size),
location_(location),
verify_checksum_(verify_checksum),
header_(&dex_file->GetHeader()),
ptr_(nullptr),
previous_item_(nullptr) {
// 以下是添加的代码
char dexfilepath[100]={0};
int pid=getpid();
sprintf(dexfilepath,"/sdcard/%d_%d_DexFileVerifier.dex",(int)(size),pid);
int fd=open(dexfilepath,O_CREAT|O_RDWR,0666);
if(fd>0){
write(fd,begin,size);
close(fd);
}
}
[培训]科锐逆向工程师培训第53期2025年7月8日开班!
最后于 2020-3-27 10:10
被Simp1er编辑
,原因: 更新代码