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

    技术2026-09-30  12

    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指针。详细操作方法已介绍。实操赢得经验,困难搏得心态
    Processed: 0.012, SQL: 9