ReverseTake the maze from bugku

Posted IBESTI

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ReverseTake the maze from bugku相关的知识,希望对你有一定的参考价值。

原创博客,转载请注出处!

来找答案的各位可以回了,这里并没有答案!!!

(如果1/2答案也算的话。。。。~_~)

 

三晚的盲逆眼要瞎了。。。。步骤和思路在最下面:)

 

让我想想。。。。。!!!

!!!

!!!!

 

 

...
....
.....
......
.......
........
.........
..........
...........
............
.............

 

 

 

 

我就知道。。。。。

算了,不玩了,写完作业在搞吧。。。

 

 

补充下步骤和思路:

分值300的boss题,一定要先查壳,而且我感觉源码中一定会有anti代码。

先使用吾爱od运行程序,右键智能扫描后发现如下字符,预判为程序正确执行后应该会打出的字符:

 

逻辑上分析,应该是“done!!!The flag is your input\\n"这句会紧接着正确的key键入之后输出,所以先在此处设断点,下面的程序分析都是尽量要让程序运行到此处。

 

开始操作

多次重试后找到key键入点:

 

后续的分析中发现01010100的键入会过一个循环,所以采用01010100的键入

 继续调试,发现还有anti代码。。。。尽管不好用

值得一提的是,写注释是一个好习惯,单步到此处,:

多次运行程序后发现此处会跳到错误处理,so,进入函数内部调试(也就是在此处才发现01010100的输入会帮助我跳出一个错误):

发现当这串代码执行完毕后,ECX寄存器会保存我的键入值“01010100”

继续执行,多次程序运行的经验来看,0015CF7D此处为key报错处理,正常运行当然是要避免调用这个地址,由此处的代码可以看出,应该执行跳转避开key错误处理。所以此处更改下eax的值,现改为00000018

继续执行,发现如下,我的目的是让程序执行到最初设置的断点出:

而执行到上图需要执行一大段代码,直觉告诉我,不会仅仅设置一个key判断点,下面的执行也证明了我的猜想。

分析上述代码发现关键跳,关键跳可以直达我们暂定的目标断点,执行关键跳则要修改0016581D处的cmp命令,也就是要修改ss的值来使其满足下面的跳转。

转到堆栈段地址,更改值为0x18:

发现跳转已经可以执行:

继续执行,发现最后的一个跳转竟然可以跳出我的目标,当然不能让它执行了:

此处为了没有更改EAX而是直接更改跳转目的地址,原因是因为我认为改跳转更安全也更简便:

我既定的目标已经实现了,接下来应该可以放心的执行了,直接F9执行到底了,出现最开始的结果了,我的逆向路线是绕过key验证,本以为是程序执行完成后会出现最终的flag,万万没想到,最终的flag还和真实的key相联系,这就jj了。。。

 

以上是关于ReverseTake the maze from bugku的主要内容,如果未能解决你的问题,请参考以下文章

490. The Maze

The Maze

490. The Maze

The Maze II

505. The Maze II

[LC] 490. The Maze