2019年7月8日做题笔记(安恒6月月赛简单迷宫)

这是一道2019年安恒6月月赛的逆向题目,是一道简单的迷宫题,之前没有详细的做题的过程,现在补上,题目地址:
https://github.com/Dong555/Anheng_cup_month/tree/master/2019-06/Reverse
在IDA中根据字符串找到关键位置:

字符串

首先静态分析下程序的行为:


反调试

在关键函数中,开始就是一个反调试函数,CheckRemoteDebuggerPresent这个API可以检测是否有调试器的存在,而且这个和PEB里面的BeingDebugged无关了。看一下CheckRemoteDebuggerPresent的声明:

BOOL CheckRemoteDebuggerPresent
(
  HANDLE hProcess,
  PBOOL  pbDebuggerPresent
);

来自官方文档的说明:


官方文档

第一个参数是进程句柄,第二参数用于存放结果。返回值表示函数是否执行成功,这里不对这个函数进行深入,因为第一这道题不需要动调,第二这道题是64位程序,前面检查了一波OllyDBG这个32位程序调试器的注册表项,emmmm


程序输入

程序的输入部分没什么好说的,输入26个数字进去,从下面可以看出,需要输入1,2,3,4 这四个数字,分别对应上下左右。
关键部分

从下方输出illegal access那里,说明v11和v10必须小于等于6,那大概是个7X7的二维数组了。并且在asc_140003350那里,如果值为1,输出you lost,可以确定这个就是迷宫的map,直接扒出来。


map

很显然如果为1就会输出lose,所以接下来就是走迷宫了,最后程序会根据你的输入替换下字符并输出flag:
字符替换

结果

你可能感兴趣的:(2019年7月8日做题笔记(安恒6月月赛简单迷宫))