{"id":946,"date":"2019-09-28T09:41:52","date_gmt":"2019-09-28T01:41:52","guid":{"rendered":"https:\/\/flandre-scarlet.moe\/blog\/?p=946"},"modified":"2020-08-15T19:45:34","modified_gmt":"2020-08-15T11:45:34","slug":"crackme-%e5%8f%8d%e6%b1%87%e7%bc%96%e7%bb%83%e4%b9%a0%e4%b9%8b-092","status":"publish","type":"post","link":"https:\/\/flandre-scarlet.moe\/blog\/946\/","title":{"rendered":"CrackMe \u53cd\u6c47\u7f16\u7ec3\u4e60\u4e4b 092"},"content":{"rendered":"<p>\u4f5c\u4e3a\u7ec3\u624b\u7684 160 \u4e2a CrackMe \u7cfb\u5217\u6574\u7406\u5206\u6790<\/p>\n<p>CrackMe \u6765\u6e90\uff1a<a href=\"https:\/\/www.52pojie.cn\/thread-709699-1-1.html\" rel=\"noopener noreferrer\" target=\"_blank\">\u3010\u53cd\u6c47\u7f16\u7ec3\u4e60\u3011160\u4e2aCrackME\u7d22\u5f15\u76ee\u5f551~160\u5efa\u8bae\u6536\u85cf\u5907\u7528<\/a><\/p>\n<p>\u8fd9\u4e2a CrackMe \u4f7f\u7528\u7684\u662f Blowfish \u5bf9\u79f0\u52a0\u5bc6\u7b97\u6cd5\uff0c\u7b97\u6cd5\u672c\u8eab\u5e76\u4e0d\u590d\u6742\uff0c\u53ea\u8981\u5c06\u51e0\u4e2a\u5173\u952e\u51fd\u6570\u9006\u5411\u540e\u5c06\u7a0b\u5e8f\u7684\u6d41\u7a0b\u641e\u6e05\u5373\u53ef\u3002\u6709\u4e2a upx \u58f3\uff0c\u5f88\u597d\u8131\u5c31\u4e0d\u8bf4\u4e86\uff0c\u653e\u7740\u4e0d\u7ba1\u4e5f\u65e0\u6240\u8c13\u3002<br \/>\n<!--more--><\/p>\n<h3>00401550<\/h3>\n<p>\u8fd9\u662f\u6309\u94ae\u7684\u4e8b\u4ef6\u5904\u7406\u51fd\u6570\uff0c\u53ef\u901a\u8fc7\u5b57\u7b26\u4e32\u5feb\u9012\u5b9a\u4f4d\u3002<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n004015D1    8D4C24 5C       lea ecx,dword ptr ss:&#x5B;esp+0x5C]\r\n004015D5    8D5424 58       lea edx,dword ptr ss:&#x5B;esp+0x58]\r\n004015D9    51              push ecx\r\n004015DA    52              push edx\r\n004015DB    68 80894000     push crackme1.00408980\r\n004015E0    E8 EBFAFFFF     call crackme1.004010D0\r\n004015E5    8B4424 64       mov eax,dword ptr ss:&#x5B;esp+0x64]                ; \u53d6\u51fa A\r\n004015E9    8B0D F0994000   mov ecx,dword ptr ds:&#x5B;0x4099F0]                ; 86E52D2E\r\n004015EF    83C4 1C         add esp,0x1C\r\n004015F2    3BC1            cmp eax,ecx\r\n004015F4    75 29           jnz short crackme1.0040161F\r\n004015F6    8B4C24 4C       mov ecx,dword ptr ss:&#x5B;esp+0x4C]                ; \u53d6\u51fa B\r\n004015FA    A1 EC994000     mov eax,dword ptr ds:&#x5B;0x4099EC]                ; FEEBF75F\r\n004015FF    3BC8            cmp ecx,eax\r\n00401601    75 1C           jnz short crackme1.0040161F\r\n00401603    6A 30           push 0x30\r\n00401605    68 F0804000     push crackme1.004080F0                         ; Success\r\n0040160A    68 D4804000     push crackme1.004080D4                         ; You have done a good job.\r\n0040160F    56              push esi\r\n00401610    FF15 20614000   call dword ptr ds:&#x5B;&lt;&amp;user32.MessageBoxA&gt;]      ; user32.MessageBoxA\r\n00401616    33C0            xor eax,eax\r\n00401618    5E              pop esi\r\n00401619    83C4 40         add esp,0x40<\/pre>\n<p>\u91cc\u9762\u53d6\u51fa code \u5e76 wprintf \u6210\u4e24\u4e2a\u516b\u4f4d\u5341\u516d\u8fdb\u5236\u6570\uff0c\u4f20\u7ed9 004010D0 \u8fdb\u884c\u89e3\u5bc6\uff0c\u968f\u540e\u5c06\u7ed3\u679c\u4e0e\u4fdd\u5b58\u5728 0x4099F0 \u548c 0x4099EC \u5904\u7684\u503c\u8fdb\u884c\u6bd4\u8f83\uff0c\u4e24\u8005\u90fd\u76f8\u7b49\u5219\u6210\u529f\u3002<\/p>\n<h3>004010D0<\/h3>\n<p>Blowfish \u89e3\u5bc6\u51fd\u6570\u3002\u4f20\u5165\u4e86\u5bc6\u7801\u76d2\u548c A\u3001B \u4e24\u4e2a\u53cc\u5b57\u4f5c\u4e3a\u53c2\u6570\uff0c\u4ee3\u7801\u4e0d\u957f\u3002C \u4ee3\u7801\u5217\u5728\u6700\u540e\u3002<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n004010D0    8B4424 08       mov eax,dword ptr ss:&#x5B;esp+0x8]                 ; \u524d\u534a\u516b\u4e2a\u6570\u5b57\uff0c\u8bb0\u4e3aA\r\n004010D4    8B4C24 0C       mov ecx,dword ptr ss:&#x5B;esp+0xC]                 ; \u540e\u534a\u516b\u4e2a\u6570\u5b57\uff0c\u8bb0\u4e3aB\r\n004010D8    53              push ebx\r\n004010D9    55              push ebp\r\n004010DA    8B00            mov eax,dword ptr ds:&#x5B;eax]\r\n004010DC    56              push esi\r\n004010DD    8B31            mov esi,dword ptr ds:&#x5B;ecx]\r\n004010DF    57              push edi\r\n004010E0    8B7C24 14       mov edi,dword ptr ss:&#x5B;esp+0x14]                ; 0x408980 \u5bc6\u7801\u76d2\r\n004010E4    C74424 14 10000&gt;mov dword ptr ss:&#x5B;esp+0x14],0x10               ; \u5faa\u73af 16 \u6b21\r\n004010EC    8D5F 44         lea ebx,dword ptr ds:&#x5B;edi+0x44]                ; \u4ece\u7b2c 0x44 \u4e2a\u5b57\u8282\u5f00\u59cb\r\n004010EF  &gt; 3303            xor eax,dword ptr ds:&#x5B;ebx]                     ; \u4ece\u8868\u4e2d\u53d6\u51fa\u4e00\u4e2adword\u4e0eA\u5f02\u6216\r\n004010F1  | 50              push eax\r\n004010F2  | 57              push edi\r\n004010F3  | 8BE8            mov ebp,eax\r\n004010F5  | E8 06FFFFFF     call &lt;crackme1.crypt_sub&gt;\r\n004010FA  | 8B4C24 1C       mov ecx,dword ptr ss:&#x5B;esp+0x1C]                ; \u5373\u524d\u9762\u7684 esp+14\uff0c\u5faa\u73af\u6b21\u6570\r\n004010FE  | 83C4 08         add esp,0x8\r\n00401101  | 33C6            xor eax,esi                                    ; B \u4fdd\u5b58\u5728 esi\r\n00401103  | 83EB 04         sub ebx,0x4                                    ; ebx \u524d\u79fb\u4e00\u4e2adword\r\n00401106  | 49              dec ecx\r\n00401107  | 8BF5            mov esi,ebp                                    ; \u524d\u9762\u5f02\u6216\u4e86\u5bc6\u7801\u76d2\u7684 A \u4f5c\u4e3a\u65b0\u7684 B\r\n00401109  | 894C24 14       mov dword ptr ss:&#x5B;esp+0x14],ecx\r\n0040110D  ^ 75 E0           jnz short crackme1.004010EF\r\n0040110F    8B4F 04         mov ecx,dword ptr ds:&#x5B;edi+0x4]\r\n00401112    8B17            mov edx,dword ptr ds:&#x5B;edi]\r\n00401114    33C8            xor ecx,eax\r\n00401116    8B4424 18       mov eax,dword ptr ss:&#x5B;esp+0x18]                ; A \u7684\u5185\u5b58\u5730\u5740\r\n0040111A    33D6            xor edx,esi\r\n0040111C    5F              pop edi\r\n0040111D    8910            mov dword ptr ds:&#x5B;eax],edx\r\n0040111F    8B5424 18       mov edx,dword ptr ss:&#x5B;esp+0x18]                ; B \u7684\u5185\u5b58\u5730\u5740\r\n00401123    5E              pop esi\r\n00401124    5D              pop ebp\r\n00401125    890A            mov dword ptr ds:&#x5B;edx],ecx\r\n00401127    5B              pop ebx\r\n00401128    C3              retn<\/pre>\n<p>\u89e3\u5bc6\u51fd\u6570\u641e\u5b9a\u540e\u5e94\u8be5\u8981\u627e\u5230\u52a0\u5bc6\u7684\u51fd\u6570\uff0c\u5728 0x4099F0 \u548c 0x4099EC \u4e0b\u65ad\u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u4e24\u4e2a\u503c\u5e76\u4e0d\u662f\u5199\u6b7b\u800c\u662f\u7a0b\u5e8f\u542f\u52a8\u65f6\u751f\u6210\u7684\uff0c\u540c\u6837\u540e\u9762\u4e5f\u80fd\u53d1\u73b0\u5bc6\u7801\u76d2\u4e5f\u662f\u542f\u52a8\u65f6\u521d\u59cb\u5316\u7684\u3002<\/p>\n<h3>00401130<\/h3>\n<p>\u901a\u8fc7\u5728\u5bc6\u7801\u76d2\u5730\u5740 0x408980 \u4e0b\u65ad\u53ef\u4ee5\u8ddf\u8e2a\u5230\uff0c\u8fd9\u4e2a\u662f Blowfish \u7684\u5bc6\u94a5\u521d\u59cb\u5316\u51fd\u6570\u3002\u4f20\u5165\u4e86\u5bc6\u7801\u76d2\uff0c\u4e00\u4e2a\u5b57\u7b26\u4e32\u53ca\u5176\u957f\u5ea6\u4f5c\u4e3a\u53c2\u6570\u3002Blowfish \u7684\u5bc6\u94a5\u8868\u542b\u6709 P-Box \u548c S-Box \u4e24\u90e8\u5206\u3002\u7ed3\u6784\u5982\u4e0b\uff1a<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">struct Context {\r\n  unsigned long P&#x5B;18];\r\n  unsigned long S&#x5B;4]&#x5B;256];\r\n}; <\/pre>\n<p>\u4ee3\u7801\u5927\u81f4\u903b\u8f91\u5982\u4e0b\uff1a<\/p>\n<ol>\n<li>\u590d\u5236\u539f\u59cb S-Box<\/li>\n<li>\u53d6\u539f\u59cb P-Box\uff0c\u5c06\u5176\u4e0e\u4f20\u5165\u7684\u5bc6\u94a5\u5b57\u7b26\u4e32\u8fd0\u7b97\u540e\u518d\u590d\u5236<\/li>\n<li>\u4ee5 0 \u4e3a\u521d\u503c\uff0c\u4f7f\u7528\u5f53\u524d\u7684\u5bc6\u7801\u76d2\u5faa\u73af\u52a0\u5bc6 P-Box\uff0c\u6bcf\u6b21\u7684\u7ed3\u679c\u90fd\u4f1a\u8d4b\u503c\u7ed9 P-Box \u76f8\u5e94\u4f4d\u7f6e\u8986\u76d6\u539f\u6765\u7684\u503c<\/li>\n<li>\u7ee7\u627f\u4e0a\u4e00\u6b65\u7684\u6700\u540e\u4e24\u4e2a\u52a0\u5bc6\u7ed3\u679c\uff0c\u7528\u76f8\u540c\u65b9\u6cd5\u5faa\u73af\u52a0\u5bc6 S-Box<\/li>\n<\/ol>\n<h3>00401070<\/h3>\n<p>\u5728\u4e0a\u9762\u7684\u521d\u59cb\u5316\u51fd\u6570 00401130 \u4e2d\u4f1a\u8c03\u7528\u5230 00401070\uff0c\u5373 Blowfish \u7684\u52a0\u5bc6\u51fd\u6570\uff0c\u4ee3\u7801\u4e0e\u89e3\u5bc6\u51fd\u6570 001040D0 \u76f8\u4f3c\uff0c\u8fd9\u91cc\u5c31\u4e0d\u8d34\u4e86\uff0c\u540e\u9762\u6709 C \u7248\u672c\u3002<\/p>\n<h3>00401230<\/h3>\n<p>\u8fd9\u91cc\u5305\u542b\u4e86\u7a0b\u5e8f\u7684\u521d\u59cb\u5316\u6d41\u7a0b\uff0c\u4e3b\u8981\u6709\u4ee5\u4e0b\u6b65\u9aa4\uff1a<\/p>\n<ol>\n<li>\u4ece\u6ce8\u518c\u8868 Software\\Microsoft\\Windows\\CurrentVersion \u4e0b\u7684 ProductId \u53d6\u51fa\u4ea7\u54c1 ID\uff0c\u6ca1\u6709\u5219\u7528 &#8220;94940361391&#8221; \u4ee3\u66ff<\/li>\n<li>\u7528\u4ea7\u54c1 ID \u521d\u59cb\u5316 Blowfish \u5bc6\u7801\u76d2<\/li>\n<li>\u4f20\u5165 0x68736966, 0x776f6c62 \u8fdb\u884c\u52a0\u5bc6\uff0c\u5176\u7ed3\u679c\u4fdd\u5b58\u5230 0x4099F0 \u548c 0x4099EC\uff0cwprintf \u540e\u5c31\u662f\u754c\u9762\u4e0a\u7684 Computer ID<\/li>\n<li>\u7528\u56fa\u5b9a\u5b57\u7b26\u4e32 &#8220;ChinaCrackingGroup&#8221; \u7ee7\u7eed\u521d\u59cb\u5316 Blowfish \u5bc6\u7801\u76d2<\/li>\n<li>\uff08\u5728\u5bf9\u8bdd\u6846\u521d\u59cb\u5316\u65f6\uff09\u4ece 0x4099F0 \u548c 0x4099EC \u4e2d\u53d6\u51fa\u6570\u636e\u8fdb\u884c\u52a0\u5bc6\uff0c\u5f97\u5230\u7684\u7ed3\u679c\u5199\u56de\uff0c\u8fd9\u5c31\u662f\u6700\u5f00\u59cb\u4e0e\u6ce8\u518c\u7801\u8fdb\u884c\u6bd4\u8f83\u7684\u503c<\/li>\n<li>\uff08\u5728\u5bf9\u8bdd\u6846\u521d\u59cb\u5316\u65f6\uff09\u7528\u56fa\u5b9a\u5b57\u7b26\u4e32 &#8220;CrackingForFun&#8221; \u7ee7\u7eed\u521d\u59cb\u5316 Blowfish \u5bc6\u7801\u76d2<\/li>\n<\/ol>\n<p>\u56e0\u4e3a\u7a0b\u5e8f\u4f1a\u5c06\u6211\u4eec\u586b\u5165\u7684\u6ce8\u518c\u7801\u8fdb\u884c\u89e3\u5bc6\u540e\u4e0e\u5176\u6bd4\u8f83\uff0c\u90a3\u4e48\u5728\u5199\u6ce8\u518c\u673a\u65f6\u53ea\u8981\u5c06\u4e0a\u9762\u7b2c 5 \u6b65\u4e2d\u6700\u540e\u7684\u503c\u518d\u505a\u4e00\u6b21\u52a0\u5bc6\u5c31\u597d\u4e86\u3002<\/p>\n<h3>\u6ce8\u518c\u673a\u4ee3\u7801<\/h3>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">namespace Blowfish\r\n{\r\n\r\nstruct Context {\r\n  static const int P_SIZE = 18;\r\n  unsigned long P&#x5B;P_SIZE];\r\n  unsigned long S&#x5B;4]&#x5B;256];\r\n};\r\n\r\nconst unsigned long ORIG_P&#x5B;16 + 2] = {\r\n        0x243F6A88L, 0x85A308D3L, 0x13198A2EL, 0x03707344L,\r\n        0xA4093822L, 0x299F31D0L, 0x082EFA98L, 0xEC4E6C89L,\r\n        0x452821E6L, 0x38D01377L, 0xBE5466CFL, 0x34E90C6CL,\r\n        0xC0AC29B7L, 0xC97C50DDL, 0x3F84D5B5L, 0xB5470917L,\r\n        0x9216D5D9L, 0x8979FB1BL\r\n};\r\n\r\nconst unsigned long ORIG_S&#x5B;4]&#x5B;256] = {\r\n    {   0xD1310BA6L, 0x98DFB5ACL, 0x2FFD72DBL, 0xD01ADFB7L,\r\n        0xB8E1AFEDL, 0x6A267E96L, 0xBA7C9045L, 0xF12C7F99L,\r\n        0x24A19947L, 0xB3916CF7L, 0x0801F2E2L, 0x858EFC16L,\r\n        0x636920D8L, 0x71574E69L, 0xA458FEA3L, 0xF4933D7EL,\r\n        0x0D95748FL, 0x728EB658L, 0x718BCD58L, 0x82154AEEL,\r\n        0x7B54A41DL, 0xC25A59B5L, 0x9C30D539L, 0x2AF26013L,\r\n        0xC5D1B023L, 0x286085F0L, 0xCA417918L, 0xB8DB38EFL,\r\n        0x8E79DCB0L, 0x603A180EL, 0x6C9E0E8BL, 0xB01E8A3EL,\r\n        0xD71577C1L, 0xBD314B27L, 0x78AF2FDAL, 0x55605C60L,\r\n        0xE65525F3L, 0xAA55AB94L, 0x57489862L, 0x63E81440L,\r\n        0x55CA396AL, 0x2AAB10B6L, 0xB4CC5C34L, 0x1141E8CEL,\r\n        0xA15486AFL, 0x7C72E993L, 0xB3EE1411L, 0x636FBC2AL,\r\n        0x2BA9C55DL, 0x741831F6L, 0xCE5C3E16L, 0x9B87931EL,\r\n        0xAFD6BA33L, 0x6C24CF5CL, 0x7A325381L, 0x28958677L,\r\n        0x3B8F4898L, 0x6B4BB9AFL, 0xC4BFE81BL, 0x66282193L,\r\n        0x61D809CCL, 0xFB21A991L, 0x487CAC60L, 0x5DEC8032L,\r\n        0xEF845D5DL, 0xE98575B1L, 0xDC262302L, 0xEB651B88L,\r\n        0x23893E81L, 0xD396ACC5L, 0x0F6D6FF3L, 0x83F44239L,\r\n        0x2E0B4482L, 0xA4842004L, 0x69C8F04AL, 0x9E1F9B5EL,\r\n        0x21C66842L, 0xF6E96C9AL, 0x670C9C61L, 0xABD388F0L,\r\n        0x6A51A0D2L, 0xD8542F68L, 0x960FA728L, 0xAB5133A3L,\r\n        0x6EEF0B6CL, 0x137A3BE4L, 0xBA3BF050L, 0x7EFB2A98L,\r\n        0xA1F1651DL, 0x39AF0176L, 0x66CA593EL, 0x82430E88L,\r\n        0x8CEE8619L, 0x456F9FB4L, 0x7D84A5C3L, 0x3B8B5EBEL,\r\n        0xE06F75D8L, 0x85C12073L, 0x401A449FL, 0x56C16AA6L,\r\n        0x4ED3AA62L, 0x363F7706L, 0x1BFEDF72L, 0x429B023DL,\r\n        0x37D0D724L, 0xD00A1248L, 0xDB0FEAD3L, 0x49F1C09BL,\r\n        0x075372C9L, 0x80991B7BL, 0x25D479D8L, 0xF6E8DEF7L,\r\n        0xE3FE501AL, 0xB6794C3BL, 0x976CE0BDL, 0x04C006BAL,\r\n        0xC1A94FB6L, 0x409F60C4L, 0x5E5C9EC2L, 0x196A2463L,\r\n        0x68FB6FAFL, 0x3E6C53B5L, 0x1339B2EBL, 0x3B52EC6FL,\r\n        0x6DFC511FL, 0x9B30952CL, 0xCC814544L, 0xAF5EBD09L,\r\n        0xBEE3D004L, 0xDE334AFDL, 0x660F2807L, 0x192E4BB3L,\r\n        0xC0CBA857L, 0x45C8740FL, 0xD20B5F39L, 0xB9D3FBDBL,\r\n        0x5579C0BDL, 0x1A60320AL, 0xD6A100C6L, 0x402C7279L,\r\n        0x679F25FEL, 0xFB1FA3CCL, 0x8EA5E9F8L, 0xDB3222F8L,\r\n        0x3C7516DFL, 0xFD616B15L, 0x2F501EC8L, 0xAD0552ABL,\r\n        0x323DB5FAL, 0xFD238760L, 0x53317B48L, 0x3E00DF82L,\r\n        0x9E5C57BBL, 0xCA6F8CA0L, 0x1A87562EL, 0xDF1769DBL,\r\n        0xD542A8F6L, 0x287EFFC3L, 0xAC6732C6L, 0x8C4F5573L,\r\n        0x695B27B0L, 0xBBCA58C8L, 0xE1FFA35DL, 0xB8F011A0L,\r\n        0x10FA3D98L, 0xFD2183B8L, 0x4AFCB56CL, 0x2DD1D35BL,\r\n        0x9A53E479L, 0xB6F84565L, 0xD28E49BCL, 0x4BFB9790L,\r\n        0xE1DDF2DAL, 0xA4CB7E33L, 0x62FB1341L, 0xCEE4C6E8L,\r\n        0xEF20CADAL, 0x36774C01L, 0xD07E9EFEL, 0x2BF11FB4L,\r\n        0x95DBDA4DL, 0xAE909198L, 0xEAAD8E71L, 0x6B93D5A0L,\r\n        0xD08ED1D0L, 0xAFC725E0L, 0x8E3C5B2FL, 0x8E7594B7L,\r\n        0x8FF6E2FBL, 0xF2122B64L, 0x8888B812L, 0x900DF01CL,\r\n        0x4FAD5EA0L, 0x688FC31CL, 0xD1CFF191L, 0xB3A8C1ADL,\r\n        0x2F2F2218L, 0xBE0E1777L, 0xEA752DFEL, 0x8B021FA1L,\r\n        0xE5A0CC0FL, 0xB56F74E8L, 0x18ACF3D6L, 0xCE89E299L,\r\n        0xB4A84FE0L, 0xFD13E0B7L, 0x7CC43B81L, 0xD2ADA8D9L,\r\n        0x165FA266L, 0x80957705L, 0x93CC7314L, 0x211A1477L,\r\n        0xE6AD2065L, 0x77B5FA86L, 0xC75442F5L, 0xFB9D35CFL,\r\n        0xEBCDAF0CL, 0x7B3E89A0L, 0xD6411BD3L, 0xAE1E7E49L,\r\n        0x00250E2DL, 0x2071B35EL, 0x226800BBL, 0x57B8E0AFL,\r\n        0x2464369BL, 0xF009B91EL, 0x5563911DL, 0x59DFA6AAL,\r\n        0x78C14389L, 0xD95A537FL, 0x207D5BA2L, 0x02E5B9C5L,\r\n        0x83260376L, 0x6295CFA9L, 0x11C81968L, 0x4E734A41L,\r\n        0xB3472DCAL, 0x7B14A94AL, 0x1B510052L, 0x9A532915L,\r\n        0xD60F573FL, 0xBC9BC6E4L, 0x2B60A476L, 0x81E67400L,\r\n        0x08BA6FB5L, 0x571BE91FL, 0xF296EC6BL, 0x2A0DD915L,\r\n        0xB6636521L, 0xE7B9F9B6L, 0xFF34052EL, 0xC5855664L,\r\n        0x53B02D5DL, 0xA99F8FA1L, 0x08BA4799L, 0x6E85076AL   },\r\n    {   0x4B7A70E9L, 0xB5B32944L, 0xDB75092EL, 0xC4192623L,\r\n        0xAD6EA6B0L, 0x49A7DF7DL, 0x9CEE60B8L, 0x8FEDB266L,\r\n        0xECAA8C71L, 0x699A17FFL, 0x5664526CL, 0xC2B19EE1L,\r\n        0x193602A5L, 0x75094C29L, 0xA0591340L, 0xE4183A3EL,\r\n        0x3F54989AL, 0x5B429D65L, 0x6B8FE4D6L, 0x99F73FD6L,\r\n        0xA1D29C07L, 0xEFE830F5L, 0x4D2D38E6L, 0xF0255DC1L,\r\n        0x4CDD2086L, 0x8470EB26L, 0x6382E9C6L, 0x021ECC5EL,\r\n        0x09686B3FL, 0x3EBAEFC9L, 0x3C971814L, 0x6B6A70A1L,\r\n        0x687F3584L, 0x52A0E286L, 0xB79C5305L, 0xAA500737L,\r\n        0x3E07841CL, 0x7FDEAE5CL, 0x8E7D44ECL, 0x5716F2B8L,\r\n        0xB03ADA37L, 0xF0500C0DL, 0xF01C1F04L, 0x0200B3FFL,\r\n        0xAE0CF51AL, 0x3CB574B2L, 0x25837A58L, 0xDC0921BDL,\r\n        0xD19113F9L, 0x7CA92FF6L, 0x94324773L, 0x22F54701L,\r\n        0x3AE5E581L, 0x37C2DADCL, 0xC8B57634L, 0x9AF3DDA7L,\r\n        0xA9446146L, 0x0FD0030EL, 0xECC8C73EL, 0xA4751E41L,\r\n        0xE238CD99L, 0x3BEA0E2FL, 0x3280BBA1L, 0x183EB331L,\r\n        0x4E548B38L, 0x4F6DB908L, 0x6F420D03L, 0xF60A04BFL,\r\n        0x2CB81290L, 0x24977C79L, 0x5679B072L, 0xBCAF89AFL,\r\n        0xDE9A771FL, 0xD9930810L, 0xB38BAE12L, 0xDCCF3F2EL,\r\n        0x5512721FL, 0x2E6B7124L, 0x501ADDE6L, 0x9F84CD87L,\r\n        0x7A584718L, 0x7408DA17L, 0xBC9F9ABCL, 0xE94B7D8CL,\r\n        0xEC7AEC3AL, 0xDB851DFAL, 0x63094366L, 0xC464C3D2L,\r\n        0xEF1C1847L, 0x3215D908L, 0xDD433B37L, 0x24C2BA16L,\r\n        0x12A14D43L, 0x2A65C451L, 0x50940002L, 0x133AE4DDL,\r\n        0x71DFF89EL, 0x10314E55L, 0x81AC77D6L, 0x5F11199BL,\r\n        0x043556F1L, 0xD7A3C76BL, 0x3C11183BL, 0x5924A509L,\r\n        0xF28FE6EDL, 0x97F1FBFAL, 0x9EBABF2CL, 0x1E153C6EL,\r\n        0x86E34570L, 0xEAE96FB1L, 0x860E5E0AL, 0x5A3E2AB3L,\r\n        0x771FE71CL, 0x4E3D06FAL, 0x2965DCB9L, 0x99E71D0FL,\r\n        0x803E89D6L, 0x5266C825L, 0x2E4CC978L, 0x9C10B36AL,\r\n        0xC6150EBAL, 0x94E2EA78L, 0xA5FC3C53L, 0x1E0A2DF4L,\r\n        0xF2F74EA7L, 0x361D2B3DL, 0x1939260FL, 0x19C27960L,\r\n        0x5223A708L, 0xF71312B6L, 0xEBADFE6EL, 0xEAC31F66L,\r\n        0xE3BC4595L, 0xA67BC883L, 0xB17F37D1L, 0x018CFF28L,\r\n        0xC332DDEFL, 0xBE6C5AA5L, 0x65582185L, 0x68AB9802L,\r\n        0xEECEA50FL, 0xDB2F953BL, 0x2AEF7DADL, 0x5B6E2F84L,\r\n        0x1521B628L, 0x29076170L, 0xECDD4775L, 0x619F1510L,\r\n        0x13CCA830L, 0xEB61BD96L, 0x0334FE1EL, 0xAA0363CFL,\r\n        0xB5735C90L, 0x4C70A239L, 0xD59E9E0BL, 0xCBAADE14L,\r\n        0xEECC86BCL, 0x60622CA7L, 0x9CAB5CABL, 0xB2F3846EL,\r\n        0x648B1EAFL, 0x19BDF0CAL, 0xA02369B9L, 0x655ABB50L,\r\n        0x40685A32L, 0x3C2AB4B3L, 0x319EE9D5L, 0xC021B8F7L,\r\n        0x9B540B19L, 0x875FA099L, 0x95F7997EL, 0x623D7DA8L,\r\n        0xF837889AL, 0x97E32D77L, 0x11ED935FL, 0x16681281L,\r\n        0x0E358829L, 0xC7E61FD6L, 0x96DEDFA1L, 0x7858BA99L,\r\n        0x57F584A5L, 0x1B227263L, 0x9B83C3FFL, 0x1AC24696L,\r\n        0xCDB30AEBL, 0x532E3054L, 0x8FD948E4L, 0x6DBC3128L,\r\n        0x58EBF2EFL, 0x34C6FFEAL, 0xFE28ED61L, 0xEE7C3C73L,\r\n        0x5D4A14D9L, 0xE864B7E3L, 0x42105D14L, 0x203E13E0L,\r\n        0x45EEE2B6L, 0xA3AAABEAL, 0xDB6C4F15L, 0xFACB4FD0L,\r\n        0xC742F442L, 0xEF6ABBB5L, 0x654F3B1DL, 0x41CD2105L,\r\n        0xD81E799EL, 0x86854DC7L, 0xE44B476AL, 0x3D816250L,\r\n        0xCF62A1F2L, 0x5B8D2646L, 0xFC8883A0L, 0xC1C7B6A3L,\r\n        0x7F1524C3L, 0x69CB7492L, 0x47848A0BL, 0x5692B285L,\r\n        0x095BBF00L, 0xAD19489DL, 0x1462B174L, 0x23820E00L,\r\n        0x58428D2AL, 0x0C55F5EAL, 0x1DADF43EL, 0x233F7061L,\r\n        0x3372F092L, 0x8D937E41L, 0xD65FECF1L, 0x6C223BDBL,\r\n        0x7CDE3759L, 0xCBEE7460L, 0x4085F2A7L, 0xCE77326EL,\r\n        0xA6078084L, 0x19F8509EL, 0xE8EFD855L, 0x61D99735L,\r\n        0xA969A7AAL, 0xC50C06C2L, 0x5A04ABFCL, 0x800BCADCL,\r\n        0x9E447A2EL, 0xC3453484L, 0xFDD56705L, 0x0E1E9EC9L,\r\n        0xDB73DBD3L, 0x105588CDL, 0x675FDA79L, 0xE3674340L,\r\n        0xC5C43465L, 0x713E38D8L, 0x3D28F89EL, 0xF16DFF20L,\r\n        0x153E21E7L, 0x8FB03D4AL, 0xE6E39F2BL, 0xDB83ADF7L   },\r\n    {   0xE93D5A68L, 0x948140F7L, 0xF64C261CL, 0x94692934L,\r\n        0x411520F7L, 0x7602D4F7L, 0xBCF46B2EL, 0xD4A20068L,\r\n        0xD4082471L, 0x3320F46AL, 0x43B7D4B7L, 0x500061AFL,\r\n        0x1E39F62EL, 0x97244546L, 0x14214F74L, 0xBF8B8840L,\r\n        0x4D95FC1DL, 0x96B591AFL, 0x70F4DDD3L, 0x66A02F45L,\r\n        0xBFBC09ECL, 0x03BD9785L, 0x7FAC6DD0L, 0x31CB8504L,\r\n        0x96EB27B3L, 0x55FD3941L, 0xDA2547E6L, 0xABCA0A9AL,\r\n        0x28507825L, 0x530429F4L, 0x0A2C86DAL, 0xE9B66DFBL,\r\n        0x68DC1462L, 0xD7486900L, 0x680EC0A4L, 0x27A18DEEL,\r\n        0x4F3FFEA2L, 0xE887AD8CL, 0xB58CE006L, 0x7AF4D6B6L,\r\n        0xAACE1E7CL, 0xD3375FECL, 0xCE78A399L, 0x406B2A42L,\r\n        0x20FE9E35L, 0xD9F385B9L, 0xEE39D7ABL, 0x3B124E8BL,\r\n        0x1DC9FAF7L, 0x4B6D1856L, 0x26A36631L, 0xEAE397B2L,\r\n        0x3A6EFA74L, 0xDD5B4332L, 0x6841E7F7L, 0xCA7820FBL,\r\n        0xFB0AF54EL, 0xD8FEB397L, 0x454056ACL, 0xBA489527L,\r\n        0x55533A3AL, 0x20838D87L, 0xFE6BA9B7L, 0xD096954BL,\r\n        0x55A867BCL, 0xA1159A58L, 0xCCA92963L, 0x99E1DB33L,\r\n        0xA62A4A56L, 0x3F3125F9L, 0x5EF47E1CL, 0x9029317CL,\r\n        0xFDF8E802L, 0x04272F70L, 0x80BB155CL, 0x05282CE3L,\r\n        0x95C11548L, 0xE4C66D22L, 0x48C1133FL, 0xC70F86DCL,\r\n        0x07F9C9EEL, 0x41041F0FL, 0x404779A4L, 0x5D886E17L,\r\n        0x325F51EBL, 0xD59BC0D1L, 0xF2BCC18FL, 0x41113564L,\r\n        0x257B7834L, 0x602A9C60L, 0xDFF8E8A3L, 0x1F636C1BL,\r\n        0x0E12B4C2L, 0x02E1329EL, 0xAF664FD1L, 0xCAD18115L,\r\n        0x6B2395E0L, 0x333E92E1L, 0x3B240B62L, 0xEEBEB922L,\r\n        0x85B2A20EL, 0xE6BA0D99L, 0xDE720C8CL, 0x2DA2F728L,\r\n        0xD0127845L, 0x95B794FDL, 0x647D0862L, 0xE7CCF5F0L,\r\n        0x5449A36FL, 0x877D48FAL, 0xC39DFD27L, 0xF33E8D1EL,\r\n        0x0A476341L, 0x992EFF74L, 0x3A6F6EABL, 0xF4F8FD37L,\r\n        0xA812DC60L, 0xA1EBDDF8L, 0x991BE14CL, 0xDB6E6B0DL,\r\n        0xC67B5510L, 0x6D672C37L, 0x2765D43BL, 0xDCD0E804L,\r\n        0xF1290DC7L, 0xCC00FFA3L, 0xB5390F92L, 0x690FED0BL,\r\n        0x667B9FFBL, 0xCEDB7D9CL, 0xA091CF0BL, 0xD9155EA3L,\r\n        0xBB132F88L, 0x515BAD24L, 0x7B9479BFL, 0x763BD6EBL,\r\n        0x37392EB3L, 0xCC115979L, 0x8026E297L, 0xF42E312DL,\r\n        0x6842ADA7L, 0xC66A2B3BL, 0x12754CCCL, 0x782EF11CL,\r\n        0x6A124237L, 0xB79251E7L, 0x06A1BBE6L, 0x4BFB6350L,\r\n        0x1A6B1018L, 0x11CAEDFAL, 0x3D25BDD8L, 0xE2E1C3C9L,\r\n        0x44421659L, 0x0A121386L, 0xD90CEC6EL, 0xD5ABEA2AL,\r\n        0x64AF674EL, 0xDA86A85FL, 0xBEBFE988L, 0x64E4C3FEL,\r\n        0x9DBC8057L, 0xF0F7C086L, 0x60787BF8L, 0x6003604DL,\r\n        0xD1FD8346L, 0xF6381FB0L, 0x7745AE04L, 0xD736FCCCL,\r\n        0x83426B33L, 0xF01EAB71L, 0xB0804187L, 0x3C005E5FL,\r\n        0x77A057BEL, 0xBDE8AE24L, 0x55464299L, 0xBF582E61L,\r\n        0x4E58F48FL, 0xF2DDFDA2L, 0xF474EF38L, 0x8789BDC2L,\r\n        0x5366F9C3L, 0xC8B38E74L, 0xB475F255L, 0x46FCD9B9L,\r\n        0x7AEB2661L, 0x8B1DDF84L, 0x846A0E79L, 0x915F95E2L,\r\n        0x466E598EL, 0x20B45770L, 0x8CD55591L, 0xC902DE4CL,\r\n        0xB90BACE1L, 0xBB8205D0L, 0x11A86248L, 0x7574A99EL,\r\n        0xB77F19B6L, 0xE0A9DC09L, 0x662D09A1L, 0xC4324633L,\r\n        0xE85A1F02L, 0x09F0BE8CL, 0x4A99A025L, 0x1D6EFE10L,\r\n        0x1AB93D1DL, 0x0BA5A4DFL, 0xA186F20FL, 0x2868F169L,\r\n        0xDCB7DA83L, 0x573906FEL, 0xA1E2CE9BL, 0x4FCD7F52L,\r\n        0x50115E01L, 0xA70683FAL, 0xA002B5C4L, 0x0DE6D027L,\r\n        0x9AF88C27L, 0x773F8641L, 0xC3604C06L, 0x61A806B5L,\r\n        0xF0177A28L, 0xC0F586E0L, 0x006058AAL, 0x30DC7D62L,\r\n        0x11E69ED7L, 0x2338EA63L, 0x53C2DD94L, 0xC2C21634L,\r\n        0xBBCBEE56L, 0x90BCB6DEL, 0xEBFC7DA1L, 0xCE591D76L,\r\n        0x6F05E409L, 0x4B7C0188L, 0x39720A3DL, 0x7C927C24L,\r\n        0x86E3725FL, 0x724D9DB9L, 0x1AC15BB4L, 0xD39EB8FCL,\r\n        0xED545578L, 0x08FCA5B5L, 0xD83D7CD3L, 0x4DAD0FC4L,\r\n        0x1E50EF5EL, 0xB161E6F8L, 0xA28514D9L, 0x6C51133CL,\r\n        0x6FD5C7E7L, 0x56E14EC4L, 0x362ABFCEL, 0xDDC6C837L,\r\n        0xD79A3234L, 0x92638212L, 0x670EFA8EL, 0x406000E0L  },\r\n    {   0x3A39CE37L, 0xD3FAF5CFL, 0xABC27737L, 0x5AC52D1BL,\r\n        0x5CB0679EL, 0x4FA33742L, 0xD3822740L, 0x99BC9BBEL,\r\n        0xD5118E9DL, 0xBF0F7315L, 0xD62D1C7EL, 0xC700C47BL,\r\n        0xB78C1B6BL, 0x21A19045L, 0xB26EB1BEL, 0x6A366EB4L,\r\n        0x5748AB2FL, 0xBC946E79L, 0xC6A376D2L, 0x6549C2C8L,\r\n        0x530FF8EEL, 0x468DDE7DL, 0xD5730A1DL, 0x4CD04DC6L,\r\n        0x2939BBDBL, 0xA9BA4650L, 0xAC9526E8L, 0xBE5EE304L,\r\n        0xA1FAD5F0L, 0x6A2D519AL, 0x63EF8CE2L, 0x9A86EE22L,\r\n        0xC089C2B8L, 0x43242EF6L, 0xA51E03AAL, 0x9CF2D0A4L,\r\n        0x83C061BAL, 0x9BE96A4DL, 0x8FE51550L, 0xBA645BD6L,\r\n        0x2826A2F9L, 0xA73A3AE1L, 0x4BA99586L, 0xEF5562E9L,\r\n        0xC72FEFD3L, 0xF752F7DAL, 0x3F046F69L, 0x77FA0A59L,\r\n        0x80E4A915L, 0x87B08601L, 0x9B09E6ADL, 0x3B3EE593L,\r\n        0xE990FD5AL, 0x9E34D797L, 0x2CF0B7D9L, 0x022B8B51L,\r\n        0x96D5AC3AL, 0x017DA67DL, 0xD1CF3ED6L, 0x7C7D2D28L,\r\n        0x1F9F25CFL, 0xADF2B89BL, 0x5AD6B472L, 0x5A88F54CL,\r\n        0xE029AC71L, 0xE019A5E6L, 0x47B0ACFDL, 0xED93FA9BL,\r\n        0xE8D3C48DL, 0x283B57CCL, 0xF8D56629L, 0x79132E28L,\r\n        0x785F0191L, 0xED756055L, 0xF7960E44L, 0xE3D35E8CL,\r\n        0x15056DD4L, 0x88F46DBAL, 0x03A16125L, 0x0564F0BDL,\r\n        0xC3EB9E15L, 0x3C9057A2L, 0x97271AECL, 0xA93A072AL,\r\n        0x1B3F6D9BL, 0x1E6321F5L, 0xF59C66FBL, 0x26DCF319L,\r\n        0x7533D928L, 0xB155FDF5L, 0x03563482L, 0x8ABA3CBBL,\r\n        0x28517711L, 0xC20AD9F8L, 0xABCC5167L, 0xCCAD925FL,\r\n        0x4DE81751L, 0x3830DC8EL, 0x379D5862L, 0x9320F991L,\r\n        0xEA7A90C2L, 0xFB3E7BCEL, 0x5121CE64L, 0x774FBE32L,\r\n        0xA8B6E37EL, 0xC3293D46L, 0x48DE5369L, 0x6413E680L,\r\n        0xA2AE0810L, 0xDD6DB224L, 0x69852DFDL, 0x09072166L,\r\n        0xB39A460AL, 0x6445C0DDL, 0x586CDECFL, 0x1C20C8AEL,\r\n        0x5BBEF7DDL, 0x1B588D40L, 0xCCD2017FL, 0x6BB4E3BBL,\r\n        0xDDA26A7EL, 0x3A59FF45L, 0x3E350A44L, 0xBCB4CDD5L,\r\n        0x72EACEA8L, 0xFA6484BBL, 0x8D6612AEL, 0xBF3C6F47L,\r\n        0xD29BE463L, 0x542F5D9EL, 0xAEC2771BL, 0xF64E6370L,\r\n        0x740E0D8DL, 0xE75B1357L, 0xF8721671L, 0xAF537D5DL,\r\n        0x4040CB08L, 0x4EB4E2CCL, 0x34D2466AL, 0x0115AF84L,\r\n        0xE1B00428L, 0x95983A1DL, 0x06B89FB4L, 0xCE6EA048L,\r\n        0x6F3F3B82L, 0x3520AB82L, 0x011A1D4BL, 0x277227F8L,\r\n        0x611560B1L, 0xE7933FDCL, 0xBB3A792BL, 0x344525BDL,\r\n        0xA08839E1L, 0x51CE794BL, 0x2F32C9B7L, 0xA01FBAC9L,\r\n        0xE01CC87EL, 0xBCC7D1F6L, 0xCF0111C3L, 0xA1E8AAC7L,\r\n        0x1A908749L, 0xD44FBD9AL, 0xD0DADECBL, 0xD50ADA38L,\r\n        0x0339C32AL, 0xC6913667L, 0x8DF9317CL, 0xE0B12B4FL,\r\n        0xF79E59B7L, 0x43F5BB3AL, 0xF2D519FFL, 0x27D9459CL,\r\n        0xBF97222CL, 0x15E6FC2AL, 0x0F91FC71L, 0x9B941525L,\r\n        0xFAE59361L, 0xCEB69CEBL, 0xC2A86459L, 0x12BAA8D1L,\r\n        0xB6C1075EL, 0xE3056A0CL, 0x10D25065L, 0xCB03A442L,\r\n        0xE0EC6E0EL, 0x1698DB3BL, 0x4C98A0BEL, 0x3278E964L,\r\n        0x9F1F9532L, 0xE0D392DFL, 0xD3A0342BL, 0x8971F21EL,\r\n        0x1B0A7441L, 0x4BA3348CL, 0xC5BE7120L, 0xC37632D8L,\r\n        0xDF359F8DL, 0x9B992F2EL, 0xE60B6F47L, 0x0FE3F11DL,\r\n        0xE54CDA54L, 0x1EDAD891L, 0xCE6279CFL, 0xCD3E7E6FL,\r\n        0x1618B166L, 0xFD2C1D05L, 0x848FD2C5L, 0xF6FB2299L,\r\n        0xF523F357L, 0xA6327623L, 0x93A83531L, 0x56CCCD02L,\r\n        0xACF08162L, 0x5A75EBB5L, 0x6E163697L, 0x88D273CCL,\r\n        0xDE966292L, 0x81B949D0L, 0x4C50901BL, 0x71C65614L,\r\n        0xE6C6C7BDL, 0x327A140AL, 0x45E1D006L, 0xC3F27B9AL,\r\n        0xC9AA53FDL, 0x62A80F00L, 0xBB25BFE2L, 0x35BDD2F6L,\r\n        0x71126905L, 0xB2040222L, 0xB6CBCF7CL, 0xCD769C2BL,\r\n        0x53113EC0L, 0x1640E3D3L, 0x38ABBD60L, 0x2547ADF0L,\r\n        0xBA38209CL, 0xF746CE76L, 0x77AFA1C5L, 0x20756060L,\r\n        0x85CBFE4EL, 0x8AE88DD8L, 0x7AAAF9B0L, 0x4CF9AA7EL,\r\n        0x1948C25CL, 0x02FB8A8CL, 0x01C36AE4L, 0xD6EBE1F9L,\r\n        0x90D4F869L, 0xA65CDEA0L, 0x3F09252DL, 0xC208E69FL,\r\n        0xB74E6132L, 0xCE77E25BL, 0x578FDFE3L, 0x3AC372E6L  }\r\n};\r\n\r\n\r\nunsigned long F(Context *ctx, unsigned long x) {\r\n   \r\n  unsigned char d =  x        &amp; 0xFF;\r\n  unsigned char c = (x &gt;&gt;  8) &amp; 0xFF;\r\n  unsigned char b = (x &gt;&gt; 16) &amp; 0xFF;\r\n  unsigned char a = (x &gt;&gt; 24) &amp; 0xFF;\r\n  \r\n  unsigned long y = ctx-&gt;S&#x5B;0]&#x5B;a] + ctx-&gt;S&#x5B;1]&#x5B;b];\r\n  y = y ^ ctx-&gt;S&#x5B;2]&#x5B;c];\r\n  y = y + ctx-&gt;S&#x5B;3]&#x5B;d];\r\n  \r\n  return y;\r\n}\r\n\r\n\r\nvoid Encrypt(Context *ctx, unsigned long *xl, unsigned long *xr){\r\n  \r\n  unsigned long Xl = *xl;\r\n  unsigned long Xr = *xr;\r\n\r\n  for (int i = 0; i &lt; Context::P_SIZE - 2; ++i) {\r\n    Xl = Xl ^ ctx-&gt;P&#x5B;i];\r\n    Xr = F(ctx, Xl) ^ Xr;\r\n    std::swap(Xl, Xr);\r\n  }\r\n\r\n  std::swap(Xl, Xr);\r\n\r\n  Xr = Xr ^ ctx-&gt;P&#x5B;Context::P_SIZE - 2];\r\n  Xl = Xl ^ ctx-&gt;P&#x5B;Context::P_SIZE - 1];\r\n\r\n  *xl = Xl;\r\n  *xr = Xr;\r\n}\r\n\r\n\r\nvoid Decrypt(Context *ctx, unsigned long *xl, unsigned long *xr){\r\n\r\n  unsigned long Xl = *xl;\r\n  unsigned long Xr = *xr;\r\n\r\n  for (int i = Context::P_SIZE - 1; i &gt; 1; --i) {\r\n    Xl = Xl ^ ctx-&gt;P&#x5B;i];\r\n    Xr = F(ctx, Xl) ^ Xr;\r\n    std::swap(Xl, Xr);\r\n  }\r\n\r\n  std::swap(Xl, Xr);\r\n\r\n  Xr = Xr ^ ctx-&gt;P&#x5B;1];\r\n  Xl = Xl ^ ctx-&gt;P&#x5B;0];\r\n\r\n  *xl = Xl;\r\n  *xr = Xr;\r\n}\r\n\r\nvoid Init(Context *ctx, unsigned char *key, int keyLen) {\r\n  for (int i = 0; i &lt; 4; i++) {\r\n    for (int j = 0; j &lt; 256; j++)\r\n      ctx-&gt;S&#x5B;i]&#x5B;j] = ORIG_S&#x5B;i]&#x5B;j];\r\n  }\r\n\r\n  int j = 0;\r\n  for (int i = 0; i &lt; Context::P_SIZE; ++i) {\r\n    unsigned long data = 0;\r\n    for (int k = 0; k &lt; 4; ++k) {\r\n      data = (data &lt;&lt; 8) | (key&#x5B;j]);\r\n      j = (j + 1) % keyLen;\r\n    }\r\n    ctx-&gt;P&#x5B;i] = ORIG_P&#x5B;i] ^ data;\r\n  }\r\n\r\n  unsigned long datal = 0, datar = 0;\r\n\r\n  for (int i = 0; i &lt; Context::P_SIZE; i += 2) {\r\n    Encrypt(ctx, &amp;datal, &amp;datar);\r\n    ctx-&gt;P&#x5B;i] = datal;\r\n    ctx-&gt;P&#x5B;i + 1] = datar;\r\n  }\r\n\r\n  for (int i = 0; i &lt; 4; ++i) {\r\n    for (int j = 0; j &lt; 256; j += 2) {\r\n      Encrypt(ctx, &amp;datal, &amp;datar);\r\n      ctx-&gt;S&#x5B;i]&#x5B;j] = datal;\r\n      ctx-&gt;S&#x5B;i]&#x5B;j + 1] = datar;\r\n    }\r\n  }\r\n}\r\n\r\n}\r\n\r\nint main()\r\n{\r\n  Blowfish::Context ctx;\r\n\r\n#if 1\r\n  const string productID = &quot;76481-640-8834005-23335&quot;;\r\n#else\r\n  const string productID = &quot;94940361391&quot;;\r\n#endif\r\n  const string const1 = &quot;ChinaCrackingGroup&quot;;\r\n  const string const2 = &quot;CrackingForFun&quot;;\r\n\r\n  Blowfish::Init(&amp;ctx, (uint8_t*)productID.c_str(), productID.size());\r\n\r\n  unsigned long A = 'wolb', B = 'hsif';\r\n  Blowfish::Encrypt(&amp;ctx, &amp;A, &amp;B);\r\n\r\n  Blowfish::Init(&amp;ctx, (uint8_t*)const1.c_str(), const1.size());\r\n  Blowfish::Encrypt(&amp;ctx, &amp;A, &amp;B);\r\n\r\n  Blowfish::Init(&amp;ctx, (uint8_t*)const2.c_str(), const2.size());\r\n\r\n\r\n  Blowfish::Encrypt(&amp;ctx, &amp;A, &amp;B);\r\n  printf(&quot;code: %08x%08x\\n&quot;, A, B);\r\n  return 0;\r\n}\r\n\r\n<\/pre>\n<p><a href=\"https:\/\/flandre-scarlet.moe\/blog\/wp-content\/uploads\/2019\/09\/crackme092.png\" rel=\"noopener noreferrer\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/flandre-scarlet.moe\/blog\/wp-content\/uploads\/2019\/09\/crackme092.png\" alt=\"\" width=\"501\" height=\"216\" class=\"alignnone size-full wp-image-952\" srcset=\"https:\/\/flandre-scarlet.moe\/blog\/wp-content\/uploads\/2019\/09\/crackme092.png 501w, https:\/\/flandre-scarlet.moe\/blog\/wp-content\/uploads\/2019\/09\/crackme092-300x129.png 300w\" sizes=\"auto, (max-width: 501px) 100vw, 501px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4f5c\u4e3a\u7ec3\u624b\u7684 160 \u4e2a CrackMe \u7cfb\u5217\u6574\u7406\u5206\u6790 CrackMe \u6765\u6e90\uff1a\u3010\u53cd\u6c47\u7f16\u7ec3\u4e60\u3011160\u4e2aCrackM&#8230; <\/p>\n<div class=\"read-more navbutton\"><a href=\"https:\/\/flandre-scarlet.moe\/blog\/946\/\">\u9605\u8bfb\u66f4\u591a<i class=\"fa fa-angle-double-right\"><\/i><\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[31],"tags":[124,32,33],"class_list":["post-946","post","type-post","status-publish","format-standard","hentry","category-reverse-engineering","tag-blowfish","tag-crackme","tag-33"],"_links":{"self":[{"href":"https:\/\/flandre-scarlet.moe\/blog\/wp-json\/wp\/v2\/posts\/946","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/flandre-scarlet.moe\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/flandre-scarlet.moe\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/flandre-scarlet.moe\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/flandre-scarlet.moe\/blog\/wp-json\/wp\/v2\/comments?post=946"}],"version-history":[{"count":1,"href":"https:\/\/flandre-scarlet.moe\/blog\/wp-json\/wp\/v2\/posts\/946\/revisions"}],"predecessor-version":[{"id":1398,"href":"https:\/\/flandre-scarlet.moe\/blog\/wp-json\/wp\/v2\/posts\/946\/revisions\/1398"}],"wp:attachment":[{"href":"https:\/\/flandre-scarlet.moe\/blog\/wp-json\/wp\/v2\/media?parent=946"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/flandre-scarlet.moe\/blog\/wp-json\/wp\/v2\/categories?post=946"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/flandre-scarlet.moe\/blog\/wp-json\/wp\/v2\/tags?post=946"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}