Bugku-CTF逆向篇之游戏过关
游戏过关
本题要点:IDA使用 、OD使用、修改程序代码并保存
-------------------------------
玩一个游戏
n是灯的序列号,m是灯的状态
如果第n盏灯的m是1,它是亮的,如果不是,它是灭的
起初所有的灯都是关着的
现在你可以输入n来改变它的状态
但是你要注意一件事,如果你改变第N盏灯的状态,第(N-1)和第(N+1)的状态也会改变
当所有的灯都亮时,就会出现flag
现在,输入n
-------------------------------
笔者打算先随便输一些数字玩一玩.....
直接按照从小到大顺序试一下吧...........12345678..........结果.........
flag就出来了........
zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t}
但是老实讲,很多逆向题目不会这么容易得到flag
我们本着学习技术的态度,还是老老实实用 IDA和OD 分析分析吧~
一、查壳
第一步当然是先查壳啦~
查壳 ,无壳。
我们发现是 Visual C++ 编写的。
二、IDA静态分析
既然没有壳,那我们下面就用IDA来静态分析一下:
先用IDA里的搜索功能,搜索一下flag这样的关键字~
我们双击点击 .text:0045F4E1或者.text:0045E968 ,都会定位到图下这一块位置。
我们观察一下, .text:0045F940 应该是核心代码运算判断的部分。
继续往下翻一翻,我们看到了程序运行显示字符串的那段代码:
我们可以转化成c语言代码,更加容易理解一些。
(笔者用IDA 64位的F5反汇编不了c语言,不知道是不是版本的问题,用32位的就可以使用F5的反汇编功能qwq)
反汇编成c语言之后,我们看到了判断灯亮的语句。
往下再翻一翻,我们看到了最后面的运算:
关键函数的主要逻辑就是上面说的游戏规则的实现。
看一下输出flag的函数:就是将两个已经初始化的数组求与之后,再按位和 0x13 求与之后,转化成字符串输出即可~
借用一位大佬的py3代码:
(大佬的文章在参考资料里面,有需要的小伙伴可以参考~)
# py 3 # coding:utf-8 array1 = [18,64,98,5,2,4,6,3,6,48,49,65,32,12,48,65,31,78,62,32,49,32,1,57,96,3,21,9,4,62,3,5,4,1,2,3,44,65,78,32,16,97,54,16,44,52,32,64,89,45,32,65,15,34,18,16,0] #第一个数组 array2 = [123,32,18,98,119,108,65,41,124,80,125,38,124,111,74,49,83,108,94,108,84,6,96,83,44,121,104,110,32,95,117,101,99,123,127,119,96,48,107,71,92,29,81,107,90,85,64,12,43,76,86,13,114,1,117,126,0] #第二个数组 flag = '' for i in range(len(array1)): flag+= chr(array1[i] ^ array2[i] ^ 0x13 ) #两个数组求与,然后每一位与0x13求与 print (flag)
三、OD动态调试
当然,我们也可以利用OD进行动态调试~
首先我们可以通过 中文搜索引擎=》智能搜索
搜索flag
双击点击进入
我们发现跳转来自 00427AB4 ,因此我们往上转到00427AB4
0042E940=ConsoleA.0042E940 表明了它指向了输出flag的函数;
本地调用来自 0042F66C :说明它是由0042F66C调用的,所以我们再往回转到 0042F66C:
我们可以在开头下一个断点,运行之后,单步运行几次,就会发现:
一旦只要由一个判断不满足,程序就跳转到输出flag的函数的下一条去了,这样就不会输出flag而重新开始循环要求你输出n了
所以我们要修改源代码使得程序不管怎样都会进入输出flag的函数,这样我们只要运行程序就能得到flag了。
修改完就是这个样子啦~
保存文件
(没有直接保存的选项,所以需要右键 复制到可执行文件=》选择 )
选择路径保存。
运行我们修改之后的程序~
回车,我们就看到答案啦~
zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t}
参考资料
https://blog.csdn.net/Onlyone_1314/article/details/89414568
https://blog.csdn.net/weixin_42528089/article/details/85114846
--------------------- ┑( ̄Д  ̄)┍ --------------------------
作者:0yst3r[一只在安全领域努力奋斗的小菜鸡]
来源:博客园[ https://www.cnblogs.com/0yst3r-2046/ ] 引用时请注明来源哦~
(๑•̀ㅂ•́)و✧ヽ(✿゚▽゚)ノ(*^▽^*) φ(≧ω≦*)♪
如果本文对你有用,本人不胜欢喜。
The world is your oyster.