1.查壳
PE64 无壳
2.IDA静态分析
main:
__int64 sub_1400118C0()
{
char *v0; // rdi
__int64 i; // rcx
size_t v2; // rax
char v4[36]; // [rsp+0h] [rbp-20h] BYREF
int j; // [rsp+24h] [rbp+4h]
char Str1[224]; // [rsp+48h] [rbp+28h] BYREF
__int64 v7; // [rsp+128h] [rbp+108h]
v0 = v4;
for ( i = 82i64; i; --i )
{
*(_DWORD *)v0 = -858993460;
v0 += 4;
}
for ( j = 0; ; ++j )
{
v7 = j;
if ( j > j_strlen(Str2) ) // str2="{hello_world}"
break;
if ( Str2[j] == 'o' )
Str2[j] = '0';
}
sub_1400111D1("input the flag:");
sub_14001128F("%20s", Str1);
v2 = j_strlen(Str2);
if ( !strncmp(Str1, Str2, v2) )
sub_1400111D1("this is the right flag!\n");
else
sub_1400111D1("wrong flag\n");
sub_14001113B((__int64)v4, (__int64)&unk_140019D00);
return 0i64;
}
程序逻辑分析:
1.遍历数组Str2,将其中的‘o’变为‘0’。
2.用户的输入赋值给数组Str1。
3.比较St2和Str1,若相等则输出正确提示。
3.解题
Str[2]的值为:{hello_world}
将其中的'o'替换为‘0’,得到flag
flag为:flag{hell0_w0rld}