Bugku Tworld迷宫 WP(踩坑记录)
本帖最后由 狄人3 于 2022-6-23 19:01 编辑下载下来的附件是个exe,先走一波传统查一下壳
发现是典中典UPX,而且竟然奇迹般的没有去除标志,那就直接upx -d一波
很好,但也没那么好,因为这个时候第一个坑就来了。。。。
当你打开程序试试的时候
当时就人傻了,这官方脱壳版还能炸?
这里先说说我的踩坑记录,直接手脱。。。(等会有正常方法)
脱壳当然要先拿xp
好吧,这都不行。。。。{:301_1008:}
那就拿真机脱一下
拿出x32dbg
x32dbg载入,esp上下硬断然后跑两步就能到oep,然后拿scylla dump修复一下
打开来之后应该是这样的
这个iat里有一个是无效的,右击把它删掉
然后fix dump
打开,还是炸。。。
好吧,连踩两坑。。。{:301_999:}
下面说说转机,多次打开,你会发现这个错误的指令内存是不一样的。。。
但是报错的地址是一样的
所以就思考是不是由于绝对地址被aslr影响导致错了呢
每次打开都是基址不同的,就是ASLR了
在去除ALSR后终于
太感动了。。。
好吧,二话不说扔IDA,根据题目提示是迷宫
先要进到主菜单,第一层是个简单的异或,扬了就好
enc1=
enc2=
passwd=""
for i in range(0,len(enc1)):
passwd=passwd + chr(enc1^ enc2)
print(passwd)
二层菜单,选择1会从自身资源里加载吐出一个flag.doc
但是打开需要密码
(我相信会有人跟我一样不去逆就去整hashcat爆破的。。。。)
好吧,并不行,那么看一下2选项的迷宫
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; //
char v9; //
__int128 v10; //
char ArgList; // BYREF
char Arglist; // BYREF
ipsi_printf("Where am I?\n", v8);
ipsi_printf_0("%s", (char)Arglist);
Instruc = Arglist;
v1 = 0;
posX = 1;
if ( Arglist )
{
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;
if ( v5 != 0x2E )
{
if ( v5 != 0x64 )
break;
v1 = 1;
}
v6 = *++v3;
Instruc = v6;
}
while ( v6 );
SUCCESS:
if ( v1 )
{
v7 = 0;
v10 = xmmword_403480;
v10 = xmmword_403470;
v10 = xmmword_403450;
v10 = xmmword_403460;
do
{
ArgList = Arglist ^ LOBYTE(v10);
ArgList = Arglist ^ BYTE4(v10);
ArgList = Arglist ^ BYTE8(v10);
ArgList = Arglist ^ BYTE12(v10);
v7 += 4;
}
while ( v7 < 16 );
if ( v7 < 100 )
{
ArgList = 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列的
差不多这个样子,看判断逻辑
不等于0x2E时,会和0x64比较,如果对了那就退出循环
那么0x64就是终点了,将图用正则替换一下,就很显然了
sssddwwwddddddssssaaaa
手动走一下就结束了
果然爆不出。。。这么复杂{:301_1008:}
再输入word就好啦
总结:前面脱壳这个确实让我挺懵逼的,不过总体来说比较简单
(还是我太菜了
题目文件:
内有原题和dump修复的文件
分析记录很详细,感谢楼主分享。楼主能提供练手程序吗? woflant 发表于 2022-6-13 15:26
分析记录很详细,感谢楼主分享。楼主能提供练手程序吗?
题目来自bugku
建议把文件一并上传,方便大家学习交流。 Hmily 发表于 2022-6-23 17:31
建议把文件一并上传,方便大家学习交流。
好的,已经编辑 太强了老哥
页:
[1]