[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 }