[HDCTF2019]Maze 题解

举报
御麟 发表于 2023/04/26 21:01:18 2023/04/26
【摘要】 ​少欲则心静,心静则事简。                                        ——人民日报1.查壳​编辑 是一个加了upx壳的32位EXE文件2.使用Kali Linux脱壳maze题目脱壳3.去除脏字节​编辑 没有找到主函数,发现这段汇编代码标红了,IDA分析崩溃,这是掺杂了花指令​编辑​编辑 这里jnz,不论判断成立不成立,都会执行到同样的位置​编辑该地址标红...

少欲则心静,心静则事简。

                                        ——人民日报

1.查壳

编辑

 是一个加了upx壳的32位EXE文件

2.使用Kali Linux脱壳

db0608547154d9c8254e4cbd443e2cd5.jpeg

maze题目脱壳

3.去除脏字节

编辑

 没有找到主函数,发现这段汇编代码标红了,IDA分析崩溃,这是掺杂了花指令

编辑

编辑

 这里jnz,不论判断成立不成立,都会执行到同样的位置

编辑

该地址标红了,说明本来不存在这样的地址 

call一个不存在的地址很不科学,说明call是被错误识别了的

我们将call指令按下快捷键U修改为二进制,将脏字之后的按下快捷键C重新分析为代码

 编辑

然后全选红色地址,按下快捷键P识别为函数,得到了main函数

上次过程详细操作可以查看视频:

2acf1c8e382a77d51ee5226af3036f75.jpeg

maze去除脏字节


4.静态分析

经过上述过程我们得到了main函数

根据题目Maze含义这应该是一个迷宫题目

int __cdecl main(int argc, const char **argv, const char **envp)
{
  int v3; // ecx
  int v4; // ST04_4
  signed int i; // [esp+10h] [ebp-14h]
  char v7[16]; // [esp+14h] [ebp-10h]

  sub_401140(aGoThroughTheMa);
  v4 = scanf(a14s, v7);
  if ( (v3 ^ v4) == v3 )
    JUMPOUT(unk_40102E);
  for ( i = 0; i <= 13; ++i )
  {
    switch ( v7[i] )
    {
      case 'a':
        --dword_408078;
        break;
      case 'b':
      case 'c':
      case 'e':
      case 'f':
      case 'g':
      case 'h':
      case 'i':
      case 'j':
      case 'k':
      case 'l':
      case 'm':
      case 'n':
      case 'o':
      case 'p':
      case 'q':
      case 'r':
      case 't':
      case 'u':
      case 'v':
        continue;
      case 'd':
        ++dword_408078;
        break;
      case 's':
        --dword_40807C;
        break;
      case 'w':
        ++dword_40807C;
        break;
    }
  }
  if ( dword_408078 != 5 || dword_40807C != -4 )
  {
    sub_401140(aTryAgain);
  }
  else
  {
    sub_401140(aCongratulation);
    sub_401140(aHereIsTheFlagF);
  }
  return 0;
}

编辑

 此处应该是asdw进行上下左右移动

编辑

我们点击dword_408078跟进发现值为7,说明迷宫的长或宽有可能是7

Shift+F12打开string窗口找下迷宫图案

编辑

maze="*******+********* ******    ****   ******* **F******    **************"
print(len(maze))

迷宫字符串长度为70

可以猜到是7*10的迷宫

排列一下

*******+**
*******0**
****0000**
**000*****
**0**F****
**0000****
**********

得到flag{ssaaasaassdddw}

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。