-
-
[原创]某抽取壳的原理简析
-
发表于:
2020-5-11 20:16
12880
-
jdax分析看看结构~ 发现是某加壳后的文件结构
从最早加载入口分析开始:
都是 native函数 并且都是动态注册的 frida hook RegisterNatives 找到绑定的函数 继续分析:
由于该函数分析难度较大,我们下面直接通过系统源码层面进行脱壳原理分析 当然想要Dump DEX先把 反调试过掉
信号反调试, frida 反调试 jdb附加反调试等等 我们这里主要是把frida反调试过掉 让frida可以正常dump下DEX文件
这个把注册函数设置为0 让其注册失败就可以过掉 其他反调试类似~ 那下面直接用frida实现 过一下反调试吧 让frida可以使用就行
其他反调试可以自己尝试
frida anti:
基本 frida 附加没问题了呢 还有些反调试这里没有继续找了 这样我们就可以直接实现dump dex文件了呢
关于整体Dump DEX 有很多点可以完成,在art下有如常用DexFile::OpenMemory() 主要是能通过DexFile类结构得到base,size即可
我这里采用的 art::DexFile::DexFile()函数,通常无论你怎么隐藏加密DEX最终都要通过系统函数加载到系统中,dump解决之
先尝试dump DEX看看样本具体表现吧 然后再看情况处理
调试模式启动App 然后frida 附加上 jdb 启动 记得要附加上 反反调试 不然会马上结束掉进程 就没意思了呢
frida Dump Dex:
具体就是根据android 加载 DEX 文件流程函数 在关键函数() dump 出解密后DEX文件 然后我们再根据具体处理
跑一下看看dump那些文件吧
这里有个小技巧过反调试 这jdb附加上会马上结束进程 如果我们在按下回车键后马上按 ctrl +c 关闭掉就能过掉了呢 然后app就正常启动了
果然在包文件目录下Dump下来了些DEX 打开分析看看 是不是完整了呢~ pull 回来用GDA看看
发现大量抽取了方法代码 通过 H.i 函数进行还原 根据android源码 我们在他加载方法函数(LoadMethod) 再Dump DEX看看是不是已经部分还原了
为了定位具体还原那个方法 我们也 hook H.i( ) 函数 打印一下 参数 就能知道还原那个方法ID了呢
在app随便点击些功能 我这里点击的(虚拟位置功能) 然后比对 看看有没有还原了部分方法代码吧
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2020-5-12 23:28
被ddsf编辑
,原因: