先查壳
发现是32位,且含有一个upx壳
这里选择用CFF脱壳,将exe文件导入CFF
点击unpack脱壳
之后将脱壳后的文件导入IDA
如果函数较多说明脱壳成功。
检索字符串
对第四个字符串尽行交叉引用。
反汇编查看伪代码
int __cdecl main(int argc, const char **argv, const char **envp)
{
char Str2[14]; // [esp+12h] [ebp-3Ah] BYREF
char Str1[44]; // [esp+20h] [ebp-2Ch] BYREF
__main();
strcpy(Str2, "HappyNewYear!");
memset(Str1, 0, 32);
printf("please input the true flag:");
scanf("%s", Str1);
if ( !strncmp(Str1, Str2, strlen(Str2)) )
return puts("this is true flag!");
else
return puts("wrong!");
}
分析这段代码,将HappyNewYear!复制到str2,不难想到HappyNewYear!就是真正的flag