欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

【Android 逆向】整体加固脱壳 ( 脱壳点简介 | 修改系统源码进行脱壳 )

发布时间:2025/6/17 54 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【Android 逆向】整体加固脱壳 ( 脱壳点简介 | 修改系统源码进行脱壳 ) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

  • 一、脱壳点简介
  • 二、修改系统源码进行脱壳





一、脱壳点简介



在上一篇博客 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 rewriteDex 函数分析 | 脱壳点 | 获取 dex 文件在内存中的首地址 ) 中 , 提到了 222 个脱壳点 :

  • ① /dalvik/vm/DvmDex.cpp 的 dvmDexFileOpenPartial 方法
  • ② /dalvik/libdex/DexFile.cpp 的 dexFileParse 方法

可以脱壳的 HOOK 点函数 , 不止上面 222 个 , 凡是函数中有 DEX 文件首地址的函数都可以作为脱壳点 ; 如 : DexPrepare.cpp 中 rewriteDex() 方法 也可以作为脱壳点 ;


HOOK 上面的 dvmDexFileOpenPartial 或 dexFileParse 方法 , 之后获取这两个方法的参数 , 第一个参数是 DEX 文件在内存中的首地址 , 第二个参数是 DEX 文件的字节长度 ;

使用 Xposed , Frida 可以对上述函数进行 HOOK 操作 ;





二、修改系统源码进行脱壳



这里对 Android 系统的源码进行简单的修改 , 然后进行脱壳操作 , 这里的脱壳其实就是将 dex 文件在 内存的起始地址 ;

/* 记录当前 dex 文件索引 */ int dexCount = 0;/** 为“部分”DEX创建DexFile结构。这是一个在* 被优化的过程。优化标头未完成* 我们没有任何辅助数据表,所以我们必须这样做* 初始化过程略有不同。* * 错误时返回非零。*/ int dvmDexFileOpenPartial(const void* addr, int len, DvmDex** ppDvmDex) {// 系统启动后 , 可能会生成很多 dex 文件 , // DEX 文件保存路径char output[50]={0};// 获取当前进程 ID , 这是为了区分准备的 int pid = getpid();// 生成文件名称 , 由于单个 APK 可能有多个 DEX 文件 // 这里将每个 DEX 文件的 进程 ID 和 DEX 文件字节大小 // 放入 DEX 文件名中 , 加以识别sprintf(output, "/sdcard/%d_%d_output.dex", pid, dexCount);// dex 文件索引自增dexCount++;// 以写的方式 , 打开文件 , 如果没有就创建该文件int fd = open(output, "wb+");// 文件打开成功 , 则 dump 内存数据到 /sdcard/output.dex 文件中if (fd > 0){// 将 addr 地址的内存数据拷贝到 fd 文件中 , 拷贝 len 字节write(fd, addr, len);// 关闭文件 close(fd);}DvmDex* pDvmDex;DexFile* pDexFile;int parseFlags = kDexParseDefault;int result = -1;/* -- 文件不完整,尚未计算新校验和if (gDvm.verifyDexChecksum)parseFlags |= kDexParseVerifyChecksum;*/pDexFile = dexFileParse((u1*)addr, len, parseFlags);if (pDexFile == NULL) {ALOGE("DEX parse failed");goto bail;}pDvmDex = allocateAuxStructures(pDexFile);if (pDvmDex == NULL) {dexFileFree(pDexFile);goto bail;}pDvmDex->isMappedReadOnly = false;*ppDvmDex = pDvmDex;result = 0;bail:return result; }

源码路径 : /dalvik/vm/DvmDex.cpp

然后编译该 Android 4.4.4 源码 , 在该源码编译的 模拟器 上执行要脱壳的应用 , 或者直接将该源码刷到 Google 手机 / 开发版上 , 运行该系统 ;

在上述系统中 , 运行要脱壳的应用 , 会自动将 DEX 文件输出到 SD 卡中的指定的 /sdcard/pid_dexCount_output.dex 目录中 ;

总结

以上是生活随笔为你收集整理的【Android 逆向】整体加固脱壳 ( 脱壳点简介 | 修改系统源码进行脱壳 )的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。