[HDCTF2019]Maze 1

发布时间 2023-05-05 22:58:32作者: TFOREVERY

查壳

有壳,脱了

进入IDA:

会发现我们看不了伪代码,那么看看爆在哪了:

这有标红的,那么把这里改了(IDA改的有点麻烦,建议用OD贼快)这里注意哦,报错点上边还有一个jnz跳转指令,这个是指向报错点的,那么要不要改呢?小小的期待一下:

接下来演示怎么改,这里注意这个call占了很多个字节,我们只要改一个或者两个等几个就好,没必要全部改完,万一弄到重要数据了就要寄了:

进OD:

来到初始界面,看IDA中报错点是在地址:0040102E上的(这是个物理地址,我们在OD里只用偏移地址就行 即102E):右键:

移动到转到的位置上:有个文件偏移,点击:

输入偏移地址:这里注意一定要是4开头的段地址,不然你会改错到别的地方:

来到目的地址:选中call,右键 --> 汇编(空格也行)


输入如上:回车(发现好像多删了一些数据(不影响(为什么呢)可以自己去理解,但是如果你勾选了nop填充,那么就是另一个结果了))先转出看看能不能运行:点击左上角的文件,点击补丁:

修补文件:完成,再进IDA看看:

发现正常了,进主函数:

让我们输入14个字符,一个循环对两个计数器进行计数,判断这两个计数器的值,如果满足则正确,越看越像迷宫。

“a d s w”?有点像上下左右,不确定,再看看。

访问这两计数器的内存,进去看看:

看到类似地图,大胆猜测:(这就是迷宫)

把迷宫排列出来:

七十个字符,那么找组合(ab = 70)一个个试嘛,最后得到(710)就是正确答案:

****+




  • F**


找起点,我们发现,在存放地图内存那下边有一个 7 0:

对应一下地图,就是‘+’,起点?那么F会不会试终点?(很明显是的,这就是最后那个判断是否是5和-4)

所以得到flag{ssaaasaassdddw}收工。