小白爆破方式解一道逆向题目mine的过程
本帖最后由 再见依然 于 2020-11-6 16:55 编辑我太惨了,单位组织ctf培训,5天的时间,就第一天参加了半天,其余三天半都被叫到其他地方搬砖了.然后第五天我终于有时间回来参加培训了,结果第五天老师没讲课,一天时间就搞了个模拟ctf比赛.
分享一下其中一道逆向都解题过程吧.纯新手,知识都是平时逛逛吾爱,偶尔学一点.题目放在附件里了,有兴趣都朋友也可以试试.
这个小游戏打开按enter开始,移动方向键,按enter确认,类似扫雷的玩法,会提示周边有几个雷,但是没其他可操作的,一踩到雷就马上提示游戏结束,然后重新开始.
一开始以为右上角的剩余雷数300是个突破口,猜测把剩余雷数变为0即可通关,后来废了很多波折,发现不行,应该就是个干扰项.
然后打算用od去调试一下,打开发现这么提示
百度搜过来说是64位程序,需要用64位的od去跑,就又下载了个64位的x64dbg
放上个吾爱破解的x64dbg下载地址
https://down.52pojie.cn/Tools/Debuggers/x64dbg_2020_09_14.zip
用X64dbg打开mine.exe
它会自动下了几个断点,先点几下运行,运行到正常的启动界面
然后点击顶上工具栏的Az图标,搜索字符串
然后会自动搜出几个中文字符串,按照经验,我一般喜欢在报错界面下断点,也就是游戏结束这里,下一个断点
然后在游戏里随便踩几个雷,这时候会停留在断点
后来摸索发现
lea rcx, ds:
这段语句就是显示游戏结束的文字
lea rcx, ds:
4861F8修改为486016会显示剩余地雷:0,但是无实际意义
关键点在于下一句
call mine.40153B
执行了这段程序,游戏就结束了.
那么我首先想到的是,能不能跳过去,比如直接把这段代码改为下一个call mine.40157C
那就试试看
在这段代码上右键选择汇编
代码改成这样,然后点击确定.确定完会自动弹出修改下一段代码,我们只修改一段代码,所以直接点击关闭.
然后再运行
显示了个junkflag,被作者教育了一下,没这么简单.
不过接近真相了
期间绕了很多弯路,最终还是感觉要回到call mine.40157c上
PS:其实我汇编也学的不怎么样,以下是我猜出答案后再观察分析的,观察一下这段代码,感觉大概是这么个意思
cmp 比较了一个值
JNE 不等于就跳转mine.40164D
要么就跳转mine.4015FE
于是我就先修改为call mine.40164D
还是提示这个
然后把mine.exe关掉,手动用x64dbg重新打开(不然出来的flag是乱码的,不知道怎么回事)
重新打开后,直接修改这一段,改成4015FE,点击确定
点击继续运行,flag就出来了
注意!!!!我之所以说要重新打开mine.exe就是这个意思,有时候不知道怎么会flag乱码,反正不行就多打开几次吧. 有啥用?就给一堆乱码吗? szxpck 发表于 2020-11-7 16:12
程序会判断扫雷数是否等于601,如果等于601,输出正确的答案,否则输出junkflag,可以试试用IDA分析,个人 ...
ok,我试试。老师讲ida那段时间我也没有在:Dweeqw 学习学习
天天看看学习{:1_918:} 天天看看学习学习谢谢
junehappylove 发表于 2020-11-6 20:41
有啥用?就给一堆乱码吗?
ctf就是是隐藏了一个flag,把flag给弄出来,然后提交就可以得分 程序会判断扫雷数是否等于601,如果等于601,输出正确的答案,否则输出junkflag,可以试试用IDA分析,个人感觉比X64dbg要方便很多。 感谢大佬的分享 小白一个,'暂不知有啥用处,学习中