[C++]类似九宫格算法的CrackMe

  1 #include <iostream>
  2 #include <string.h>
  3 using namespace std;
  4 
  5 int main()
  6 {
  7     char RegKey[200];        // 320816081632163208
  8     int tip[21] = {80, 108, 101, 97, 115, 101, 0, 105, 110, 112, 117, 116, 0,
  9         82, 101, 103, 75, 101, 121, 58, 0};
 10     // Please input RegKey: 
 11     int ok[32] = {86, 101, 114, 121, 0, 103, 111, 111, 100, 33, 0, 89, 111, 117, 114, 0,
 12         82, 101, 103, 75, 101, 121, 0, 105, 115, 0, 82, 105, 103, 104, 116, 33};
 13     // Very good! Your RegKey is Right!
 14     int no[28] = {83, 111, 114, 114, 121, 33, 0, 89, 111, 117, 114, 0,
 15         82, 101, 103, 75, 101, 121, 0, 105, 115, 0, 87, 114, 111, 110, 103, 33};
 16     // Sorry! Your RegKey is Wrong!
 17     int TestLen[25] = {82, 101, 103, 75, 101, 121, 0, 108, 101, 110, 103, 116, 104, 0,
 18         109, 117, 115, 116, 0, 98, 101, 0, 49, 56, 46};
 19     // RegKey length must be 18.
 20     
 21     for(int i = 0; i < 21; i++)
 22         cout << (char)tip[i];
 23     cin >> RegKey;
 24     
 25     int key1 = 32, key2, key3, key4, key5 = 16, key6, key7, key8, key9;
 26     
 27     // 判断输入位数是否为 18  若不等于 18 输出提示
 28     if(strlen(RegKey) != 18)
 29     {
 30         for(int i = 0; i < 25; i++)
 31             cout << (char)TestLen[i];
 32         cout << endl;
 33     }
 34     else
 35     {
 36         /* 
 37             ━━━━━━━━━━━━━━━━
 38             ┃ 32 ┃ xx ┃ xx ┃
 39             ━━━━━━━━━━━━━━━━
 40             ┃ xx ┃ 16 ┃ xx ┃
 41             ━━━━━━━━━━━━━━━━
 42             ┃ xx ┃ xx ┃ xx ┃
 43             ━━━━━━━━━━━━━━━━
 44         */
 45         // 判断左上角是否为 32   且中心是否为 16
 46         if((RegKey[0] - '0') * 10 + (RegKey[1] - '0') == key1
 47             && (RegKey[8] - '0') * 10 + (RegKey[9] - '0') == key5)
 48         {
 49             key2 = (RegKey[2] - '0') * 10 + (RegKey[3] - '0');
 50             key3 = (RegKey[4] - '0') * 10 + (RegKey[5] - '0');
 51             key4 = (RegKey[6] - '0') * 10 + (RegKey[7] - '0');
 52             key6 = (RegKey[10] - '0') * 10 + (RegKey[11] - '0');
 53             key7 = (RegKey[12] - '0') * 10 + (RegKey[13] - '0');
 54             key8 = (RegKey[14] - '0') * 10 + (RegKey[15] - '0');
 55             key9 = (RegKey[16] - '0') * 10 + (RegKey[17] - '0');
 56             
 57             // 这里判断一下右下角是否为 0  因为右下角为 0 则除了已给出的 32 和 16
 58             // 其他部位全部填 0 则可正确注册
 59             if(key9 != 0)
 60             {
 61                 // 判断横排三组数相乘是否相等
 62                 if(key1 * key2 * key3 == key4 * key5 * key6
 63                     && key4 * key5 * key6 == key7 * key8 * key9)
 64                 {
 65                     // 判断竖排三组数相乘是否相等
 66                     if(key1 * key4 * key7 == key2 * key5 * key8
 67                         && key2 * key5 * key8 == key3 * key6 * key9)
 68                     {
 69                         // 判断对角两组数相乘是否相等
 70                         if(key1 * key5 * key9 == key3 * key5 * key7)
 71                         {
 72                             for(int i = 0; i < 32; i++)
 73                                 cout << (char)ok[i];
 74                             cout << endl;
 75                         }
 76                         else
 77                         {
 78                             for(int i = 0; i < 28; i++)
 79                                 cout << (char)no[i];
 80                             cout << endl;
 81                         }
 82                     }
 83                     else
 84                     {
 85                         for(int i = 0; i < 28; i++)
 86                             cout << (char)no[i];
 87                         cout << endl;
 88                     }
 89                 }
 90                 else
 91                 {
 92                     for(int i = 0; i < 28; i++)
 93                         cout << (char)no[i];
 94                     cout << endl;
 95                 }
 96             }
 97             else
 98             {
 99                 for(int i = 0; i < 28; i++)
100                     cout << (char)no[i];
101                 cout << endl;
102             }
103         }
104         else
105         {
106             for(int i = 0; i < 28; i++)
107                 cout << (char)no[i];
108             cout << endl;
109         }
110     }
111     return 0;
112 }

 

posted @ 2018-12-29 18:00  hoy0a1d  阅读(237)  评论(0编辑  收藏  举报