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 出来 (或者直接就自解密了)