初级花指令

BUUCTF [HDCTF2019]Maze

            2022年11月17日 初步了解花指令

认真de题解

下载题目之后,拖到ida(32位)后,发现左侧编码代码很少,可能是没有脱壳!
file
再拖到查壳软件中:
file
file
可以知道要用ida 7.7(32位),有壳。
去壳步骤如下:
1.将文件拖到upx,并从终端打开它
2.输入./upx.exe -d .\maze~~~ (Tab补全)—输入文件地址
3.结果如图:脱壳成功!
file
再把拖好壳的文件放入刚刚知道的IDA 7.7(32位)中:
file
可以看到,脱过壳的文件左侧有很多字符串,这时重点来了!我们发现中间区域有表红地方,并且按F5反编译不成功。同时关键词‘jnz’是条件跳转语句,跳到下一行,无操作,视为无用!故此处可以nop掉!
file
我们看到‘jnz’这一行:loc_40102E+1跳到下一行,然而这个操作并没有什么用,所以我们直接nop掉!

如何nop?
1.快捷键:control+N(apply to IDA7.7)
2.Edit–patch… --change byte(将第一个数改为‘90’)
然而下一行‘call’,可能藏着数据,我们不能直接nop掉。点击红色部分(为什么是红的?数据可能有用?),按‘D’(将代码转换为数据),可以将它转换为数据(这是D的作用吗?是的)。
ps.别人的讲解
file
现在我们再尝试反编译这段编码,发现按F5仍然不能反编译。我们发现,中间左侧的代码还是红色的(这代表什么?这些函数未被声明)。括住红色部分按‘P’(p是干嘛的?声明函数:create function)将红色部分变成黑色的,又出现了新的问题:
file
出现了‘_main endp ; sp-analysis failed’,这说明我们没有讲它们编译为数据,将该部分括住,按‘C’(c是干啥用的?将数据转换为代码),编译好的数据,如图所示:
file
我们再次将左侧侧标红处按‘p’,变为黑色后,再F5发现可以编译,如图所示:
file
仍然有爆红的地方,因此,我们返回上一级,说明我们仍然有花指令没有nop干净,此时我们需要一个个实验,直到‘0040102F’行,发现反编译正确!
下面就是正常解迷宫题环节啦

问答环节

Q1:如何判断花指令?
A1:使用了花指令的地方,一般都会出现这样的现象:一个跳转指令,跳转到了某条语句的中间位置,而不是这条语句的開始位置。每当出现这样的情况时,我们就能够断定,这里出现了花指令。
Q2:如何破解花指令?
A2:在那个跳转到的目的地址之前将中间的代码所有nop掉!

预告一下

总结一下二叉树噜

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值