这题主要考查查壳与去壳
首先用 Die 查看文件信息
可以看到文件是32位的且有一个UPX壳,那接下来就是脱壳操作
放入ida反编译得到main函数伪代码
int __cdecl main(int argc, const char **argv, const char **envp)
{
int result; // eax
char Str2[14]; // [esp+12h] [ebp-3Ah] BYREF
__int16 Str1; // [esp+20h] [ebp-2Ch] BYREF
_BYTE v6[30]; // [esp+22h] [ebp-2Ah] BYREF
__main();
strcpy(Str2, "HappyNewYear!");
Str1 = 0;
memset(v6, 0, sizeof(v6));
printf("please input the true flag:");
scanf("%s", &Str1);
if ( !strncmp((const char *)&Str1, Str2, strlen(Str2)) )
result = puts("this is true flag!");
else
result = puts("wrong!");
return result;
}
简单阅读可知flag即为
flag{HappyNewYear!}
另外我们也可以手动脱壳
这篇博文写的很详细