-
-
[求助] 寻求对抗混淆的思路
-
发表于:
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编辑
,原因: