题目描述
可执行文件分析
- 该可执行文件是32位
- 无壳
可直接拖进ollydgg或者IDA
IDA静态分析
发现可疑字符串
主函数反汇编
void main()
{
char v0; // [sp+17h] [bp-35h]@1
int v1; // [sp+30h] [bp-1Ch]@1
int v2; // [sp+34h] [bp-18h]@1
signed int v3; // [sp+38h] [bp-14h]@2
signed int i; // [sp+3Ch] [bp-10h]@14
int v5; // [sp+40h] [bp-Ch]@20
__main();
v1 = 0;
v2 = 0;
qmemcpy(&v0, _data_start__, 0x19u);
while ( 1 )
{
puts("you can choose one action to execute");
puts("1 up");
puts("2 down");
puts("3 left");
printf("4 right\n:");
scanf("%d", &v3);
if ( v3 == 2 )
{
++v1;
}
else if ( v3 > 2 )
{
if ( v3 == 3 )
{
--v2;
}
else
{
if ( v3 != 4 )
LABEL_13:
exit(1);
++v2;
}
}
else
{
if ( v3 != 1 )
goto LABEL_13;
--v1;
}
for ( i = 0; i <= 1; ++i )
{
if ( *(&v1 + i) < 0 || *(&v1 + i) > 4 )
exit(1);
}
if ( *((_BYTE *)&v5 + 5 * v1 + v2 - 41) == 49 )
exit(1);
if ( *((_BYTE *)&v5 + 5 * v1 + v2 - 41) == 35 )
{
puts("\nok, the order you enter is the flag!");
exit(0);
}
}
}
迷宫题
有点类似数据结构的迷宫,即1是墙,0是路,从*走到#
即需要向下走3步,再向右走2步,再向上走2步,再向右走2步,最后再向下走3步已知 上:1 下:2 左:3右:4
则最后的flag为:
flag{222441144222}