花指令属于静态反分析技术,只是通过加入烟幕弹扰乱代码可读性从而磨光调试者的耐心,本身并不影响程序执行逻辑。
这里IDA静态反汇编将0x66 0xbb识别为mov指令的前两个字节了,然后导致之后的分析出错。
.text:35004972 66 BB 30 DB mov bx, 0DB30h
.text:35004976 75 FC jnz short near ptr loc_35004972+2
我们可以手工对其选择特定位置转换为汇编代码,如下右键将该区域汇编代码重新转换为未定义的数据。
按快捷键x转换为代码区域,现在变成了正确的汇编代码。
如果是要修补的话,需要修改汇编代码将花指令补丁为90(nop指令)。
之后就可以在认为是函数起始位置右键点击创建函数选项,如下。
B8指令属于无效字节,不过IDA的静态分析很强大,这里直接给识别为数据了,而ollydbg则不是,而是直接将其作为mov指令进行翻译。
B9指令也是类似,ollydbg识别成了指令,导致反汇编结果出错,IDA识别出了数据,可成功反汇编。花指令就是利用静态反汇编过程中对数据以及汇编指令的识别异常导致汇编结果出错的一种手段,因此对反汇编结果的仔细观察可以发现存在异常汇编代码的情况下可能是存在花指令干扰。
这里只是简单记录下,主要是手工对其修复的过程。从易到难,在实际应用过程中需要针对性逆向的场景可考虑利用IDAPython等工具来搜索特征码自动化或半自动化去除被混淆的恶意文件使用的花指令。