吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2091|回复: 5
收起左侧

[CTF] Bugku Tworld迷宫 WP(踩坑记录)

[复制链接]
狄人3 发表于 2022-6-11 20:57
本帖最后由 狄人3 于 2022-6-23 19:01 编辑

chrome_Qb48ITHIfs.png

下载下来的附件是个exe,先走一波传统查一下壳
exeinfoPE_BH4XtVRmBC.png
发现是典中典UPX,而且竟然奇迹般的没有去除标志,那就直接upx -d一波
cmd_ygcwxbOG7Q.png


很好,但也没那么好,因为这个时候第一个坑就来了。。。。


当你打开程序试试的时候


word_wVqJqlVppT.png

当时就人傻了,这官方脱壳版还能炸?


这里先说说我的踩坑记录,直接手脱。。。(等会有正常方法)


脱壳当然要先拿xp
dhq7YC9U8M.png
好吧,这都不行。。。。

那就拿真机脱一下
拿出x32dbg

x32dbg_Q1U4WHWcRV.png

x32dbg载入,esp上下硬断然后跑两步就能到oep,然后拿scylla dump修复一下


打开来之后应该是这样的
x32dbg_lQzYZXUbWe.png

这个iat里有一个是无效的,右击把它删掉
然后fix dump
explorer_U9bXIKaaWv.png
打开,还是炸。。。
NVKhQyocXD.png



好吧,连踩两坑。。。


下面说说转机,多次打开,你会发现这个错误的指令内存是不一样的。。。
但是报错的地址是一样的
所以就思考是不是由于绝对地址被aslr影响导致错了呢
每次打开都是基址不同的,就是ASLR了


在去除ALSR后终于
41UnDD8Abs.png
太感动了。。。
好吧,二话不说扔IDA,根据题目提示是迷宫
ida_SwHwdDqNkT.png
先要进到主菜单,第一层是个简单的异或,扬了就好
[Python] 纯文本查看 复制代码
enc1=[0xD0,0xCF,0x11,0xE0,0xA1,0xB1]
enc2=[0xA3,0xA1,0x70,0xA6,0xF3,0xD7]
passwd=""
for i in range(0,len(enc1)):
    passwd=passwd + chr(enc1[i]^ enc2[i])
print(passwd)

二层菜单,选择1会从自身资源里加载吐出一个flag.doc
但是打开需要密码
WINWORD_JhP9PICBXQ.png
(我相信会有人跟我一样不去逆就去整hashcat爆破的。。。。)
好吧,并不行,那么看一下2选项的迷宫


[C] 纯文本查看 复制代码
void __noreturn maze()
{
  char Instruc; // cl
  int v1; // ebx
  int posX; // edx
  char *v3; // edi
  int posY; // esi
  int v5; // eax
  char v6; // al
  unsigned int v7; // eax
  char v8; // [esp+0h] [ebp-118h]
  char v9; // [esp+0h] [ebp-118h]
  __int128 v10[4]; // [esp+Ch] [ebp-10Ch]
  char ArgList[100]; // [esp+4Ch] [ebp-CCh] BYREF
  char Arglist[100]; // [esp+B0h] [ebp-68h] BYREF

  ipsi_printf("Where am I?\n", v8);
  ipsi_printf_0("%s", (char)Arglist);
  Instruc = Arglist[0];
  v1 = 0;
  posX = 1;
  if ( Arglist[0] )
  {
    v3 = Arglist;
    posY = 12;
    do
    {
      switch ( Instruc )
      {
        case 'w':
          posY -= 12;
          break;
        case 'a':
          --posX;
          break;
        case 's':
          posY += 12;
          break;
        case 'd':
          ++posX;
          break;
        default:
          goto SUCCESS;
      }
      v5 = dword_403300[posY + posX];
      if ( v5 != 0x2E )
      {
        if ( v5 != 0x64 )
          break;
        v1 = 1;
      }
      v6 = *++v3;
      Instruc = v6;
    }
    while ( v6 );
SUCCESS:
    if ( v1 )
    {
      v7 = 0;
      v10[0] = xmmword_403480;
      v10[1] = xmmword_403470;
      v10[2] = xmmword_403450;
      v10[3] = xmmword_403460;
      do
      {
        ArgList[v7] = Arglist[v7] ^ LOBYTE(v10[v7 / 4]);
        ArgList[v7 + 1] = Arglist[v7 + 1] ^ BYTE4(v10[v7 / 4]);
        ArgList[v7 + 2] = Arglist[v7 + 2] ^ BYTE8(v10[v7 / 4]);
        ArgList[v7 + 3] = Arglist[v7 + 3] ^ BYTE12(v10[v7 / 4]);
        v7 += 4;
      }
      while ( v7 < 16 );
      if ( v7 < 100 )
      {
        ArgList[v7] = 0;
        ipsi_printf(yourpassis, (char)ArgList); // Success
        exit(0);
      }
      __report_rangecheckfailure();
    }
  }
  ipsi_printf("I'm lost.", v9);
  exit(0);
}



是一个靠wasd来走的迷宫
因为y坐标是在上下的时候减去12的,所以不难看出一行有12格,且迷宫数据 dword_403300


提取出来,格式化为12列的
gT2qPAzLtB.png
差不多这个样子,看判断逻辑
不等于0x2E时,会和0x64比较,如果对了那就退出循环


那么0x64就是终点了,将图用正则替换一下,就很显然了
vWGHkRbL1B.png
sssddwwwddddddssssaaaa
手动走一下就结束了


nPJoMt413R.png
果然爆不出。。。这么复杂

再输入word就好啦


总结:前面脱壳这个确实让我挺懵逼的,不过总体来说比较简单
172786492.png
(还是我太菜了

题目文件: tworld.rar (27.51 KB, 下载次数: 1)
内有原题和dump修复的文件

免费评分

参与人数 3吾爱币 +10 热心值 +3 收起 理由
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
笙若 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
三滑稽甲苯 + 2 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

woflant 发表于 2022-6-13 15:26
分析记录很详细,感谢楼主分享。楼主能提供练手程序吗?
 楼主| 狄人3 发表于 2022-6-13 15:36
woflant 发表于 2022-6-13 15:26
分析记录很详细,感谢楼主分享。楼主能提供练手程序吗?

题目来自bugku
Hmily 发表于 2022-6-23 17:31
 楼主| 狄人3 发表于 2022-6-23 19:01
Hmily 发表于 2022-6-23 17:31
建议把文件一并上传,方便大家学习交流。

好的,已经编辑
baicha1 发表于 2022-8-8 07:40
太强了老哥
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 22:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表