分析文件
32位,有壳upx
脱壳
使用吾爱破解工具箱里面的upx脱壳机,拖入进去会自动脱壳
ida32打开
明显的花指令特征
尝试修改call指令,改成nop,右击call指令->patching->change byte
可以看到E8 58 C7 45 EC 00 00 00 00 EB 09 8B 4D EC 83 C1
将其开头的E8改成90
选中红色地址区域,按p键即可看到main函数,然后按f5查看伪代码
分析main函数
scanf("%14s", v5); //输入数据到v5
for ( i = 0; i <= 13; ++i )
{
switch ( v5[i] )
{
case 'a':
--*asc_408078;
break;
case 'd':
++*asc_408078;
break;
case 's':
--dword_40807C;
break;
case 'w':
++dword_40807C;
break;
default:
continue;
}
}
//遍历v5中的每一个值,并且分别与a,d,s,w进行比较,同时对asc_408078和dword_40807C变量进行加减操作
if ( *asc_408078 == 5 && dword_40807C == -4 )
{
sub_401140(aCongratulation); //表示输入正确
sub_401140(aHereIsTheFlagF);
}
else
{
sub_401140(aTryAgain);
}
//最终asc_408078变量要等于5,dword_40807C要等于-4
通过上面分析,a,d,s,w几个关键字母可以猜出是走迷宫的题目,并且查看汇编代码可以看到asc_408078,和dword_40807C的值 (7和0),大概就是初始坐标
猜测迷宫图是由*******+********* ****** **** ******* **F****** **************这些字符组成
这些字符长度是70,初始坐标是(7,0),迷宫图只有两种可能排列,一种是7*10,另一种是10*7
7*10的是这样
*******
+******
*** ***
***
****
*******
**F***
***
*******
*******
很明显不对,因为根本走不通
10*7的是这样
*******+**
******* **
**** **
** *****
** **F****
** ****
**********
嗯,这样看样子才对,分析了一下,应该是从+开始走,走到F,然后移动的方向分别表示w,a,s,d这几个字母
flag{ssaaasaassdddw}