在OD中尝试修改一下程序执行流

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 用到的软件:吾爱破解专用版的OD

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

一、这道题并不难,首先我们反编译 

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

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

 二、把程序拉到这里面。

打开

然后出现这个页面表示成功了。 

 然后跟ida一样首先上来看看字符串啥的。点-插件-中文搜索引擎-智能搜索。

 发现标志型字符串。

 双击来到汇编程序中,这样就找到目标跳转函数的地址了:是

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

点击地址,再按F2即是加上断点,再按一次就是取消。

找到想要修改的代码,直接右键-汇编-再填上目标跳转指令即可。如下图:

 

 然后效果就是这个,nop是为了堆栈平衡他自己加的。我们不用管。

 

 然后按F9执行程序即可。

就会发现,虽然报错,但是已经打印出来flag了,证明确实跳转成功了,也确实停在了我们预先打好的断点下面,程序没有乱跑。 

还可以在ida里面动态调试:

(20条消息) IDA动态调试_bunner_的博客-优快云博客_ida动态调试windows

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ad_m1n

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值