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

花指令

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

手动nop

我们在用IDA用C构建函数时,其实很容易发现花指令,只要将这些花指令NOP掉就可以了。
这个标红的地方很明显就是花指令。
【逆向学习】花指令的去除_第1张图片
到那个位置,把它NOP掉
【逆向学习】花指令的去除_第2张图片
main函数就成功出来了
【逆向学习】花指令的去除_第3张图片
手动不成功的情况就需要具体分析了。
比如这一题**[MoeCTF 2022]chicken_soup**
【逆向学习】花指令的去除_第4张图片

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

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

实在找不到花指令的时候可以动态调式试一下。
【逆向学习】花指令的去除_第7张图片
但是有些时候动态出来的更加准确,这个图中的main函数和上面图中的那一个是同一个函数,很明显,这个更加准确。

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

用代码来去除花指令

当代码中存在大量花指令时,可以使用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

使用方法
【逆向学习】花指令的去除_第8张图片
【逆向学习】花指令的去除_第9张图片

总结

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

参考的博客

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

你可能感兴趣的:(Re,学习,python,c语言)