知识点:花指令
题目快速传送 Buuctf
一、查壳脱壳
拿到题目进行解压,是个exe文件,查壳。
upx壳,老朋友了。
简单的去壳
二、IDA分析找出错误
shift+F12 查找字符串
检查这行奇奇怪怪的字符串,想到题目:maze(迷宫),想必就是地图了。
其实到这里我就不会了(第一次接触花指令,被整麻了)
然后看了好多大佬的题解,也初步了解了一下花指令。
花指令的知识
有红色报错,观察附近的代码。
jnz short near ptr loc_40102E+1,+1即跳转到下一行代码。(呃,所以我要这行代码有什么用呢?没你我也会去到下一行啊。)╭(╯^╰)╮。
因为IDA是递归行进算法,所以这一行并不会影响反编译(前提没有指向错误的地址)。
继续分析下面发红的代码!
0EC85D788h,这个地址怎么看都不像是一个正常地址该有的地址(绕晕了)
我们不能直接给它nop掉,因为可能连着把有效的代码也给清理掉了。
按D键转换成数据,我们一个一个检查。
这里有两种方法,第一种是把垃圾数据给nop掉,置为空;第二种,就是放着他不管,将下面几行数据重新转成代码。
先拿这个0E8h开刀吧!不行就接着向下。嘿嘿嘿。
三、清理花指令
第一种(斩草除根)
选中可恨的0E8h
左上角Edit->patch program->change byte 填入90
捍卫者花指令已清除
接着,数据地址是红色的,将关键代码全部选中,摁P键将其声明为函数。
很好,按下F5你就终于能看见朝思暮想的Main函数了。
第二种(放你一马)
0E8h我就先饶了你。
选中其余四行,按C选择Analyze转换成代码。
接下来同上,按下P键申明为函数,按下F5。
四,分析主函数
结合走地图的思想。
不难发现,想要最后congratulate一下,就是要到达(5,-4),并且之前有14次操作,ADSW,其实就是左右下上。
可是不知道起点,于是点击asc_408078进入文本视图窗口
分别得到7和0即起点坐标。
我们再去找到地图。shift+F12 查找到那熟悉的字符串,进入文本视图窗口
其实防止遗漏(上次的教训),我还是更推荐去Hex view中查找
根据已得数据进行推测,可以发现这是一张7行10列的地图(),起点为+终点为F。
我们写一个python脚本将这一行字符串转换成地图
for i in range(0,70):
if map[i]==" ":
print('u',end="")
else :
print(map[i],end="")
if ((i+1)%10==0):
print('\n')
得到地图
走地图
最后的flag就是flag{ssaaasaassdddw}
刚刚入门,如有错误,欢迎留言,我会及时勘误Thanks♪(・ω・)ノ
撒花✿✿ヽ(°▽°)ノ✿
纪念第一篇博客
于2022年4月14日19:26:02
评论区