Guest User

Acronis possible backdoor

a guest
Jun 19th, 2017
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 17.31 KB | None | 0 0
  1. _DWORD *__cdecl cryptoGenKey(int a1, int lpStructA, int a3, int a4)
  2. {
  3.   int lpStructA_; // esi@1
  4.   _DWORD *v5; // ebx@1
  5.   int v6; // eax@1
  6.   void *v7; // eax@2
  7.   signed int dwRandomDataBufferSize; // edi@6
  8.   int v9; // ecx@10
  9.   void *v10; // eax@11
  10.   void *v11; // eax@12
  11.   int v12; // ebx@13
  12.   int v13; // eax@14
  13.   bool v14; // zf@14
  14.   _BYTE *lpRandomBufferA; // ebx@15
  15.   _DWORD *v16; // eax@17
  16.   int v17; // eax@19
  17.   int v18; // eax@20
  18.   unsigned __int8 v19; // al@22
  19.   unsigned __int8 v20; // cl@23
  20.   unsigned __int8 v21; // dl@24
  21.   void *v22; // edx@27
  22.   unsigned __int8 dwIterationsCount; // cl@30
  23.   void *lpBufferA; // edx@32
  24.   void *v25; // eax@35
  25.   size_t v26; // esi@39
  26.   int v27; // eax@40
  27.   size_t v28; // ebx@40
  28.   _DWORD *v29; // esi@41
  29.   int v30; // eax@44
  30.   int v31; // edx@44
  31.   int v32; // ecx@44
  32.   int v33; // eax@47
  33.   int pubKeyPtr; // ecx@47
  34.   int pubKeySTruct; // eax@48
  35.   int v36; // esi@48
  36.   int v37; // eax@49
  37.   int v38; // eax@50
  38.   int *v39; // esi@50
  39.   int v40; // eax@53
  40.   int v41; // eax@54
  41.   int v42; // esi@58
  42.   void *v43; // eax@63
  43.   void *v45; // eax@64
  44.   int v46; // esi@64
  45.   void *v47; // eax@67
  46.   int v48; // esi@67
  47.   int *v49; // ecx@70
  48.   int *v50; // ecx@72
  49.   void *v51; // eax@76
  50.   void *v52; // eax@77
  51.   void *v53; // eax@78
  52.   int *v54; // ecx@79
  53.   int v55; // esi@81
  54.   volatile signed __int32 *v56; // eax@91
  55.   int v57; // [sp-20h] [bp-228h]@70
  56.   int v58; // [sp-1Ch] [bp-224h]@70
  57.   const char *v59; // [sp-18h] [bp-220h]@70
  58.   const char *v60; // [sp-14h] [bp-21Ch]@70
  59.   int v61; // [sp-10h] [bp-218h]@70
  60.   void *v62; // [sp-Ch] [bp-214h]@12
  61.   int v63; // [sp-8h] [bp-210h]@12
  62.   int *v64; // [sp-4h] [bp-20Ch]@12
  63.   size_t v65; // [sp+0h] [bp-208h]@91
  64.   int v66; // [sp+24h] [bp-1E4h]@64
  65.   int v67; // [sp+3Ch] [bp-1CCh]@67
  66.   int v68; // [sp+40h] [bp-1C8h]@1
  67.   int v69; // [sp+58h] [bp-1B0h]@63
  68.   int v70; // [sp+5Ch] [bp-1ACh]@13
  69.   int v71; // [sp+60h] [bp-1A8h]@53
  70.   unsigned int v72; // [sp+6Ch] [bp-19Ch]@12
  71.   int v73; // [sp+70h] [bp-198h]@26
  72.   int v74; // [sp+74h] [bp-194h]@52
  73.   int v75; // [sp+78h] [bp-190h]@1
  74.   int lpPubKey; // [sp+7Ch] [bp-18Ch]@12
  75.   int v77; // [sp+80h] [bp-188h]@1
  76.   size_t Size; // [sp+84h] [bp-184h]@10
  77.   int v79; // [sp+88h] [bp-180h]@1
  78.   void *lpRandomDataBuffer; // [sp+8Ch] [bp-17Ch]@14
  79.   int v81; // [sp+90h] [bp-178h]@14
  80.   int v82; // [sp+94h] [bp-174h]@14
  81.   int v83; // [sp+98h] [bp-170h]@26
  82.   int v84; // [sp+9Ch] [bp-16Ch]@14
  83.   _DWORD *v85; // [sp+A0h] [bp-168h]@1
  84.   int v86; // [sp+A6h] [bp-162h]@12
  85.   void *v87; // [sp+19Ch] [bp-6Ch]@17
  86.   size_t dwBufferSizeB; // [sp+1ACh] [bp-5Ch]@17
  87.   int v89; // [sp+1B0h] [bp-58h]@2
  88.   __int16 Src; // [sp+1B4h] [bp-54h]@62
  89.   int lpRandom16Buffer; // [sp+1B6h] [bp-52h]@62
  90.   int encryptedRandomKey; // [sp+1C4h] [bp-44h]@27
  91.   size_t v93; // [sp+1CAh] [bp-3Eh]@81
  92.   int v94; // [sp+1E8h] [bp-20h]@44
  93.   int v95; // [sp+1ECh] [bp-1Ch]@44
  94.   int v96; // [sp+1F0h] [bp-18h]@44
  95.   int v97; // [sp+1F4h] [bp-14h]@44
  96.   int v98; // [sp+204h] [bp-4h]@14
  97.  
  98.   lpStructA_ = lpStructA;
  99.   v5 = (_DWORD *)a1;
  100.   v6 = *(_DWORD *)(lpStructA + 12);
  101.   v85 = (_DWORD *)a1;
  102.   v75 = lpStructA;
  103.   v77 = a3;
  104.   v79 = a4;
  105.   v68 = 0;
  106.   if ( v6 == *(_DWORD *)(lpStructA + 16) )
  107.   {
  108.     v7 = (void *)dbgCall1(&unk_ED4454);
  109.     dbgCall2(
  110.       -886977375,
  111.       1526336850,
  112.       (int)"k:\\8053\\backup\\crypt\\genkey.cpp",
  113.       (int)"Crypto::GenKey",
  114.       53,
  115.       v89,
  116.       262158,
  117.       v7);
  118.     return v5;
  119.   }
  120.   switch ( *(_DWORD *)lpStructA )
  121.   {
  122.     case 1:
  123.       dwRandomDataBufferSize = 16;
  124.       break;
  125.     case 2:
  126.       dwRandomDataBufferSize = 24;
  127.       break;
  128.     case 3:
  129.       dwRandomDataBufferSize = 32;
  130.       break;
  131.     default:
  132.       dwRandomDataBufferSize = 0;
  133.       break;
  134.   }
  135.   v9 = *(_DWORD *)(a3 + 4);
  136.   Size = dwRandomDataBufferSize;
  137.   if ( v9 - *(_DWORD *)v77 != dwRandomDataBufferSize + 1 )
  138.   {
  139.     v10 = (void *)dbgCall1(&unk_ED4454);
  140.     dbgCall2(
  141.       -886977372,
  142.       1526336850,
  143.       (int)"k:\\8053\\backup\\crypt\\genkey.cpp",
  144.       (int)"Crypto::GenKey",
  145.       56,
  146.       v89,
  147.       262158,
  148.       v10);
  149.     return v5;
  150.   }
  151.   v11 = *(void **)a4;
  152.   v64 = &v86;
  153.   v63 = 1;
  154.   v62 = v11;
  155.   *(_DWORD *)(a4 + 4) = v11;
  156.   LOBYTE(v86) = 1;
  157.   stdStuff((int)&lpPubKey, v62, v63, (int)v64);
  158.   LOBYTE(v86) = 0;
  159.   v72 = 0;
  160.   if ( !((*(_DWORD *)(lpStructA + 16) - *(_DWORD *)(lpStructA + 12)) / 36) )
  161.   {
  162. LABEL_90:
  163.     v55 = v79;
  164.     goto LABEL_91;
  165.   }
  166.   v12 = 0;
  167.   v70 = 0;
  168.   do
  169.   {
  170.     v13 = v12 + *(_DWORD *)(lpStructA_ + 12);
  171.     BYTE1(v86) = 0;
  172.     v84 = v13;
  173.     lpRandomDataBuffer = 0;
  174.     v81 = 0;
  175.     v82 = 0;
  176.     v14 = *(_DWORD *)(v13 + 28) == 0;
  177.     v98 = 0;
  178.     if ( v14 )
  179.     {
  180.       vectorStuffA((int)&lpRandomDataBuffer, 0, (void *)(*(_DWORD *)v77 + 1), *(_DWORD *)(v77 + 4), v75);
  181.       lpRandomBufferA = lpRandomDataBuffer;
  182.       goto LABEL_47;
  183.     }
  184.     LOWORD(v86) = 2049;
  185.     vectorStuffB((int)&lpRandomDataBuffer, 2 * dwRandomDataBufferSize + 4);
  186.     lpRandomBufferA = lpRandomDataBuffer;
  187.     if ( !genRandomData(lpRandomDataBuffer, dwRandomDataBufferSize, 1) )
  188.     {
  189.       v64 = (int *)dbgCall1(&unk_ED4454);
  190.       v63 = 262158;
  191.       v54 = &v57;
  192.       v57 = -886977354;
  193.       v58 = 1526336850;
  194.       v59 = "k:\\8053\\backup\\crypt\\genkey.cpp";
  195.       v60 = "Crypto::GenKey";
  196.       v61 = 74;
  197.       goto LABEL_85;
  198.     }
  199.     v89 = 15;
  200.     dwBufferSizeB = 0;
  201.     LOBYTE(v87) = 0;
  202.     v16 = (_DWORD *)(v84 + 12);
  203.     LOBYTE(v98) = 1;
  204.     if ( *(_DWORD *)(v84 + 32) >= 8u )
  205.       v16 = (_DWORD *)*v16;
  206.     ((void (__cdecl *)(void **, _DWORD *, signed int))loc_6877E0)(&v87, v16, -1);
  207.     v17 = *(_DWORD *)(lpStructA_ + 4);
  208.     if ( v17 )
  209.     {
  210.       v18 = v17 - 1;
  211.       if ( v18 )
  212.       {
  213.         if ( v18 != 1 )
  214.         {
  215.           v47 = (void *)dbgCall1(&unk_ED4454);
  216.           v48 = (int)v85;
  217.           dbgCall2(
  218.             -886977325,
  219.             1526336850,
  220.             (int)"k:\\8053\\backup\\crypt\\genkey.cpp",
  221.             (int)"Crypto::GenKey",
  222.             103,
  223.             v67,
  224.             262158,
  225.             v47);
  226.           if ( (unsigned int)v89 >= 0x10 )
  227.             operator delete(v87);
  228.           v89 = 15;
  229.           dwBufferSizeB = 0;
  230.           LOBYTE(v87) = 0;
  231.           goto LABEL_86;
  232.         }
  233.         v19 = *(_BYTE *)(lpStructA_ + 9);
  234.         if ( !v19
  235.           || (v20 = *(_BYTE *)(lpStructA_ + 10)) == 0
  236.           || (v21 = *(_BYTE *)(lpStructA_ + 11)) == 0
  237.           || v19 > 0x18u
  238.           || (v83 = v20, v73 = v21, lpPubKey = v19, v21 * v20 > 1 << (24 - v19)) )
  239.         {
  240.           v45 = (void *)dbgCall1(&unk_ED4454);
  241.           v46 = (int)v85;
  242.           dbgCall2(
  243.             -886977338,
  244.             1526336850,
  245.             (int)"k:\\8053\\backup\\crypt\\genkey.cpp",
  246.             (int)"Crypto::GenKey",
  247.             90,
  248.             v66,
  249.             262158,
  250.             v45);
  251.           if ( (unsigned int)v89 >= 0x10 )
  252.             operator delete(v87);
  253.           v89 = 15;
  254.           dwBufferSizeB = 0;
  255.           LOBYTE(v87) = 0;
  256.           memDelete(&lpRandomDataBuffer);
  257.           return (_DWORD *)v46;
  258.         }
  259.         v64 = &encryptedRandomKey;
  260.         v63 = v73;
  261.         v62 = (void *)v83;
  262.         v22 = &v87;
  263.         if ( (unsigned int)v89 >= 0x10 )
  264.           v22 = v87;
  265.         sha256Things(
  266.           v22,
  267.           dwBufferSizeB,
  268.           (int)lpRandomBufferA,
  269.           dwRandomDataBufferSize,
  270.           1 << lpPubKey,
  271.           (int)v62,
  272.           v63,
  273.           (int)v64);
  274.         lpRandomBufferA[2 * dwRandomDataBufferSize] = *(_BYTE *)(lpStructA_ + 9);
  275.         lpRandomBufferA[2 * dwRandomDataBufferSize + 1] = *(_BYTE *)(lpStructA_ + 10);
  276.         lpRandomBufferA[2 * dwRandomDataBufferSize + 2] = *(_BYTE *)(lpStructA_ + 11);
  277.       }
  278.       else
  279.       {
  280.         dwIterationsCount = *(_BYTE *)(lpStructA_ + 8);
  281.         if ( !dwIterationsCount || dwIterationsCount > 0x18u )
  282.         {
  283.           v64 = (int *)dbgCall1(&unk_ED4454);
  284.           v63 = 262158;
  285.           v49 = &v57;
  286.           v57 = -886977346;
  287.           v58 = 1526336850;
  288.           v59 = "k:\\8053\\backup\\crypt\\genkey.cpp";
  289.           v60 = "Crypto::GenKey";
  290.           v61 = 82;
  291. LABEL_71:
  292.           v49[5] = v69;
  293.           dbgCall2(v57, v58, (int)v59, (int)v60, v61, (int)v62, v63, v64);
  294.           memDeleteIf(&v87);
  295.           memDelete(&lpRandomDataBuffer);
  296.           return v85;
  297.         }
  298.         v64 = &encryptedRandomKey;
  299.         lpBufferA = &v87;
  300.         if ( (unsigned int)v89 >= 0x10 )
  301.           lpBufferA = v87;
  302.         sha256XorAgain(
  303.           lpBufferA,
  304.           dwBufferSizeB,
  305.           (int)lpRandomBufferA,
  306.           dwRandomDataBufferSize,
  307.           1 << dwIterationsCount,
  308.           (int)v64);
  309.         lpRandomBufferA[2 * dwRandomDataBufferSize] = *(_BYTE *)(lpStructA_ + 8);
  310.       }
  311.     }
  312.     else
  313.     {
  314.       BYTE1(v86) = 2;
  315.       vectorStuffB((int)&lpRandomDataBuffer, 2 * dwRandomDataBufferSize);
  316.       lpRandomBufferA = lpRandomDataBuffer;
  317.       v25 = &v87;
  318.       if ( (unsigned int)v89 >= 0x10 )
  319.         v25 = v87;
  320.       sha256H_1000Times(
  321.         (int)v25,
  322.         dwBufferSizeB,
  323.         (int)lpRandomDataBuffer,
  324.         dwRandomDataBufferSize,
  325.         (int)&encryptedRandomKey);
  326.     }
  327.     AES_set_encrypt_key(&encryptedRandomKey, 8 * dwRandomDataBufferSize, (char *)&v86 + 2);
  328.     if ( !(Size & 0xF) )
  329.     {
  330.       v26 = (size_t)&lpRandomBufferA[Size];
  331.       memcpy(&lpRandomBufferA[Size], (const void *)(*(_DWORD *)v77 + 1), Size);
  332.       dwRandomDataBufferSize = Size;
  333.       if ( Size )
  334.       {
  335.         v27 = v26 - 8;
  336.         v28 = ((Size - 1) >> 4) + 1;
  337.         do
  338.         {
  339.           *(_DWORD *)(v27 + 8) ^= *(_DWORD *)(v27 - 8);
  340.           v29 = (_DWORD *)(v27 + 16);
  341.           *(_DWORD *)(v27 + 12) ^= *(_DWORD *)(v27 - 4);
  342.           *v29 ^= *(_DWORD *)v27;
  343.           *(_DWORD *)(v27 + 20) ^= *(_DWORD *)(v27 + 4);
  344.           AES_encrypt(v27 + 8, v27 + 8, (char *)&v86 + 2);
  345.           v27 = (int)v29;
  346.           --v28;
  347.         }
  348.         while ( v28 );
  349.         lpRandomBufferA = lpRandomDataBuffer;
  350.       }
  351.       goto LABEL_45;
  352.     }
  353.     if ( Size != 24 )
  354.     {
  355.       v64 = (int *)dbgCall1(&unk_ED4454);
  356.       v63 = 262158;
  357.       v49 = &v57;
  358.       v57 = -886977298;
  359.       v58 = 1526336850;
  360.       v59 = "k:\\8053\\backup\\crypt\\genkey.cpp";
  361.       v60 = "Crypto::GenKey";
  362.       v61 = 130;
  363.       goto LABEL_71;
  364.     }
  365.     v94 = *((_DWORD *)lpRandomBufferA + 2);
  366.     v95 = *((_DWORD *)lpRandomBufferA + 3);
  367.     v30 = *(_DWORD *)v77;
  368.     v96 = *((_DWORD *)lpRandomBufferA + 4);
  369.     v97 = *((_DWORD *)lpRandomBufferA + 5);
  370.     v94 ^= *(_DWORD *)(v30 + 1);
  371.     v95 ^= *(_DWORD *)(v30 + 5);
  372.     v96 ^= *(_DWORD *)(v30 + 9);
  373.     v97 ^= *(_DWORD *)(v30 + 13);
  374.     AES_encrypt(&v94, &v94, (char *)&v86 + 2);
  375.     v31 = (int)(lpRandomBufferA + 24);
  376.     *(_DWORD *)v31 = v94;
  377.     *(_DWORD *)(v31 + 4) = v95;
  378.     *(_DWORD *)(v31 + 8) = v96;
  379.     *(_DWORD *)(v31 + 12) = v97;
  380.     *((_DWORD *)lpRandomBufferA + 10) = v94;
  381.     *((_DWORD *)lpRandomBufferA + 11) = v95;
  382.     v32 = *(_DWORD *)v77;
  383.     *(_DWORD *)v31 ^= *(_DWORD *)(*(_DWORD *)v77 + 17);
  384.     *(_DWORD *)(v31 + 4) ^= *(_DWORD *)(v32 + 21);
  385.     AES_encrypt(lpRandomBufferA + 24, lpRandomBufferA + 24, (char *)&v86 + 2);
  386.     dwRandomDataBufferSize = Size;
  387. LABEL_45:
  388.     LOBYTE(v98) = 0;
  389.     if ( (unsigned int)v89 >= 0x10 )
  390.       operator delete(v87);
  391. LABEL_47:
  392.     v33 = *(_DWORD *)(v84 + 4);
  393.     pubKeyPtr = *(_DWORD *)v84;
  394.     if ( *(_DWORD *)v84 == v33 )
  395.       goto LABEL_57;
  396.     BYTE1(v86) |= 1u;
  397.     lpPubKey = pubKeyPtr;
  398.     pubKeySTruct = d2i_X509(0, &lpPubKey, v33 - pubKeyPtr);
  399.     v36 = pubKeySTruct;
  400.     v84 = pubKeySTruct;
  401.     if ( !pubKeySTruct )
  402.     {
  403.       v64 = (int *)dbgCall1(&unk_ED4364);
  404.       v63 = 262157;
  405.       v54 = &v57;
  406.       v57 = -886977289;
  407.       v58 = 1526336850;
  408.       v59 = "k:\\8053\\backup\\crypt\\genkey.cpp";
  409.       v60 = "Crypto::GenKey";
  410.       v61 = 139;
  411.       goto LABEL_85;
  412.     }
  413.     v37 = X509_get_pubkey(pubKeySTruct);
  414.     v83 = v37;
  415.     if ( !v37 )
  416.     {
  417.       X509_free(v36);
  418.       v64 = (int *)dbgCall1(&unk_ED4364);
  419.       v63 = 262157;
  420.       v54 = &v57;
  421.       v57 = -886977284;
  422.       v58 = 1526336850;
  423.       v59 = "k:\\8053\\backup\\crypt\\genkey.cpp";
  424.       v60 = "Crypto::GenKey";
  425.       v61 = 144;
  426. LABEL_85:
  427.       v48 = (int)v85;
  428.       v54[5] = v69;
  429.       dbgCall2(v57, v58, (int)v59, (int)v60, v61, (int)v62, v63, v64);
  430. LABEL_86:
  431.       if ( lpRandomBufferA )
  432.         operator delete(lpRandomBufferA);
  433.       return (_DWORD *)v48;
  434.     }
  435.     v38 = EVP_PKEY_CTX_new(v37, 0);
  436.     v39 = (int *)v38;
  437.     if ( !v38 )
  438.     {
  439.       EVP_PKEY_free(v83);
  440.       X509_free(v84);
  441.       v53 = (void *)dbgCall1(&unk_ED4364);
  442.       dbgCall2(
  443.         -886977277,
  444.         1526336850,
  445.         (int)"k:\\8053\\backup\\crypt\\genkey.cpp",
  446.         (int)"Crypto::GenKey",
  447.         151,
  448.         v69,
  449.         262157,
  450.         v53);
  451.       memDelete(&lpRandomDataBuffer);
  452.       return v85;
  453.     }
  454.     if ( EVP_PKEY_encrypt_init(v38) <= 0 )
  455.     {
  456.       EVP_PKEY_CTX_free(v39);
  457.       EVP_PKEY_free(v83);
  458.       X509_free(v84);
  459.       v52 = (void *)dbgCall1(&unk_ED4364);
  460.       dbgCall2(
  461.         -886977270,
  462.         1526336850,
  463.         (int)"k:\\8053\\backup\\crypt\\genkey.cpp",
  464.         (int)"Crypto::GenKey",
  465.         158,
  466.         v69,
  467.         262157,
  468.         v52);
  469.       memDelete(&lpRandomDataBuffer);
  470.       return v85;
  471.     }
  472.     v74 = 0;
  473.     v73 = v81 - (_DWORD)lpRandomBufferA;
  474.     if ( EVP_PKEY_encrypt(v39, 0, &v74, lpRandomBufferA, v81 - (_DWORD)lpRandomBufferA) <= 0 )
  475.     {
  476.       EVP_PKEY_CTX_free(v39);
  477.       EVP_PKEY_free(v83);
  478.       X509_free(v84);
  479.       v51 = (void *)dbgCall1(&unk_ED4364);
  480.       dbgCall2(
  481.         -886977262,
  482.         1526336850,
  483.         (int)"k:\\8053\\backup\\crypt\\genkey.cpp",
  484.         (int)"Crypto::GenKey",
  485.         166,
  486.         v69,
  487.         262157,
  488.         v51);
  489.       memDelete(&lpRandomDataBuffer);
  490.       return v85;
  491.     }
  492.     sub_4AFBC0(v74 + 20);
  493.     LOBYTE(v98) = 2;
  494.     v40 = EVP_sha1(v71, 0);
  495.     if ( X509_digest(v84, v40) <= 0 )
  496.     {
  497.       EVP_PKEY_CTX_free(v39);
  498.       EVP_PKEY_free(v83);
  499.       X509_free(v84);
  500.       v64 = (int *)dbgCall1(&unk_ED4364);
  501.       v63 = 262157;
  502.       v50 = &v57;
  503.       v57 = -886977254;
  504.       v58 = 1526336850;
  505.       v59 = "k:\\8053\\backup\\crypt\\genkey.cpp";
  506.       v60 = "Crypto::GenKey";
  507.       v61 = 174;
  508.       goto LABEL_75;
  509.     }
  510.     v41 = EVP_PKEY_encrypt(v39, v71 + 20, &v74, lpRandomBufferA, v73);
  511.     v64 = v39;
  512.     if ( v41 <= 0 )
  513.     {
  514.       EVP_PKEY_CTX_free(v64);
  515.       EVP_PKEY_free(v83);
  516.       X509_free(v84);
  517.       v64 = (int *)dbgCall1(&unk_ED4364);
  518.       v63 = 262157;
  519.       v50 = &v57;
  520.       v57 = -886977247;
  521.       v58 = 1526336850;
  522.       v59 = "k:\\8053\\backup\\crypt\\genkey.cpp";
  523.       v60 = "Crypto::GenKey";
  524.       v61 = 181;
  525.       goto LABEL_75;
  526.     }
  527.     EVP_PKEY_CTX_free(v64);
  528.     EVP_PKEY_free(v83);
  529.     X509_free(v84);
  530.     if ( v74 & 3 )
  531.     {
  532.       v64 = (int *)dbgCall1(&unk_ED4364);
  533.       v63 = 262157;
  534.       v50 = &v57;
  535.       v57 = -886977241;
  536.       v58 = 1526336850;
  537.       v59 = "k:\\8053\\backup\\crypt\\genkey.cpp";
  538.       v60 = "Crypto::GenKey";
  539.       v61 = 187;
  540. LABEL_75:
  541.       v50[5] = v69;
  542.       dbgCall2(v57, v58, (int)v59, (int)v60, v61, (int)v62, v63, v64);
  543.       memDelete(&v71);
  544.       memDelete(&lpRandomDataBuffer);
  545.       return v85;
  546.     }
  547.     vectorStuffB((int)&v71, v74 + 20);
  548.     sub_648DC0(&lpRandomDataBuffer, &v71);
  549.     LOBYTE(v98) = 0;
  550.     memDelete(&v71);
  551.     lpRandomBufferA = lpRandomDataBuffer;
  552. LABEL_57:
  553.     if ( !BYTE1(v86) )
  554.     {
  555.       v64 = (int *)dbgCall1(&unk_ED4454);
  556.       v63 = 262158;
  557.       v54 = &v57;
  558.       v57 = -886977236;
  559.       v58 = 1526336850;
  560.       v59 = "k:\\8053\\backup\\crypt\\genkey.cpp";
  561.       v60 = "Crypto::GenKey";
  562.       v61 = 192;
  563.       goto LABEL_85;
  564.     }
  565.     sub_64E100((char *)&v86 + 1);
  566.     v42 = v81;
  567.     BYTE1(v86) = ((unsigned int)(v81 - (_DWORD)lpRandomBufferA) >> 2) - 1;
  568.     sub_64E100((char *)&v86 + 1);
  569.     vectorStuffA(v79, *(void **)(v79 + 4), lpRandomBufferA, v42, v75);
  570.     v98 = -1;
  571.     if ( lpRandomBufferA )
  572.     {
  573.       operator delete(lpRandomBufferA);
  574.       lpRandomDataBuffer = 0;
  575.       v81 = 0;
  576.       v82 = 0;
  577.     }
  578.     lpStructA_ = v75;
  579.     ++v72;
  580.     v12 = v70 + 36;
  581.     v70 += 36;
  582.   }
  583.   while ( v72 < (*(_DWORD *)(v75 + 16) - *(_DWORD *)(v75 + 12)) / 36 );
  584.   if ( !(_BYTE)v86 )
  585.   {
  586.     v5 = v85;
  587.     goto LABEL_90;
  588.   }
  589.   Src = 1028;
  590.   if ( !genRandomData(&lpRandom16Buffer, 16, 1) )// Generate 16 bytes of random data
  591.   {
  592.     v43 = (void *)dbgCall1(&unk_ED4454);
  593.     dbgCall2(
  594.       -886977225,
  595.       1526336850,
  596.       (int)"k:\\8053\\backup\\crypt\\genkey.cpp",
  597.       (int)"Crypto::GenKey",
  598.       203,
  599.       v69,
  600.       262158,
  601.       v43);
  602.     return v85;
  603.   }
  604.   AES_set_encrypt_key(*(_DWORD *)v77 + 1, 8 * dwRandomDataBufferSize, (char *)&v86 + 2);
  605.   AES_encrypt(&lpRandom16Buffer, (char *)&encryptedRandomKey + 2, (char *)&v86 + 2);
  606.   sha256H_1000Times((int)&encryptedRandomKey + 2, 16, (int)&lpRandom16Buffer, 16, (int)&encryptedRandomKey + 2);// encrypetdRandomKey = hashedkey
  607.   v55 = v79;
  608.   sub_C2FCE0(v79, *(void **)(v79 + 4), &Src, (size_t)&v93, v75);
  609.   v5 = v85;
  610. LABEL_91:
  611.   LOBYTE(v86) = -1;
  612.   stdStuff((int)&v75, *(void **)(v55 + 4), 1u, (int)&v86);
  613.   sub_653970(v55, v65);
  614.   v56 = (volatile signed __int32 *)dword_12635BC;
  615.   *v5 = dword_12635BC;
  616.   if ( v56 )
  617.     _InterlockedExchangeAdd(v56, 1u);
  618.   return v5;
  619. }
Add Comment
Please, Sign In to add comment