这道题逻辑比较简单,放入ida简单分析就能得到flag
定位主函数后查看伪代码:
int main_0()
{
signed int i; // [esp+54h] [ebp-14h]
signed int v2; // [esp+58h] [ebp-10h]
char *v3; // [esp+5Ch] [ebp-Ch]
char *v4; // [esp+60h] [ebp-8h]
v4 = (char *)operator new(0x64u);
v3 = (char *)operator new(0x64u);
printf("请输入flag: ");
sub_40103C(&dword_47AF00, v4);
v2 = strlen(v4);
for ( i = 0; i < v2; ++i )
v3[i] = sub_4010CD(v4[i]);
v3[i] = 0;
if ( !strcmp(v3, "10<1<>;?8:%w!##&#q./,x(,((") )
{
sub_40117C((int)&unk_47AE70, "Your get the flag,but it ....");
sub_401131(sub_40107D);
}
else
{
sub_40117C((int)&unk_47AE70, "Not it..");
}
return 0;
}
大致逻辑为:将用户输入的字符串单个字符分别由函数sub_4010CD()处理后在返回到v3,最后v3与字串"10<1<>;?8:%w!##&#q./,x(,(("(加密后的字串)比较后输出相应的结果。