首页
社区
课程
招聘
[求助] 寻求对抗混淆的思路
发表于: 2018-6-16 18:53 3162

[求助] 寻求对抗混淆的思路

2018-6-16 18:53
3162
经调查得出这是 A、r、x、a、n 的代码混淆:
.text:00007FFA99915FC1                 lea     rsp, [rsp-8]
.text:00007FFA99915FC6                 mov     [rsp+8+var_8], rbp
.text:00007FFA99915FCA                 lea     rbp, loc_7FFA995E0066
.text:00007FFA99915FD1                 xchg    rbp, [rsp+8+var_8]
.text:00007FFA99915FD5                 push    rbp
.text:00007FFA99915FD6                 lea     rbp, sub_7FFA998C1531
.text:00007FFA99915FDD                 xchg    rbp, [rsp+10h+var_10]
.text:00007FFA99915FE1                 retn

.text:00007FFA99920B8D loc_7FFA99920B8D:                       ; CODE XREF: sub_7FFA999413F4+5↓j
.text:00007FFA99920B8D                 mov     [rsp+8+var_8], rbp
.text:00007FFA99920B91                 lea     rbp, loc_7FFA9941EFC4
.text:00007FFA99920B98                 jmp     loc_7FFA995D6219

.text:00007FFA995D6219 loc_7FFA995D6219:                       ; CODE XREF: sub_7FFA999413F4-2085C↓j
.text:00007FFA995D6219                 xchg    rbp, [rsp+0]
.text:00007FFA995D621D                 jmp     sub_7FFA995E90A2
通过构建大量的短函数,然后强行构建 retn 调用栈,使得 IDA 无法跟踪分析 SP。
同时还使用 jmp 进一步切断函数使得代码非常难读。
我在想有没有办法能够通过跟踪识别这种混淆的特征重构一个可运行、可读、可分析的版本,因为我最后还需要靠 IDA 来反编译以及动态调试。
感觉难度有点大,因为要把分散的大量函数拼接到一起,还要分配未使用的连续代码段,还要考虑到地址变化带来的副作用。
想知道有什么工具或者框架能做到,有没有人做过这种东西?

或者,有没有办法不改变这个程序,但是能让 IDA 读懂这种强制改调用栈的行为,或者能给 IDA 一些提示让它能正确分析 SP 的变化?
这样至少我能用流程图来读程序也算稍微好一点。

注:程序是一个 Win64 DLL

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2018-6-16 19:09 被RixTox编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 5
活跃值: (526)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
IDA只能读懂未被修改过的原生代码,针对IDA做一些混淆IDA就失效了,混淆的方式千变万化,IDA理论上也做不到对各种变异环境的支持,所以如果是搞混淆或加壳、加花、VM的代码是不能依赖IDA的。这种情况下只能去分析混淆方式然后尝试把混淆代码还原成正常代码。
2018-7-2 15:09
0
游客
登录 | 注册 方可回帖
返回
//