用到的软件:吾爱破解专用版的OD
题目来源:XCTF的re-game,这道题并不难,首先我们IDA反编译就能找到加密算法所在地,然后写出exp,下面我们尝试直接更改程序执行流。
一、这道题并不难,首先我们反编译

会发现这里有个判断函数:而那个sub_457AB4()就是打印输出flag的地方。

因此我们的思路就很明显了:跳过前面的if判断语句,直接执行sub_457AB4这个函数。
二、把程序拉到这里面。

打开

然后出现这个页面表示成功了。
然后跟ida一样首先上来看看字符串啥的。点-插件-中文搜索引擎-智能搜索。

发现标志型字符串。
双击来到汇编程序中,这样就找到目标跳转函数的地址了:是![]()

然后我们在程序刚开始的位置,找一条无关紧要的指令换成:jmp 0078e96d即可。

点击地址,再按F2即是加上断点,再按一次就是取消。
找到想要修改的代码,直接右键-汇编-再填上目标跳转指令即可。如下图:
然后效果就是这个,nop是为了堆栈平衡他自己加的。我们不用管。
然后按F9执行程序即可。
就会发现,虽然报错,但是已经打印出来flag了,证明确实跳转成功了,也确实停在了我们预先打好的断点下面,程序没有乱跑。

还可以在ida里面动态调试:
本文介绍了如何通过IDA反编译和动态调试解决XCTF RE-game挑战。作者首先找到加密算法和关键函数sub_457AB4,然后通过跳过判断语句直接执行flag打印函数。通过修改程序执行流,设置跳转指令,成功触发flag打印,证明了调试策略的有效性。动态调试过程中,利用ida的断点功能确保程序按预期执行。
3923

被折叠的 条评论
为什么被折叠?



