逆向bugku-game

bugku的游戏过关

最初解题

逆向bugku-game_第1张图片
意思是
逆向bugku-game_第2张图片
其实这道题很容易凭实力做出来,只要明白它的意思就行。
说白了就是一开始八个线路都是关着的,你让着八个都打开就行,但是你每改变一个就会影响 到周围的两个
经过坚持不懈五分钟就做了出来,后来我查这道题的wp发现,直接从1按到8就出来flag了。

逆向bugku-game_第3张图片
flag就是zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t}

下面用正常的方法来解一下,第一步,拉入IDA中
进去以后
逆向bugku-game_第4张图片
按F5之后就能得到伪代码,然后进入这个主函数
逆向bugku-game_第5张图片

进入之后我们快速地去发现重点

逆向bugku-game_第6张图片
最后的sub_457AB4就是输出flag的函数
这里有个我刚知道的点就是当反编译用户自定义的函数名时就会sub_加上地址。
我们点进去看这个函数
逆向bugku-game_第7张图片
分析这段代码,先看这个for循环。
v2先与v59进行异或运算(两个值不相同,结果为1,值相同,结果为0)
这就可以找个脚本跑一下。写起来也挺简单的。

脚本

逆向bugku-game_第8张图片逆向bugku-game_第9张图片

这就得到了flag。

代码分析

现在我们来具体分析一下主函数的代码。
逆向bugku-game_第10张图片
上面那些蓝色的字体就是游戏动画画面
逆向bugku-game_第11张图片
19—28行那就是我们打开这个程序后出现的那些文字就是游戏介绍,
逆向bugku-game_第12张图片
接下来是一个大的while循环。里面又有一个while循环,两个if循环
1.while循环是对用户输入的内容进行判断,如果是1~8的数字,则跳出while循环,去执行下面的操作
如果不是这几个数字,就会输出 sorry,n error,try again.我们在命令行中可以得到验证。
2.第一个if循环:如果输入进来的v1不为0的话就进行sub_4576D6这个函数
进入这个函数
逆向bugku-game_第13张图片
这我们也看不太懂,但应该是游戏规则的一部分。不重要。
3.看到第二个if循环我们就明白上面那个函数的意思了。
因为在这儿要判定这些值是否都是等于1。
当都等于1之后才会执行输出flag的函数。

你可能感兴趣的:(逆向)