测试文件:https://lanzous.com/ibh0xhi
脱壳
获取信息
- 32位文件
- upx壳
代码分析
看名字就知道,应该就是用几个符号代表方向,让我们走迷宫。打开字符串窗口看了看
星号那段就是迷宫了,总共70个字符。
找到main函数,发现0x40102E有莫名的指令,直接使用OD nop掉,转存到新文件。
得到了新文件,打开main函数
int __cdecl main(int argc, const char **argv, const char **envp) { signed int i; // [esp+10h] [ebp-14h] char v5[16]; // [esp+14h] [ebp-10h] sub_401140(aGoThroughTheMa); scanf(a14s, v5); for ( i = 0; i <= 13; ++i ) { switch ( v5[i] ) { case 'a': --dword_408078; break; case 'd': ++dword_408078; break; case 's': --dword_40807C; break; case 'w': ++dword_40807C; break; default: continue; } } if ( dword_408078 != 5 || dword_40807C != -4 ) { sub_401140(aTryAgain); } else { sub_401140(aCongratulation); sub_401140(aHereIsTheFlagF); } return 0; }
.data:00408078 dword_408078 dd 7 ; DATA XREF: _main:loc_401096↑r .data:00408078 ; _main+9E↑w ... .data:0040807C dword_40807C dd 0 ; DATA XREF: _main:loc_401074↑r .data:0040807C ; _main+7D↑w ...
让我们用14步,让dword_408078==5,dword_40807c==-4
不过直接凑出是不行的,结合前面的迷宫,猜测迷宫为7*10。
从+走到F就行,w:上;s:下;a:左;d:右,ssaaasaassdddw
get flag!
flag{ssaaasaassdddw}
这题是多解的,密码ssaaaa打头就行。