攻防世界--Hello, CTF
测试文件地址:https://www.lanzous.com/i5ot1yd
使用IDA1打开
打开之后,这个字符串和第一题的有些类似,拿去转换一下,Flag就得到了
CrackMeJustForFun
也可以对伪代码进行分析
1 int __cdecl main(int argc, const char **argv, const char **envp) 2 { 3 signed int v3; // ebx 4 char v4; // al 5 int result; // eax 6 int v6; // [esp+0h] [ebp-70h] 7 int v7; // [esp+0h] [ebp-70h] 8 char v8; // [esp+12h] [ebp-5Eh] 9 char v9[20]; // [esp+14h] [ebp-5Ch] 10 char v10; // [esp+28h] [ebp-48h] 11 __int16 v11; // [esp+48h] [ebp-28h] 12 char v12; // [esp+4Ah] [ebp-26h] 13 char v13; // [esp+4Ch] [ebp-24h] 14 15 strcpy(&v13, "437261636b4d654a757374466f7246756e"); 16 while ( 1 ) 17 { 18 memset(&v10, 0, 0x20u); 19 v11 = 0; 20 v12 = 0; 21 sub_40134B(aPleaseInputYou, v6); 22 scanf(aS, v9); 23 if ( strlen(v9) > 0x11 ) 24 break; 25 v3 = 0; 26 do 27 { 28 v4 = v9[v3]; 29 if ( !v4 ) 30 break; 31 sprintf(&v8, asc_408044, v4); 32 strcat(&v10, &v8); 33 ++v3; 34 } 35 while ( v3 < 17 ); 36 if ( !strcmp(&v10, &v13) ) 37 sub_40134B(aSuccess, v7); 38 else 39 sub_40134B(aWrong, v7); 40 } 41 sub_40134B(aWrong, v7); 42 result = stru_408090._cnt-- - 1; 43 if ( stru_408090._cnt < 0 ) 44 return _filbuf(&stru_408090); 45 ++stru_408090._ptr; 46 return result; 47 }
第36~39行代码是判断输入字符串和right serial是否匹配,通过第15行代码,我们知道v13就是right serial,将初始化v13的十六进制转换为字符串即可。