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:
字符替换

结果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容