Guest User

MEA encryption

a guest
Apr 3rd, 2017
553
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.78 KB | None | 0 0
  1. __int64 __fastcall sub_14B482CA0(__int64 decryptedBuff, __int64 encryptedBuff, __int64 size)
  2. {
  3.   int v3; // eax@1
  4.   unsigned __int64 v4; // r9@1
  5.   int v5; // er14@1
  6.   __int64 v6; // rsi@1
  7.   __int64 v7; // rdi@1
  8.   signed __int64 v8; // rbx@1
  9.   int v9; // er11@1
  10.   signed __int64 v10; // rdx@2
  11.   int v11; // ecx@3
  12.   int v12; // ebp@4
  13.   signed __int64 v13; // r9@4
  14.   int v14; // ebp@4
  15.   signed __int64 v15; // r10@4
  16.   int v16; // ecx@5
  17.   int v17; // edx@5
  18.   int v18; // er8@5
  19.   __int64 v19; // r11@6
  20.   unsigned int v20; // er8@6
  21.   unsigned __int8 v21; // bp@6
  22.   unsigned int v22; // er9@6
  23.   int v23; // edx@7
  24.   int v24; // er9@7
  25.   signed __int64 v25; // rbx@10
  26.   unsigned int v26; // er9@10
  27.   signed __int64 v27; // rsi@10
  28.   signed __int64 v28; // r10@10
  29.   unsigned __int8 v29; // r11@10
  30.   int v30; // edx@11
  31.   int v31; // er9@11
  32.   __int64 v32; // r11@14
  33.   unsigned int v33; // er9@14
  34.   unsigned __int8 v34; // r10@14
  35.   signed __int64 v35; // rsi@14
  36.   int v36; // edx@15
  37.   int v37; // er9@15
  38.   unsigned int v38; // er9@18
  39.   signed __int64 v39; // rsi@18
  40.   signed __int64 v40; // r10@18
  41.   unsigned __int8 v41; // r11@18
  42.   int v42; // edx@19
  43.   int v43; // er9@19
  44.   unsigned int v44; // er9@22
  45.   signed __int64 v45; // r10@22
  46.   unsigned __int8 v46; // r11@22
  47.   int v47; // edx@23
  48.   int v48; // er9@23
  49.   signed __int64 v49; // r11@26
  50.   signed __int64 v50; // r9@26
  51.   unsigned __int8 v51; // r10@26
  52.   int v52; // edx@27
  53.   int v53; // er8@27
  54.   __int64 result; // rax@30
  55.  
  56.   v3 = 0;
  57.   *(_QWORD *)decryptedBuff = encryptedBuff;
  58.   *(_QWORD *)(decryptedBuff + 8) = size;
  59.   v4 = *(_WORD *)(encryptedBuff + 392);
  60.   v5 = size;
  61.   v6 = encryptedBuff;
  62.   v7 = decryptedBuff;
  63.   v8 = encryptedBuff + 410;
  64.   v9 = 0;
  65.   *(_QWORD *)(decryptedBuff + 16) = v4;
  66.   if ( v4 )
  67.   {
  68.     v10 = encryptedBuff + 410;
  69.     do
  70.     {
  71.       v11 = *(_BYTE *)v10++;
  72.       v9 = v11 ^ 2 * (v11 + v9);
  73.     }
  74.     while ( v10 - v8 < v4 );
  75.   }
  76.   v12 = (*(_BYTE *)(v6 + 405) ^ 2
  77.                               * (*(_BYTE *)(v6 + 405)
  78.                                + (*(_BYTE *)(v6 + 404) ^ 2
  79.                                                        * (*(_BYTE *)(v6 + 404)
  80.                                                         + (*(_BYTE *)(v6 + 403) ^ 2
  81.                                                                                 * (*(_BYTE *)(v6 + 403)
  82.                                                                                  + (*(_BYTE *)(v6 + 402) ^ 2 * *(_BYTE *)(v6 + 402))))))))
  83.       + (*(_BYTE *)(v6 + 3) ^ 2
  84.                             * (*(_BYTE *)(v6 + 3)
  85.                              + (*(_BYTE *)(v6 + 2) ^ 2
  86.                                                    * (*(_BYTE *)(v6 + 2)
  87.                                                     + (*(_BYTE *)(v6 + 1) ^ 2
  88.                                                                           * (*(_BYTE *)(v6 + 1)
  89.                                                                            + (*(_BYTE *)v6 ^ 2 * *(_BYTE *)v6)))))))
  90.       + (*(_BYTE *)(v6 + 391) ^ 2 * *(_BYTE *)(v6 + 391))
  91.       + v9
  92.       + (*(_BYTE *)(v6 + 397) ^ 2
  93.                               * (*(_BYTE *)(v6 + 397)
  94.                                + (*(_BYTE *)(v6 + 396) ^ 2
  95.                                                        * (*(_BYTE *)(v6 + 396)
  96.                                                         + (*(_BYTE *)(v6 + 395) ^ 2
  97.                                                                                 * (*(_BYTE *)(v6 + 395)
  98.                                                                                  + (*(_BYTE *)(v6 + 394) ^ 2 * *(_BYTE *)(v6 + 394))))))));
  99.   v13 = v6 + 5;
  100.   v14 = (*(_BYTE *)(v6 + 409) ^ 2
  101.                               * (*(_BYTE *)(v6 + 409)
  102.                                + (*(_BYTE *)(v6 + 408) ^ 2
  103.                                                        * (*(_BYTE *)(v6 + 408)
  104.                                                         + (*(_BYTE *)(v6 + 407) ^ 2
  105.                                                                                 * (*(_BYTE *)(v6 + 407)
  106.                                                                                  + (*(_BYTE *)(v6 + 406) ^ 2 * *(_BYTE *)(v6 + 406))))))))
  107.       + v12;
  108.   v15 = 129i64;
  109.   do
  110.   {
  111.     v16 = *(_BYTE *)(v13 - 1);
  112.     v17 = *(_BYTE *)v13;
  113.     v18 = *(_BYTE *)(v13 + 1);
  114.     v13 += 3i64;
  115.     v3 = v18 ^ 2 * (v18 + (v17 ^ 2 * (v17 + (v16 ^ 2 * (v16 + v3)))));
  116.     --v15;
  117.   }
  118.   while ( v15 );
  119.   v19 = *(_WORD *)(v6 + 392);
  120.   v20 = 1172968056;
  121.   v21 = v3 + v14;
  122.   v22 = 1172968056;
  123.   if ( *(_WORD *)(v6 + 392) )
  124.   {
  125.     do
  126.     {
  127.       v23 = (unsigned __int8)(*(_BYTE *)v8 ^ (v22 + BYTE1(v22) + (v22 >> 16) + BYTE3(v22)));
  128.       *(_BYTE *)v8 = v23;
  129.       v24 = __ROL4__(v22, v23 & 0x1F);
  130.       v22 = __ROL4__((v23 | ((v23 | ((v23 | (v23 << 8)) << 8)) << 8)) + v24, 1);
  131.       if ( (unsigned __int8)v15 > 0x10u )
  132.       {
  133.         v22 *= 2;
  134.         LOBYTE(v15) = 0;
  135.       }
  136.       LOBYTE(v15) = v15 + 1;
  137.       ++v8;
  138.       --v19;
  139.     }
  140.     while ( v19 );
  141.   }
  142.   v25 = 4i64;
  143.   v26 = 1172968056;
  144.   *(_BYTE *)(*(_QWORD *)v7 + 391i64) ^= 0xB9u;
  145.   v27 = 4i64;
  146.   v28 = *(_QWORD *)v7 + 394i64;
  147.   v29 = 0;
  148.   do
  149.   {
  150.     v30 = (unsigned __int8)(*(_BYTE *)v28 ^ (v26 + BYTE1(v26) + (v26 >> 16) + BYTE3(v26)));
  151.     *(_BYTE *)v28 = v30;
  152.     v31 = __ROL4__(v26, v30 & 0x1F);
  153.     v26 = __ROL4__((v30 | ((v30 | ((v30 | (v30 << 8)) << 8)) << 8)) + v31, 1);
  154.     if ( v29 > 0x10u )
  155.     {
  156.       v26 *= 2;
  157.       v29 = 0;
  158.     }
  159.     ++v29;
  160.     ++v28;
  161.     --v27;
  162.   }
  163.   while ( v27 );
  164.   v32 = *(_QWORD *)v7;
  165.   v33 = 1172968056;
  166.   v34 = 0;
  167.   v35 = 4i64;
  168.   do
  169.   {
  170.     v36 = (unsigned __int8)(*(_BYTE *)v32 ^ (v33 + BYTE1(v33) + (v33 >> 16) + BYTE3(v33)));
  171.     *(_BYTE *)v32 = v36;
  172.     v37 = __ROL4__(v33, v36 & 0x1F);
  173.     v33 = __ROL4__((v36 | ((v36 | ((v36 | (v36 << 8)) << 8)) << 8)) + v37, 1);
  174.     if ( v34 > 0x10u )
  175.     {
  176.       v33 *= 2;
  177.       v34 = 0;
  178.     }
  179.     ++v34;
  180.     ++v32;
  181.     --v35;
  182.   }
  183.   while ( v35 );
  184.   v38 = 1172968056;
  185.   v39 = 4i64;
  186.   v40 = *(_QWORD *)v7 + 402i64;
  187.   v41 = 0;
  188.   do
  189.   {
  190.     v42 = (unsigned __int8)(*(_BYTE *)v40 ^ (v38 + BYTE1(v38) + (v38 >> 16) + BYTE3(v38)));
  191.     *(_BYTE *)v40 = v42;
  192.     v43 = __ROL4__(v38, v42 & 0x1F);
  193.     v38 = __ROL4__((v42 | ((v42 | ((v42 | (v42 << 8)) << 8)) << 8)) + v43, 1);
  194.     if ( v41 > 0x10u )
  195.     {
  196.       v38 *= 2;
  197.       v41 = 0;
  198.     }
  199.     ++v41;
  200.     ++v40;
  201.     --v39;
  202.   }
  203.   while ( v39 );
  204.   v44 = 1172968056;
  205.   v45 = *(_QWORD *)v7 + 406i64;
  206.   v46 = 0;
  207.   do
  208.   {
  209.     v47 = (unsigned __int8)(*(_BYTE *)v45 ^ (v44 + BYTE1(v44) + (v44 >> 16) + BYTE3(v44)));
  210.     *(_BYTE *)v45 = v47;
  211.     v48 = __ROL4__(v44, v47 & 0x1F);
  212.     v44 = __ROL4__((v47 | ((v47 | ((v47 | (v47 << 8)) << 8)) << 8)) + v48, 1);
  213.     if ( v46 > 0x10u )
  214.     {
  215.       v44 *= 2;
  216.       v46 = 0;
  217.     }
  218.     ++v46;
  219.     ++v45;
  220.     --v25;
  221.   }
  222.   while ( v25 );
  223.   v49 = 387i64;
  224.   v50 = *(_QWORD *)v7 + 4i64;
  225.   v51 = 0;
  226.   do
  227.   {
  228.     v52 = (unsigned __int8)(*(_BYTE *)v50 ^ (v20 + BYTE1(v20) + (v20 >> 16) + BYTE3(v20)));
  229.     *(_BYTE *)v50 = v52;
  230.     v53 = __ROL4__(v20, v52 & 0x1F);
  231.     v20 = __ROL4__((v52 | ((v52 | ((v52 | (v52 << 8)) << 8)) << 8)) + v53, 1);
  232.     if ( v51 > 0x10u )
  233.     {
  234.       v20 *= 2;
  235.       v51 = 0;
  236.     }
  237.     ++v51;
  238.     ++v50;
  239.     --v49;
  240.   }
  241.   while ( v49 );
  242.   *(_DWORD *)(*(_QWORD *)v7 + 398i64) = v5;
  243.   result = *(_QWORD *)v7;
  244.   if ( *(_WORD *)(*(_QWORD *)v7 + 325i64) == 1 )
  245.     *(_BYTE *)(result + 5) ^= v21;
  246.   if ( *(_WORD *)(*(_QWORD *)v7 + 325i64) == 2 )
  247.   {
  248.     result = v21;
  249.     *(_WORD *)(*(_QWORD *)v7 + 5i64) ^= v21;
  250.   }
  251.   if ( *(_WORD *)(*(_QWORD *)v7 + 325i64) == 4 )
  252.   {
  253.     result = v21;
  254.     *(_DWORD *)(*(_QWORD *)v7 + 5i64) ^= v21;
  255.   }
  256.   if ( *(_WORD *)(*(_QWORD *)v7 + 325i64) == 8 )
  257.   {
  258.     result = v21;
  259.     *(_QWORD *)(*(_QWORD *)v7 + 5i64) ^= v21;
  260.   }
  261.   return result;
  262. }
  263.  
  264. greetz WV
Advertisement
Add Comment
Please, Sign In to add comment