无壳直接扔到ida中静分析
int __cdecl main(int argc, const char **argv, const char **envp)
{
char s[240]; // [rsp+0h] [rbp-1E0h] BYREF
char v5[240]; // [rsp+F0h] [rbp-F0h] BYREF
memset(s, 0, 0x1EuLL);
printf("Please Input Key: ");
__isoc99_scanf("%s");
encode(v5, s);
if ( strlen(v5) == key )
{
if ( !strcmp(s, enflag) )#enflag db 'izwhroz""w"v.K".Ni'
puts("You are Right");
else
puts("flag{This_1s_f4cker_flag}");
}
return 0;
}
主函数将s与enflag函数比较,如果相同就正确,跟进enflag发现字符串,s是经过encode函数处理后的字符串,跟进encode函数观察代码
nt __fastcall encode(const char *a1, __int64 a2)
{
char v3[104]; // [rsp+10h] [rbp-70h]
int v4; // [rsp+78h] [rbp-8h]
int i; // [rsp+7Ch] [rbp-4h]
i = 0;
v4 = 0;
if ( strlen(a1) != key )
return puts("Your Length is Wrong");
for ( i = 0; i < key; i +&#