三、从零开始学逆向之XCTF-game(IDA控制程序执行流程)

0x00 game初步分析

在这里插入图片描述

在这里插入图片描述
老铁们可以自行理解下英文,我就说个大概内容,让8盏灯全部都亮,那就算完事,flag就会自己出来。

先把它丢进IDA反编译下。

在这里插入图片描述
看到这里,猜测sub_457AB4()大概就是打印flag的地方了,双击切进去看下。

在这里插入图片描述
在这里插入图片描述
果然,看到了flag is心情很激动,但是看到flag经由这么多数据得到,懒癌的我倒吸了一口凉气。
这道题有多种方法,其中一种就是把这些数据拷贝出来,然后手写程序跑出flag,算法好的同学也可以用BFS(广度优先搜索)试试。题目这意思,也不排除是考这个算法。

我只想用最简单省事的方法搞定它:使用IDA控制程序执行顺序。
这种方式有两种方法:

  • patch程序,将jnz改成jz
    在这里插入图片描述
    如果我这里将byte_532E28数组下标为34567改成 !=1,直接按2,满足这个if条件,那么flag就能自己出来。
  • 简单粗暴,无任何条件直接跳入sub_457AB4拿到flag。

ox01 patch game

在这里插入图片描述
将光标移至要修改的地方,tab键返回汇编代码界面
在这里插入图片描述
这里就能看出来,有多个jnz对应着 ==1的逻辑,将光标移至jnz,然后edit => patch program => change Byte。
在这里插入图片描述

在这里插入图片描述
jnz对应的是75,这里将其改成74,也就是jz。
在这里插入图片描述
修改完,我们再进行edit => patch program => Apply patchs input to file,再点击确定,就可以将修改重写入exe了。
按F5,重新生成伪代码,我们看看现在程序的逻辑。
在这里插入图片描述
打开程序直接输入2,flag到手!
在这里插入图片描述

0x02 修改eip指针

首先我们进行IDA对exe的动态调试,在main之后任意一个地方下断点。
在这里插入图片描述
按F9,这里我推荐使用Remote Windows debugger模式。Local Windows debugger也行,但是我的IDA Pro 7.0出现了奇奇怪怪的问题,为了稳妥不被无关紧要的事情耽搁时间,建议直接Remote Windows debugger。
在这里插入图片描述
找到IDA目录,然后翻看IDA_Pro_v7.0_Portable\dbgsrv,点击win32_remote运行。
在这里插入图片描述
然后返回IDA,填入127.0.0.1
在这里插入图片描述
然后点击ok,运行。
在这里插入图片描述
这里的general registers是断点中记录的变量,其中EIP指针代码了接下来要跳转的位置,我们找到执行打印flag地方的函数地址。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

然后按两次F8,再切到game界面,flag到手!
在这里插入图片描述

0x03 总结

  • IDA修改程序执行逻辑,有两种方式:patch和修改eip指针。详细操作方法已介绍。
  • 实操赢得经验,困难搏得心态
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值