SMC

SMC(Self-Modifying Code)(自解码),可以在一段代码执行前对它进行修改。常常利用这个特性,把代码以加密的形式保存在可自行文件中,然后在程序执行的时候进行动态解析。这样我们在采用静态分析时,看到的都是加密的内容,从而阻断了静态调试的可能性。
SMC的执行流程如下:

img

对SMC有个大致的理解,为了更好的理解这种反静态调试手段

SMC自解码,可以针对部分代码进行加密,在运行到这段代码时,就对该段代码解密。 当我们遇到这样的题目就可以采取静态分析与动态分析结合的方式

MOV混淆

MOV这种混淆是怎样产生的呢?剑桥大学的Stephen Dolan证明了x86的mov指令可以完成几乎所有功能了(可能还需要jmp),其他指令都是“多余的”。受此启发,有个大牛做了一个虚拟机加密编译器。它是一个修改版的LCC编译器,输入是C语言代码,输出的obj里面直接包含了虚拟机加密后的代码。如它的名字,函数的所有代码只有mov指令,没有其他任何指令。这个加密编译器在网上是开源的项目。
这里是这个编译器开源项目的地址,有兴趣的小伙伴可以配置来玩玩。
https://github.com/xoreaxeaxeax/movfuscator

通过做题 总结:

1、 字符串的搜索是给我们最好的提示。
2、 MOV混淆是不会混淆函数的逻辑的。因此函数的逻辑还是不变的。
3、 大多数汇编代码的意思是可以猜测的。可以大概推测出具体操作了什么。
在这里我提供一个开源的工具,是针对这的MOV混淆的工具
地址:https://github.com/kirschju/demovfuscator
这个工具可以很好的帮助我们分析MOV混淆。