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}

posted @ 2021-10-30 23:27  Moominn  阅读(175)  评论(0编辑  收藏  举报