bugku 逆向之consoleapplication4(游戏过关)

本文记录了一位逆向新手在Bugku平台解决ConsoleApplication4游戏的过程,主要涉及使用Ollydbg和IDA进行动态和静态分析,通过修改汇编代码跳转至成功函数,以及理解flag生成逻辑。通过分析函数调用、数组操作和位运算,最终成功过关。

一顿分析

对于一个逆向小白来说,在这题上着实花了点时间,特记录下~

初看这题时,感觉就是数据题,经过一顿操作,发现1-8依次输一边,答案就出来了,反正每盏灯只能操作奇数次。

但是这样的方式做一道“逆向”题,着实没啥成就感,反正刚学习,那就从简单题开始吧。

载入Ollydbg先看看,通过查找参考字符串找到了函数的地址00B7E940

右键查看调用树(或者右键转到,可以看到最下方是调用地址),可定位到函数调用处

(调用树)

(上一个jmp)

(关键判断处)

我们找到了一个jnz和call的地方,因为不是flag的直接比较,所以想法是跳转至成功函数输出flag,或者直接将生成flag的函数吃透。

方法一:修改汇编代码完成跳转

我们找到了一个jnz和call的地方,因为不是flag的直接比较,所以想法是跳转至成功函数输出flag,或者直接将生成flag的函数吃透。

(修改汇编)

(新文件)

直接运行,即可获得结果

方法二:了解flag的生成

前面在调试时我已经大致了解了生成的方式(也在堆栈中看到了flag),现在我们载入IDA进行查看,由于OLLY的地址(每次基址都变)和IDA的地址显示有区别,这里还不会对应找。

但是学会了搜索关键字符串

同时也找到了调用函数sub_45E940,

后来跟着动态调试进行测试发现逻辑代码如下

存在两个数组(截取片段示例)

先两个数组按位异或,再与0x13异或。

关键函数

python代码

ss4 = [0x12,0x40,0x62,0x5,0x2,0x4,0x6,0x3,0x6,0x30,0x31,0x41,0x20,0x0C,0x30,0x41,0x1F,0x4E,0x3E,0x20,0x31,0x20,0x1,0x39,0x60,0x3,0x15,0x9,0x4,0x3E,0x3,0x5,0x4,0x1,0x2,0x3,0x2C,0x41,0x4E,0x20,0x10,0x61,0x36,0x10,0x2C,0x34,0x20,0x40,0x59,0x2D,0x20,0x41,0x0F,0x22,0x12,0x10,0x0]

ss8 = [0x7B,0x20,0x12,0x62,0x77,0x6C,0x41,0x29,0x7C,0x50,0x7D,0x26,0x7C,0x6F,0x4A,0x31,0x53,0x6C,0x5E,0x6C,0x54,0x6,0x60,0x53,0x2C,0x79,0x68,0x6E,0x20,0x5F,0x75,0x65,0x63,0x7B,0x7F,0x77,0x60,0x30,0x6B,0x47,0x5C,0x1D,0x51,0x6B,0x5A,0x55,0x40,0x0C,0x2B,0x4C,0x56,0x0D,0x72,0x1,0x75,0x7E,0x0]

flag = ""
for i in range(0,0x38):
    flag += chr(ss4[i]^ss8[i]^0x13)
print flag

执行如下

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值