SMC自修改代码
文章发布时间:
最后更新时间:
文章总字数:
预计阅读时间:
最后更新时间:
文章总字数:
673
预计阅读时间:
2 分钟
自修改代码(Self-Modifying Code,SMC)指程序在运行过程中修改即将执行的代码。常见做法是把关键逻辑以加密形式保存在可执行文件或资源区中,运行时再动态解密、执行,执行后也可能再次加密,借此增加静态分析难度。
从逆向视角看,SMC 的核心特征通常包括:
- 程序会修改代码段权限,例如调用
VirtualProtect。 - 某段代码在静态视图中像乱码或无意义指令。
- 调试运行到特定位置后,原本异常的代码会被还原成可执行逻辑。
- 有些样本会在执行后重新加密,防止直接 dump。
一段展示 SMC 思路的伪代码:
1 | |
以下打造一个使用SMC进行静态分析对抗的示例,首先正常写一个程序:
1 | |
然后我们想把check这个函数保护起来,先把其机器码摘出来进行加密:
1 | |
另一种常见的实现方法是通过新增一个具备RWX属性的程序段,将需要保护的代码书写在其中,这样就可以避免调用 virtualAl1oc/virtualProtect/mprotect 这类API来暴露SMC 的意图。
对抗思路:
能动态调试最好直接动态调试,因为在程序运行的某一时刻,它一定是解密完成的,这时也就暴露了,使用动态分析运行到这一时刻即可过掉保护。
其次是根据静态分析获得解密算法,写出解密脚本提前解密这段代码。
解密得到的机器码可以通过IDAPython的patch_byte接口很方便地写回。
打赏
支付宝

微信
