前言
想起之前打题的时候经常会遇到一些关乎花指令的问题,但是没有系统地总结归纳花指令去除的姿势,浅浅开一个坑慢慢来写
题1:简单jmp
可以骗过dbg,但是放在ida中就很容易看出来,无效跳转
题目来源:[HDCTF2019]Maze
简单的检查程序,32位带壳,直接去壳
放ida,可以明显看到核心代码就是在这,但是直接反汇编没有反应
可以看到其中一个跳转指令是跳转到下一条指令,相当于是没跳转,废话指令,而call指令调用了一个不是地址的地址,可以简单猜测存在花指令,导致ida编译失败
将其跳转指令nop掉,重启程序
发现已经可以正常反汇编咯
题2
题目来源:160crackme0028
常规检查,无壳32位
丢ida处,找到核心代码发现无法正常反汇编,简单分析了一下呃呃呃好多跳转
丢dbg
来到错误提示这里可以看到有很多跳转指令跳到该处
来到函数开始的位置,一堆nop
同样来到ida处同样的位置,发现其不是nop而是将其解释为了align 10,把数据解释成了代码
那么解决方法就是在这一行按字母D键,将代码强行转化为数据,修改后如下:
再然后选中整个函数,按P键组合成一个函数,成功反编译