首页
社区
课程
招聘
[原创]app加固分析狗尾续貂之dex vmp还原
发表于: 2025-1-12 17:40 17503

[原创]app加固分析狗尾续貂之dex vmp还原

2025-1-12 17:40
17503

oacia大佬的APP加固dex解密流程分析,已经基本把它翻个底朝天了,但众所周知要彻底攻破该加固,仍有dex vmp这最后一道堡垒横在面前。在此之前拜读过爱吃菠菜大佬的某DEX_VMP安全分析与还原以及Thehepta大佬的vmp入门(一):android dex vmp还原和安全性论述,了解到dex vmp的原理是对dalvik指令进行了加密和置换,这里参照大佬们的方法对oacia大佬的样本复现了一遍,记录一下历程。

既然是vmp,按照vmp常规的分析流程,必然要先拿到trace,以这次的经历来看,拿到trace就已经成功了一半了。参考了很多大佬的文章,大致有以下几种方法:ida trace、unidbg/AndroidNativeEmu、frida stalker、frida qbdi、Dobby Instrument、unicorn 虚拟CPU。

开始打算用maiyao的ida trace脚本,但遇到以下问题:
1.ida附加上后每次执行到linker加载壳so加载到一半就退出了,单步发现是跑到rtld_db_dlactivity里的BRK指令会直接退出,但加载其他so时并没有这个问题(why?)。这里手动把它跳过了。
2.trace了一下JNI_Onload,结果发现每当进入mutex_lock就会卡死在那无限循环……这个没能解决,只好弃用。

补java环境有点累,尤其是补到后面发现可能会有很多代理类,没坚持补下去……

从oacia那篇文章来的肯定少不了尝试一下stalker,结果发现和ida相似的问题——每当进入mutex_lock就会卡死在那无限循环。

尝试用yang的frida-qbdi-tracer,但每当trace到一些跳转的时候就会崩溃,查阅资料发现qbdi好像确实存在这样的bug。

这个我是后面才看到的,感觉将来可以尝试一下,详见KerryS的指令级工具Dobby源码阅读

爱吃菠菜那篇文章的中的方法,没完全搞明白,感觉大意应该是把unicorn作为一个so文件注入到app中,用frida hook住目标函数,当发生调用时把环境补给unicorn来trace。

经过不断尝试,最终还是使用frida stalker,通过hook mutex_lock函数,在OnEnter中跳过stalker,再在OnLeave中恢复stalker的方法,在经过无数次崩溃之后,终于拿到了dex vmp的trace……

拿到trace指令流后,就可以着手分析了。可以看到,onCreate函数被注册到的地方,使用DebugSymbol.fromAddress没有打印出任何符号,应该是一块动态申请的内存区域:
图片描述
函数并不大,里面也基本全是位置无关代码,应该只是一个跳板,很快,便来到了主elf中的函数sub_137978。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 14
支持
分享
最新回复 (10)
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2025-1-12 17:47
0
雪    币: 315
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
好帖 不知道能扛多久 看来还原vmp还是 容纳了尽量多类型指令的onCreate函数进行加固作为对照 这个方案比较靠谱 另外大佬对过签有研究吗
2025-1-12 19:35
0
雪    币: 366
活跃值: (126)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
软件君子 好帖 不知道能扛多久 看来还原vmp还是 容纳了尽量多类型指令的onCreate函数进行加固作为对照 这个方案比较靠谱 另外大佬对过签有研究吗
用seccomp重定向?我记得珍惜any大佬有个帖子讲这个
2025-1-12 20:24
0
雪    币: 315
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
night star 用seccomp重定向?我记得珍惜any大佬有个帖子讲这个
好的佬 那篇帖子我看过 我去试试能不能过掉
2025-1-12 20:30
0
雪    币: 411
活跃值: (4600)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
学习了。
2025-1-13 11:18
0
雪    币: 126
活跃值: (1067)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
大佬谦虚了 这哪里是狗尾续貂 明明就是画龙点睛 锦上添花。基于类似破解凯撒密码的统计学特征进行opcode还原的思路很有启发性。对于字节码解密函数的定位 其实还可以用frida监控内存读写的方式得到。另外hook所有的jni函数 监控其字段读写 函数调用 解析参数返回值 在指定vmp函数进入时记录这些信息 指定vmp函数离开时输出这些信息 可以快捷精准地分析指定的vmp函数
2025-1-14 00:05
0
雪    币: 2551
活跃值: (3492)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
感谢分享
2025-1-14 11:37
0
雪    币: 126
活跃值: (1067)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
软件君子 好的佬 那篇帖子我看过 我去试试能不能过掉
活捉一个B站up
2025-1-14 17:39
0
雪    币: 366
活跃值: (126)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
万里星河 大佬谦虚了 这哪里是狗尾续貂 明明就是画龙点睛 锦上添花。基于类似破解凯撒密码的统计学特征进行opcode还原的思路很有启发性。对于字节码解密函数的定位 其实还可以用frida监控内存读写的方式得到。 ...
是你呀,指出sofixer符号解析问题的大佬 话说“frida监控内存读写”,应该是先定位到字节码区域,对它进行监控吧?我是先找的解密函数
2025-1-14 20:02
0
雪    币: 126
活跃值: (1067)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
night star 是你呀,指出sofixer符号解析问题的大佬[em_065] 话说“frida监控内存读写”,应该是先定位到字节码区域,对它进行监控吧?我是先找的解密函数[em_055]
是的 需要先定位到字节码区域
2025-1-15 10:30
0
游客
登录 | 注册 方可回帖
返回