【逆向学习】花指令的去除

花指令

我在做逆向的题目的时候,经常会遇到需要自己将一堆乱码用IDA分析构建成函数,但函数却无法仍然无法使用f5进行编译,就是因为存在花指令的缘故。花指令经常被作为一种手段来增加代码分析的难度。我就打算记录一下几种解决花指令的方法。

手动nop

我们在用IDA用C构建函数时,其实很容易发现花指令,只要将这些花指令NOP掉就可以了。
这个标红的地方很明显就是花指令。
在这里插入图片描述
到那个位置,把它NOP掉
在这里插入图片描述
main函数就成功出来了
在这里插入图片描述
手动不成功的情况就需要具体分析了。
比如这一题**[MoeCTF 2022]chicken_soup**
在这里插入图片描述

在这里直接nop掉jmp是没用的,我也不知道具体原因,搜了这一题的WP才知道,当出现jn,jnz时,就代表一定会跳,肯定跳转 下面位置即 C7 45 F8 这里。E9命令会略过,不会执行。所以先用U转换数据再Ctrl+N,nop掉E9, 再F5,就可以了。
在这里插入图片描述
函数就出来了
在这里插入图片描述
但有些时候,NOP掉之后可能仍然无法F5,但是出现了黄色的代码位置,就直接用C键将黄色区的数字转换成代码就行(全部转完)。

直接用IDA动态调试(有一定几率可以直接出来)

实在找不到花指令的时候可以动态调式试一下。
在这里插入图片描述
但是有些时候动态出来的更加准确,这个图中的main函数和上面图中的那一个是同一个函数,很明显,这个更加准确。

用代码来去除花指令

当代码中存在大量花指令时,可以使用IDC代码或者python去解决。

范例

startaddr = 0x1135#起始位置
endaddr = 0x3100#终点位置
在这里插入图片描述
这段代码是大佬的
for i in range(startaddr,endaddr):
if get_wide_byte(i) == 0xEB:#需要去除掉花指令
if get_wide_byte(i+1) == 0xFF:
patch_byte(i,0x90)#nop指令的16进制为90h

使用方法
在这里插入图片描述
在这里插入图片描述

总结

后面遇到更多有关花指令的题目还继续总结的。

参考的博客

1.https://www.cnblogs.com/wgf4242/p/16654971.html
2.https://blog.csdn.net/qq_20031585/article/details/124028238
3.https://www.ctfer.vip/note/set/453

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值