逆向攻防世界CTF系列3-game
逆向攻防世界CTF系列3-game
打开看下:
玩一个游戏
n 是灯的序列号,m 是灯的状态。如果第 N 盏灯的 m 为 1,则灯亮,否则灯灭。
起初所有的灯都是关闭的,现在您可以输入 n 来改变它的状态,但您要注意一点,如果您改变了第 N 盏灯的状态,第 (N-1) 盏灯和第 (N+1) 盏灯的状态也会随之改变。
当所有灯都亮起时,会出现flag,现在输入 n.n(1-8)
解法一:
一次输入12345678,得到flag(看的其他大佬,用广度优先,不理解为什么可以用广度…)
解法二:
扔到exeinfo查,无壳,32位exe
扔到ida,shift+F12没找到flag
f5找到main(当然你也可以一开始就F5然后一直点进函数内部也可以到main)
关键是这段
解释一下,就是只要不全为1就会一直循环,全为1则执行sub_457AB4();,注意sub_457AB4();是在循环外部,不在里面。
点进sub_457AB4();
最后到达这:
return的应该是flag
我们把这段伪代码转成python去运行得到flag:
注意qmemcpy(v2, “{ “, 2);中已经给a[0]和a[1]赋值了{的asc为123, “ “为32
1 | a = [123, 32, 18, 98, 119, 108, 65, 41, 124, 80, 125, 38, 124, 111, 74, 49, 83, 108, 94, 108, 84, 6] |
得到:zsctf{T9is_tOpic_1s_v5
只得到了一半,但是很奇怪程序中没有用到v3,可以尝试下v3
1 | b = [18, 64, 98, 5, 2, 4, 6, 3, 6, 48, 49, 65, 32, 12, 48, 65, 31, 78, 62, 32, |
ry_int7resting_b6t_others_are_n0
还有v4:
1 | a = [117, 126] |
t}
拼接得到zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t}
==这道题应该被改过了,我也不清楚为什么这样明明没用到v3,v4最后还会输出,(可能是需要动态debug)==
解法三:
修改值,输入2,发现1,2,3都是亮的,可以修改判定条件,使用keypatch修改
改成这样,就能跳出循环:
输入2直接出flag