[HDCTF2019]Maze 1
查壳
有壳,脱了
进入IDA:
会发现我们看不了伪代码,那么看看爆在哪了:
这有标红的,那么把这里改了(IDA改的有点麻烦,建议用OD贼快)这里注意哦,报错点上边还有一个jnz跳转指令,这个是指向报错点的,那么要不要改呢?小小的期待一下:
接下来演示怎么改,这里注意这个call占了很多个字节,我们只要改一个或者两个等几个就好,没必要全部改完,万一弄到重要数据了就要寄了:
进OD:
来到初始界面,看IDA中报错点是在地址:0040102E上的(这是个物理地址,我们在OD里只用偏移地址就行 即102E):右键:
移动到转到的位置上:有个文件偏移,点击:
输入偏移地址:这里注意一定要是4开头的段地址,不然你会改错到别的地方:
来到目的地址:选中call,右键 --> 汇编(空格也行)
输入如上:回车(发现好像多删了一些数据(不影响(为什么呢)可以自己去理解,但是如果你勾选了nop填充,那么就是另一个结果了))先转出看看能不能运行:点击左上角的文件,点击补丁:
修补文件:完成,再进IDA看看:
发现正常了,进主函数:
让我们输入14个字符,一个循环对两个计数器进行计数,判断这两个计数器的值,如果满足则正确,越看越像迷宫。
“a d s w”?有点像上下左右,不确定,再看看。
访问这两计数器的内存,进去看看:
看到类似地图,大胆猜测:(这就是迷宫)
把迷宫排列出来:
七十个字符,那么找组合(ab = 70)一个个试嘛,最后得到(710)就是正确答案:
****+
- F**