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的主要内容,如果未能解决你的问题,请参考以下文章