攻防世界--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的十六进制转换为字符串即可。

 

posted @ 2019-08-20 23:26  Hk_Mayfly  阅读(1668)  评论(0编辑  收藏  举报