serial-150
一题经典的花指令题,但是与之前遇到简单的仅仅插入0xE8影响ida分析的指令不同
这里的花指令拥有更长的字节数,重复多次出现,并且和正常的call等指令混在一起
这时候手动修就会很麻烦,需要一个自动patch花指令的脚本
题目:SUCTF-serial-150
一用ida打开就发现一片飘红,并且有大量字节未被ida反汇编
这里非常明显的有call了一个不存在的地址
于是我的第一反应就是直接nop掉0xE8
但是发现有一堆类似的跳转,并且全都patch完之后ida还是无法反汇编
其实仔细看这个花指令就会发现,他并不是单纯的加入0xE8影响反汇编那么简单
他用xor eax,eax和jz short near ptr addr实现了一个永真跳转(并且这里的mov ax,5EBh不觉得很怪吗?)
并且能够看到在一堆花指令中有对真实存在地址的call的,所以对于0xE8的改变更需要考虑
再往后看就比较明显了,花指令其实就是
1 | mov ax,5EBh |
所以可以写出对应的idapython脚本来自动nop
1 | import idc |
然后就能反编译了(×F5了
好了,和void爷交流了之后揭秘一下上面讲的
mov ax,5EBh的疑点
首先mov ax寄存器这种操作我好像从来没见过,甚至不太知道ax寄存器是什么(AX 寄存器可以分为两个独立的 8 位的 AH 和 AL,那么就是寄存器的低16位咯
再者,如果不makecode前面的mov ax指令,即把后面的5EBh当作指令而不是当作数据处理
就会发现,其实这就是一个跳转指令(EB 05)
所以这个花指令还是可以看出来的
flag就是main里面的判断,可以说非常的easy
EZ9dmq4c8g9G7bAV
如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !