前言:学习笔记。
常规思路: 下载 解压 查壳
32位>>> 32 IDA Pro打开
常规思路: >>查找字符>>> main()
东点点 西看看
然后F5 汇编成C伪代码
正向分析:
第一段代码:
大意吧,,,emmm 就判断是不是 1 2 3 4 数字代表的含义。
第二段代码:(看//)
英语好的话,沃趣 一秒破 T T
结合这个:
正向分析总结:
整合已知的东西:
① v5 接收的是 1 2 3 4 【1 2 3 4 代表方向】
② v3 = " *11110100001010000101111# "
③ v5的取值不同会走不同路线。 v5影响 v3 以及 v4 或者直接退出>>>exit
④ v7 [值] = ’1‘ >>>退出 v7[值] = "#" >>>flag
⑤ 输入的顺序是国旗!
|v5 = 方向 | | ’1‘ -->退出 | |'#'-->flag| 0? *?
方向就是坐标,只有游戏才有坐标。》》》那么这就是一个游戏(看来游戏玩的多还是有好处。)
好吧,C语言 class类 学习的时候,老师刚好举例的 >“游戏如何设定的" 坐标(X,Y) HP MP 等等。。
则 说明可以对 ② v3 = " *11110100001010000101111# " 进行变形
数据不长穷举吧【笨方法】
不过你仔细看会发现 v3的长度等于25 >>>所以我们先对半分变形,不行在穷举。。。
所以就变形啦~ (X,Y)>>>(5,5)的坐标轴
⑤ 输入的顺序是国旗!
那就走呗~~
flag{输入的顺序是国旗!} 【嘻嘻】