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

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

2025-1-12 17:40
51581

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。


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

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

111

最后于 2025-3-13 11:04 被海带编辑 ,原因:
2025-3-11 15:24
0
游客
登录 | 注册 方可回帖
返回