bugku_逆向_游戏过关

初接触逆向,就先做点简单的题。
参考链接:

https://www.52pojie.cn/thread-925121-1-1.html
https://blog.csdn.net/calmegm/article/details/82844643

游戏过关

首先运行一下,需要闯关成功才能得到flag。

在这里插入图片描述

方法一

依次输入数字1至8,即得到flag。

在这里插入图片描述

方法二

打开我们的神器ida。(shift+f12)查看下字符串,看到了闯关成功后输出flag的字符串。说明这个地址附近就有flag。记住地址。0050B0F0。
在这里插入图片描述
双击进入所在地址,点击sub_45e940进入函数内部。
在这里插入图片描述
设置显示行前缀地址(Option-General-Display-Line Prefix) ,记住偏移地址是E940

在这里插入图片描述
打开OD。搜索中文字符串,随便下个断点,双击进入。f2下断点。运行

在这里插入图片描述
在这里插入图片描述
取消断点。双击指令push。修改为007ae940,为什么和ida的不一样呢?ida看的是静态的地址,程序运行,前四位会变。后四位偏移不变。
在这里插入图片描述
f8单步,成功跳转到007ae940。
在这里插入图片描述
继续f8单步。运行到这里我们发现往回跳转,这是个循环。直接选中下行指令lea eas,[local,34],点击f4。即可跳出这个循环。我们发现flag已经出来了。
在这里插入图片描述
在这里插入图片描述

方法三

在字符串the flag is的下方有一个解密循环。即下图。分析代码。发现是两个数组的每一位进行异或后再和0x13进行异或。
在这里插入图片描述
在这里插入图片描述
解密脚本

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)

在这里插入图片描述

发布了38 篇原创文章 · 获赞 8 · 访问量 2126

猜你喜欢

转载自blog.csdn.net/qq_41918771/article/details/102735986