https://www.cnblogs.com/CCb0nd/p/17857745.html
什么是 SMC
SMC(Software-Based Memory Encryption)是一种局部代码加密技术,它可以将一个可执行文件的指定区段进行加密,使得黑客无法直接分析区段内的代码,从而增加恶意代码分析难度和降低恶意攻击成功的可能性。
SMC 的基本原理是在编译可执行文件时,将需要加密的代码区段(例如函数、代码块等)单独编译成一个 section(段),并将其标记为可读、可写、不可执行(readable, writable, non-executable),然后通过某种方式在程序运行时将这个 section 解密为可执行代码,并将其标记为可读、可执行、不可写(readable, executable, non-writable)。这样,攻击者就无法在内存中找到加密的代码,从而无法直接执行或修改加密的代码。
在执行某一段代码时,程序会对自身的该段代码进行自修改,只有在修改后的代码才是可汇编、可执行的。
在程序未对该段代码进行修改之前, 在静态分析状态下, 均是不可读的字节码,IDA 之类的反汇编器无法识别程序的正常逻辑
SMC 如何逆向分析
SMC 的特征
- 先异或再进行函数的调用
- 在 Linux 系统中,可以通过 mprotect 函数修改目标内存的权限
- 在 Windows 系统中,VirtualProtect 函数实现内存权限的修改
SMC 的破解方法
- 找到对代码或数据加密的函数后通过 idapython 写解密脚本
- 动态调试到 SMC 解密结束的地方用 x96dgb dump 出来 (或者直接就自解密了)