抵御静态分析本质上就是降低反汇编代码的可读性,不过这种保护方式通常只是起到了扰乱作用,如果只是单独使用其中一种,那就只是纸老虎而已,理论上通过动态分析的方法,可以完全无视这样的保护,所以这些保护技术需要和其他保护技术相互配合才能达到良好的效果。
花指令
数据与代码的区分是反汇编中的一个关键问题,花指令就是向代码中添加一些无用的数据和代码,使得反汇编器的反汇编结果出现局部不正确的情况,或者将有用的代码隐藏在大量无用代码之中,以达到扰乱逆向分析的效果。
反汇编器的反汇编算法通常分为线性扫描算法和递归行进算法,而前者由于落后而被淘汰了,不过若是自己来写反汇编器的话,明显前者是更容易实现的。递归行进算法运用在IDA,ollydbg等常用反汇编器中,辣鸡数据相对较难对其进行干扰,因为在递归进行算法中,一个非常重要的假设是,对任意一条控制转移指令,都能确定其后继的目的地址,所以要迷惑这样的反汇编器,通常需要用辣鸡数据配合控制转移指令来进行。
添加大量的无用代码来隐藏有用代码也是常出现的花指令技术,通常是大量的无用代码,因为小的事物只能隐藏在大的事物之后,可以通过后期的补丁技术来插入这些无用代码。
攻击方法:对于干扰反汇编的花指令,慢慢分析就行了,头铁可以解决一切问题。而碰到大量的无用花指令时,就得去分析这种无用代码用有的某种规律或范围,因为它是程序生成的,不具有随机性,找到这个规律和范围就能通过脚本来清除这些花指令了。
SMC
self-modify-code,SMC技术比较惹人喜爱,它将一块局部的代码进行加密,而在程序运行过程中对这块代码进行解密