algorithms.cpp
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:7k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. //#define ROPP_DEBUG
  2. #ifdef ROPP_DEBUG
  3. #include <stdio.h>
  4. #endif
  5. #include "algorithms.h"
  6. #include "mcg_cipher.h"
  7. #include "rmd128.h"
  8. #include "misty1.h"
  9. #include "cast.h"
  10. #include "turtle.h"
  11. #include "feal8.h"
  12. #include "snefru.h"
  13. #include "tiger.h"
  14. #include "safer.h"
  15. #include "seal.h"
  16. // MacGuffin Cipher
  17. static dword
  18. func0(dword aKey)
  19. {
  20. byte Key[16]={0x40, 0xF2, 0x41, 0xB2, 0x69, 0xF6, 0xF1, 0xAF, 0x63, 0xF4, 0x5D, 0xFF, 0xE, 0x1B, 0x11, 0x9B};
  21. dword Blk[2]={0,0};
  22. static MCGKey ExpKey;
  23. static char KeyNE = 1;
  24. Blk[0]=aKey;
  25. if(KeyNE)
  26. {
  27. MCGKeyset(Key,&ExpKey);
  28. KeyNE = 0;
  29. }
  30. MCGBlockEncrypt0((byte*)Blk,&ExpKey);
  31. return Blk[0];
  32. }
  33. // MacGuffin Cipher
  34. static dword
  35. func1(dword aKey)
  36. {
  37. byte Key[16]={0x40, 0xF2, 0x41, 0xB2, 0x69, 0xF6, 0xF1, 0xAF, 0x63, 0xF4, 0x5B, 0xFF, 0xE, 0x1C, 0x11, 0x9B};
  38. dword Blk[2]={0,0};
  39. static MCGKey ExpKey;
  40. static char KeyNE = 1;
  41. Blk[0]=aKey;
  42. if(KeyNE)
  43. {
  44. MCGKeyset(Key,&ExpKey);
  45. KeyNE = 0;
  46. }
  47. MCGBlockEncrypt1((byte*)Blk,&ExpKey);
  48. return Blk[0];
  49. }
  50. //RIPEMD-128
  51. static dword
  52. func2(dword aKey)
  53. {
  54. dword MDbuf[4]={0,0,0,0};
  55. MDinit(MDbuf); //sub_502500
  56. MDfinish(MDbuf,(byte*)&aKey,4,1);
  57. return MDbuf[3];
  58. }
  59. // Snefru
  60. static dword
  61. func3(dword aKey)
  62. {
  63. dword input[16] = { 0x0023D6F7, 0 };
  64. dword output[4];
  65. input[7] = aKey;
  66. snefruHash512(output, input);
  67. return output[1];
  68. }
  69. // Tiger
  70. static dword
  71. func4(dword aKey)
  72. {
  73. dword res[6] = { 0 };
  74. dword str[16] = { 0 };
  75. str[1] = aKey;
  76. tiger(str, 64, res);
  77. return res[2];
  78. }
  79. // Safer
  80. static dword
  81. func5(dword aKey)
  82. {
  83. static safer_key_t saferKey1;
  84. static bool saferInited1 = false;
  85. if ( ! saferInited1 ) {
  86. Safer_Init_Module();
  87. safer_block_t Key = { 0x9C, 0x56, 0xD1, 0x12, 0x23, 0xC0, 0xB4, 0x37 };
  88. Safer_Expand_Userkey( Key, Key, 8, 0, saferKey1 );
  89. saferInited1 = true;
  90. }
  91. safer_block_t inBlock = { 0 };
  92. safer_block_t outBlock = { 0 };
  93. *(dword*)(inBlock) = aKey;
  94. Safer_Encrypt_Block( inBlock, saferKey1, outBlock );
  95. return *(dword*)(outBlock);
  96. }
  97. // Safer
  98. static dword
  99. func6(dword aKey)
  100. {
  101. static safer_key_t saferKey2;
  102. static bool saferInited2 = false;
  103. if ( ! saferInited2 ) {
  104. Safer_Init_Module();
  105. safer_block_t Key = { 0x9C, 0x56, 0xDD, 0x12, 0x23, 0xC1, 0xB4, 0x37 };
  106. Safer_Expand_Userkey( Key, Key, 8, 0, saferKey2 );
  107. saferInited2 = true;
  108. }
  109. safer_block_t inBlock = { 0 };
  110. safer_block_t outBlock = { 0 };
  111. *(dword*)(inBlock) = aKey;
  112. Safer_Decrypt_Block( inBlock, saferKey2, outBlock );
  113. return *(dword*)(outBlock);
  114. }
  115. // CAST
  116. static dword
  117. func7(dword aKey)
  118. {
  119. static cast_key CASTKey;
  120. static bool CASTInited = false;
  121. byte Key[16] = {
  122. 0x40, 0xF2, 0x41, 0xB2, 0x69, 0xF6, 0xF1, 0xAF,
  123. 0x63, 0xF3, 0x5D, 0xFF, 0x0E, 0x1C, 0x11, 0x9B
  124. };
  125. if(!CASTInited)
  126. {
  127. cast_setkey(&CASTKey, Key, 16);
  128. CASTInited = true;
  129. }
  130. byte inBlock[8] = {0, 0, 0, 0, 0, 0, 0, 0};
  131. byte outBlock[8] = {0, 0, 0, 0, 0, 0, 0, 0};
  132. *(dword*)(inBlock) = aKey;
  133. cast_encrypt(&CASTKey, inBlock, outBlock);
  134. return *(dword*)(outBlock);
  135. }
  136. // CAST
  137. static dword
  138. func8(dword aKey)
  139. {
  140. static cast_key CASTKey;
  141. static bool CASTInited = false;
  142. byte Key[16] = {
  143. 0x40, 0xF2, 0x41, 0xB2, 0x69, 0xF6, 0xF1, 0xAF,
  144. 0x63, 0xF4, 0x5E, 0xFF, 0x0E, 0x1C, 0x11, 0x9B
  145. };
  146. if(!CASTInited)
  147. {
  148. cast_setkey(&CASTKey, Key, 16);
  149. CASTInited = true;
  150. }
  151. byte inBlock[8] = {0, 0, 0, 0, 0, 0, 0, 0};
  152. byte outBlock[8] = {0, 0, 0, 0, 0, 0, 0, 0};
  153. *(dword*)(inBlock) = aKey;
  154. cast_decrypt(&CASTKey, inBlock, outBlock);
  155. return *(dword*)(outBlock);
  156. }
  157. // TURTLE
  158. static dword
  159. func9(dword aKey)
  160. {
  161. TURTLEWORD key[16] = { 0x40, 0xF2, 0x41, 0xB2, 0x69, 0xF6, 0xF2,
  162. 0xAF, 0x63, 0xF4, 0x5D, 0xFF, 0x0E, 0x1C, 0x11, 0x9B };
  163. TURTLEWORD block[8] = { 0 };
  164. TK turtle;
  165. turtle_key(key, 16, &turtle, 8);
  166. ((dword *) block)[0] = aKey;
  167. turtle_encrypt(block, &turtle);
  168. return ((dword *) block)[0];
  169. }
  170. // TURTLE
  171. static dword
  172. funcA(dword aKey)
  173. {
  174. TURTLEWORD key[16] = { 0x40, 0xF2, 0x41, 0xB2, 0x69, 0xF6, 0xF1,
  175. 0xA5, 0x63, 0xF4, 0x5D, 0xFF, 0x0E, 0x1C, 0x11, 0x9B };
  176. TURTLEWORD block[8] = { 0 };
  177. TK turtle;
  178. turtle_key(key, 16, &turtle, 8);
  179. ((dword *) block)[0] = aKey;
  180. turtle_decrypt(block, &turtle);
  181. return ((dword *) block)[0];
  182. }
  183. // FEAL-8
  184. static dword
  185. funcB(dword aKey)
  186. {
  187. unsigned char key[] = { 0x12, 0x43, 0x9F, 0x1F, 0xAB, 0xFF, 0x3A, 0x6F };
  188. unsigned char inBlock[8] = { 0 };
  189. unsigned char outBlock[8] = { 0 };
  190. F8_SetKey(key);
  191. ((dword *) inBlock)[0] = aKey;
  192. F8_Encrypt(inBlock, outBlock);
  193. return ((dword *) outBlock)[0];
  194. }
  195. // FEAL-8
  196. static dword
  197. funcC(dword aKey)
  198. {
  199. unsigned char key[] = { 0x22, 0x43, 0x9F, 0x1F, 0xAC, 0xFF, 0x3A, 0x6F };
  200. unsigned char inBlock[8] = { 0 };
  201. unsigned char outBlock[8] = { 0 };
  202. F8_SetKey(key);
  203. ((dword *) inBlock)[0] = aKey;
  204. F8_Decrypt(inBlock, outBlock);
  205. return ((dword *) outBlock)[0];
  206. }
  207. // Misty-1
  208. static dword
  209. funcD(dword aKey)
  210. {
  211. dword Key[4]={0x73DA73C3, 0x83FA7ECA, 0x83943092, 0xADEFCDEA};
  212. dword Cipher[2];
  213. dword Block[2]={0,0};
  214. static word ExpKey[32];
  215. static char KeyNE = 1;
  216. Block[0] = aKey;
  217. if (KeyNE) {
  218. MSTInit(ExpKey, Key);
  219. KeyNE = 0;
  220. }
  221. MSTEncryptD(ExpKey, Block, Cipher);
  222. return Cipher[0];
  223. }
  224. // Misty-1
  225. static dword
  226. funcE(dword aKey)
  227. {
  228. dword Key[4]={0x73DA73C3, 0x83FA7ECA, 0x84643092, 0xADEFCDEA};
  229. dword Cipher[2];
  230. dword Block[2]={0,0};
  231. static word ExpKey[32];
  232. static char KeyNE = 1;
  233. Block[0] = aKey;
  234. if(KeyNE)
  235. {
  236. MSTInit(ExpKey, Key);
  237. KeyNE = 0;
  238. }
  239. MSTEncryptE(ExpKey, Block, Cipher);
  240. return Cipher[0];
  241. }
  242. // SEAL
  243. static dword
  244. funcF(dword aKey)
  245. {
  246. byte key[20] = {
  247. 0x40, 0xF2, 0xFF, 0xB2, 0x69, 0xF6, 0xF1,
  248. 0xAF, 0x63, 0xF4, 0x5D, 0x41, 0x0E, 0x1C,
  249. 0x11, 0x9B, 0xF0, 0x45, 0xBE, 0xEA
  250. };
  251. dword buf[2] = {aKey, 0};
  252. seal_ctx sc;
  253. seal_key(&sc, key);
  254. seal_encrypt(&sc, buf, 2);
  255. return buf[0];
  256. }
  257. /*******************************************************/
  258. static dword (*funcs[])(dword) = {
  259. func0, func1, func2, func3, func4, func5, func6, func7,
  260. func8, func9, funcA, funcB, funcC, funcD, funcE, funcF
  261. };
  262. namespace OpenKore {
  263. namespace PaddedPackets {
  264. dword
  265. createHash(int map_sync, int sync, int account_id, short packet)
  266. {
  267. unsigned int slot = (packet * packet + map_sync + sync + account_id) & 0xF;
  268. #ifdef ROPP_DEBUG
  269. printf("Algorithm = %dn", slot);
  270. #endif
  271. return funcs[slot](packet * account_id + map_sync * sync);
  272. }
  273. dword
  274. createHash(int algorithm_id, dword key)
  275. {
  276. return funcs[algorithm_id](key);
  277. }
  278. } // PaddedPackets
  279. } // OpenKore