花指令
@TOC
前言
花指令都是在比赛中经常碰见,已经属于老掉牙的东西了,现在回过头来总结总结,一定会有不一样的收获
花指令
花指令是一种静态混淆的手段,在我们静态分析时,会出现各种ida f5报错的问题,并且代码看起来十分混乱,无论是对于ida这种递归下降扫描,还是od那种线性扫描都会起到一定的阻碍的效果。
但不管怎么样,代码运行起来的时候,总会无差错的执行。
常见花指令
1
最常见的花指令就是在代码中 插入了E9这个机器码,E9 在汇编中对应着jmp指令,当ida读到E9时,会默认把后面四个字节作为地址,如果前面的代码里刚好有jmp之类的跳转指令跳到这里就会发生错误
类似的还有 E8 (call指令),也会把后面四个作为地址来使用
这种花指令的去除,就是把报错的地址 d 变成数据,把无用的数据nop掉,剩下的 c重新汇编就行
2
不管怎么都跳的指令
这种就直接把中间的没有的数据全部nop
3
call ret花指令
中间插入的垃圾数据会直接跳过
这种要分析其流程 patch掉合适的内容
4
栈帧出错的问题
代码有时候 会把rsp乱加减一个大数,就会出现栈帧报错的问题,类似这种
直接nop掉即可,
其他的情况,可以打开ida的栈帧分析,要保证函数退出的时候栈帧平衡即可
(alt+k)处理
5
一直用jmp或其他跳转指令跳,中级偶尔插入一个有用的指令,这种花指令就十分的烦人
,要么你就一个一个的分析,会很耗费时间。
在ctfwiki上提供了这种画质令的解决办法,就是利用od的run跟踪,它可以告诉你什么指令执行了,什么指令没执行,非常好用。
类似的还有unicorn模拟执行,可以帮助我们分析出哪些指令执行过,哪些没有执行过
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 yaoxixixi's blog!