去花指南

首先,关于花指令的问题我在做题中有自己的一些看法与解题的方法,然后最近一直有朋友问我如何去花,这里就给大家分享一下我的经验吧!

这里我用一个花指令比较多的题目边讲解,边教大家(也许有的地方也不对,我太菜了)

2022长城杯 rabbit_hole_release.exe

一般我做题都是从main函数开始的

image-20220923213054307

这里如果看到了这个报红的地方就双击它,然后就会带你到那个错误的地方,接着你看到一些跳转指令比如JZ JNZ之类的,这里是jmp也是跳转指令,后面有一个ptr loc_401709+1,一般情况下就直接nop掉它

image-20220923213329005

然后这个题目的主函数部分有很多数据没有变成汇编的形式

image-20220924010826918

遇到这种情况一般都是按C去强制转换成汇编代码,这题我是将整个main函数的内容全选然后按C去转换

然后就会出现新的花指令,你就重复之前的步骤一个个nop掉,然后选中整个main函数按P进行声明再F5看一下伪C代码

image-20220924011455853

这里有报红,你就单击爆红的地方然后按Tap键去找到它的汇编代码

image-20220924011557397

这是0x401783处的报错,首先看到这个不要直接nop,先按C看能否转换

image-20220924011700612

这里发现是可以进行转换的,然后再按F5返回伪C代码

image-20220924011733155

这里就会出现新的地方,然后一直重复刚刚的步骤。当遇到不能按C的时候就可以考虑去nop掉了

image-20220924011947563

把这些基本处理好之后就是这样

image-20220924012159876

但是,要注意刚刚弄的还只是主函数部分,现在去看看其他的函数是否存在花,如果遇到花就改掉

image-20220924012326751

这里发现一个部分,前面有一个retn表示结束,后面的又是数据,这里就将又retn的函数进行声明,先不要管那些数据,你会有意想不到的收获

image-20220924013502227

image-20220924013512699

用同样的方法能够把其他的函数也复原,这题我的博客有具体做法,感兴趣的朋友可以去看看。这些是一些大概的去花,当然这里我没去的很好,不过还是能做出题来的,有太久没做了,有的地方忘了

在一些特定的情况下会出现另一种错误,就是字节码的掩盖,具体可以看我博客中[SCTF2019]babyre的题解,这时候就不能Assemble直接改指令了,而是用

image-20220924014306269

里的change byte进行修改

文章比较减短,也不晓得说明白没(表达能力就这样),如果有什么疑问可以发邮箱给我1315719563@qq.com