Tworld-Bugku-Reverse
一道蛮好玩的迷宫题
下载解压得到一个 word.exe,先用 exeinfo 看一下
发现加了 UPX 壳,使用工具脱壳,但脱壳后的程序无法正常运行,使用 StudyPE+ 固定 PE 基址
然后程序就可以正常运行了,拖入 IDA 分析一下,找到主函数 main_0
首先看第一部分
用户输入内容 Arglist,可以看到长度为 6,然后与 dword_4032E8 数组异或,将异或后的结果与另一个数组 dword_4032D0 作比较,一致则输出 "Hello administrator 😃"
查看 dword_4032E8 与 dword_4032D0 数组的值
写出脚本
#include<bits/stdc++.h>
using namespace std;
int a[] = {0xD0,0xCF,0x11,0xE0,0xA1,0xB1};
int b[] = {0xA3,0xA1,0x70,0xA6,0xF3,0xD7};
int main() {
for (int i = 0; i < 6; i++)
cout << (char)((int)a[i] ^ (int)b[i]);
return 0;
}
得到 password 为 "snaFRf"
再次进入程序输入密码,导出 flag.doc,发现打开需要密码,于是去看看迷宫部分
可以看到输出了个 "where am i?",IDA 查看字符串定位到这一部分
简单分析一下可以发现,迷宫一行有 12 个字符,然后我们可以用 w, a, s, d 来控制方向,迷宫存在 dword_403300 中,dword_403300 的值如下
整理可得:
手动走一下,路径为:sssddwwwddddddssssaaaa
但是在程序中输入发现会闪退,用 OD 动调一下
载入 OD,用中文搜索引擎定位到走迷宫的部分,单步执行过去可以看到 password
得到密码:Qbf6q6x9^JdUrpkM
输入 doc 得到 flag
Flag{Oh_my_God_this_one_is_so_trong}