Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- _DWORD *__cdecl cryptoGenKey(int a1, int lpStructA, int a3, int a4)
- {
- int lpStructA_; // esi@1
- _DWORD *v5; // ebx@1
- int v6; // eax@1
- void *v7; // eax@2
- signed int dwRandomDataBufferSize; // edi@6
- int v9; // ecx@10
- void *v10; // eax@11
- void *v11; // eax@12
- int v12; // ebx@13
- int v13; // eax@14
- bool v14; // zf@14
- _BYTE *lpRandomBufferA; // ebx@15
- _DWORD *v16; // eax@17
- int v17; // eax@19
- int v18; // eax@20
- unsigned __int8 v19; // al@22
- unsigned __int8 v20; // cl@23
- unsigned __int8 v21; // dl@24
- void *v22; // edx@27
- unsigned __int8 dwIterationsCount; // cl@30
- void *lpBufferA; // edx@32
- void *v25; // eax@35
- size_t v26; // esi@39
- int v27; // eax@40
- size_t v28; // ebx@40
- _DWORD *v29; // esi@41
- int v30; // eax@44
- int v31; // edx@44
- int v32; // ecx@44
- int v33; // eax@47
- int pubKeyPtr; // ecx@47
- int pubKeySTruct; // eax@48
- int v36; // esi@48
- int v37; // eax@49
- int v38; // eax@50
- int *v39; // esi@50
- int v40; // eax@53
- int v41; // eax@54
- int v42; // esi@58
- void *v43; // eax@63
- void *v45; // eax@64
- int v46; // esi@64
- void *v47; // eax@67
- int v48; // esi@67
- int *v49; // ecx@70
- int *v50; // ecx@72
- void *v51; // eax@76
- void *v52; // eax@77
- void *v53; // eax@78
- int *v54; // ecx@79
- int v55; // esi@81
- volatile signed __int32 *v56; // eax@91
- int v57; // [sp-20h] [bp-228h]@70
- int v58; // [sp-1Ch] [bp-224h]@70
- const char *v59; // [sp-18h] [bp-220h]@70
- const char *v60; // [sp-14h] [bp-21Ch]@70
- int v61; // [sp-10h] [bp-218h]@70
- void *v62; // [sp-Ch] [bp-214h]@12
- int v63; // [sp-8h] [bp-210h]@12
- int *v64; // [sp-4h] [bp-20Ch]@12
- size_t v65; // [sp+0h] [bp-208h]@91
- int v66; // [sp+24h] [bp-1E4h]@64
- int v67; // [sp+3Ch] [bp-1CCh]@67
- int v68; // [sp+40h] [bp-1C8h]@1
- int v69; // [sp+58h] [bp-1B0h]@63
- int v70; // [sp+5Ch] [bp-1ACh]@13
- int v71; // [sp+60h] [bp-1A8h]@53
- unsigned int v72; // [sp+6Ch] [bp-19Ch]@12
- int v73; // [sp+70h] [bp-198h]@26
- int v74; // [sp+74h] [bp-194h]@52
- int v75; // [sp+78h] [bp-190h]@1
- int lpPubKey; // [sp+7Ch] [bp-18Ch]@12
- int v77; // [sp+80h] [bp-188h]@1
- size_t Size; // [sp+84h] [bp-184h]@10
- int v79; // [sp+88h] [bp-180h]@1
- void *lpRandomDataBuffer; // [sp+8Ch] [bp-17Ch]@14
- int v81; // [sp+90h] [bp-178h]@14
- int v82; // [sp+94h] [bp-174h]@14
- int v83; // [sp+98h] [bp-170h]@26
- int v84; // [sp+9Ch] [bp-16Ch]@14
- _DWORD *v85; // [sp+A0h] [bp-168h]@1
- int v86; // [sp+A6h] [bp-162h]@12
- void *v87; // [sp+19Ch] [bp-6Ch]@17
- size_t dwBufferSizeB; // [sp+1ACh] [bp-5Ch]@17
- int v89; // [sp+1B0h] [bp-58h]@2
- __int16 Src; // [sp+1B4h] [bp-54h]@62
- int lpRandom16Buffer; // [sp+1B6h] [bp-52h]@62
- int encryptedRandomKey; // [sp+1C4h] [bp-44h]@27
- size_t v93; // [sp+1CAh] [bp-3Eh]@81
- int v94; // [sp+1E8h] [bp-20h]@44
- int v95; // [sp+1ECh] [bp-1Ch]@44
- int v96; // [sp+1F0h] [bp-18h]@44
- int v97; // [sp+1F4h] [bp-14h]@44
- int v98; // [sp+204h] [bp-4h]@14
- lpStructA_ = lpStructA;
- v5 = (_DWORD *)a1;
- v6 = *(_DWORD *)(lpStructA + 12);
- v85 = (_DWORD *)a1;
- v75 = lpStructA;
- v77 = a3;
- v79 = a4;
- v68 = 0;
- if ( v6 == *(_DWORD *)(lpStructA + 16) )
- {
- v7 = (void *)dbgCall1(&unk_ED4454);
- dbgCall2(
- -886977375,
- 1526336850,
- (int)"k:\\8053\\backup\\crypt\\genkey.cpp",
- (int)"Crypto::GenKey",
- 53,
- v89,
- 262158,
- v7);
- return v5;
- }
- switch ( *(_DWORD *)lpStructA )
- {
- case 1:
- dwRandomDataBufferSize = 16;
- break;
- case 2:
- dwRandomDataBufferSize = 24;
- break;
- case 3:
- dwRandomDataBufferSize = 32;
- break;
- default:
- dwRandomDataBufferSize = 0;
- break;
- }
- v9 = *(_DWORD *)(a3 + 4);
- Size = dwRandomDataBufferSize;
- if ( v9 - *(_DWORD *)v77 != dwRandomDataBufferSize + 1 )
- {
- v10 = (void *)dbgCall1(&unk_ED4454);
- dbgCall2(
- -886977372,
- 1526336850,
- (int)"k:\\8053\\backup\\crypt\\genkey.cpp",
- (int)"Crypto::GenKey",
- 56,
- v89,
- 262158,
- v10);
- return v5;
- }
- v11 = *(void **)a4;
- v64 = &v86;
- v63 = 1;
- v62 = v11;
- *(_DWORD *)(a4 + 4) = v11;
- LOBYTE(v86) = 1;
- stdStuff((int)&lpPubKey, v62, v63, (int)v64);
- LOBYTE(v86) = 0;
- v72 = 0;
- if ( !((*(_DWORD *)(lpStructA + 16) - *(_DWORD *)(lpStructA + 12)) / 36) )
- {
- LABEL_90:
- v55 = v79;
- goto LABEL_91;
- }
- v12 = 0;
- v70 = 0;
- do
- {
- v13 = v12 + *(_DWORD *)(lpStructA_ + 12);
- BYTE1(v86) = 0;
- v84 = v13;
- lpRandomDataBuffer = 0;
- v81 = 0;
- v82 = 0;
- v14 = *(_DWORD *)(v13 + 28) == 0;
- v98 = 0;
- if ( v14 )
- {
- vectorStuffA((int)&lpRandomDataBuffer, 0, (void *)(*(_DWORD *)v77 + 1), *(_DWORD *)(v77 + 4), v75);
- lpRandomBufferA = lpRandomDataBuffer;
- goto LABEL_47;
- }
- LOWORD(v86) = 2049;
- vectorStuffB((int)&lpRandomDataBuffer, 2 * dwRandomDataBufferSize + 4);
- lpRandomBufferA = lpRandomDataBuffer;
- if ( !genRandomData(lpRandomDataBuffer, dwRandomDataBufferSize, 1) )
- {
- v64 = (int *)dbgCall1(&unk_ED4454);
- v63 = 262158;
- v54 = &v57;
- v57 = -886977354;
- v58 = 1526336850;
- v59 = "k:\\8053\\backup\\crypt\\genkey.cpp";
- v60 = "Crypto::GenKey";
- v61 = 74;
- goto LABEL_85;
- }
- v89 = 15;
- dwBufferSizeB = 0;
- LOBYTE(v87) = 0;
- v16 = (_DWORD *)(v84 + 12);
- LOBYTE(v98) = 1;
- if ( *(_DWORD *)(v84 + 32) >= 8u )
- v16 = (_DWORD *)*v16;
- ((void (__cdecl *)(void **, _DWORD *, signed int))loc_6877E0)(&v87, v16, -1);
- v17 = *(_DWORD *)(lpStructA_ + 4);
- if ( v17 )
- {
- v18 = v17 - 1;
- if ( v18 )
- {
- if ( v18 != 1 )
- {
- v47 = (void *)dbgCall1(&unk_ED4454);
- v48 = (int)v85;
- dbgCall2(
- -886977325,
- 1526336850,
- (int)"k:\\8053\\backup\\crypt\\genkey.cpp",
- (int)"Crypto::GenKey",
- 103,
- v67,
- 262158,
- v47);
- if ( (unsigned int)v89 >= 0x10 )
- operator delete(v87);
- v89 = 15;
- dwBufferSizeB = 0;
- LOBYTE(v87) = 0;
- goto LABEL_86;
- }
- v19 = *(_BYTE *)(lpStructA_ + 9);
- if ( !v19
- || (v20 = *(_BYTE *)(lpStructA_ + 10)) == 0
- || (v21 = *(_BYTE *)(lpStructA_ + 11)) == 0
- || v19 > 0x18u
- || (v83 = v20, v73 = v21, lpPubKey = v19, v21 * v20 > 1 << (24 - v19)) )
- {
- v45 = (void *)dbgCall1(&unk_ED4454);
- v46 = (int)v85;
- dbgCall2(
- -886977338,
- 1526336850,
- (int)"k:\\8053\\backup\\crypt\\genkey.cpp",
- (int)"Crypto::GenKey",
- 90,
- v66,
- 262158,
- v45);
- if ( (unsigned int)v89 >= 0x10 )
- operator delete(v87);
- v89 = 15;
- dwBufferSizeB = 0;
- LOBYTE(v87) = 0;
- memDelete(&lpRandomDataBuffer);
- return (_DWORD *)v46;
- }
- v64 = &encryptedRandomKey;
- v63 = v73;
- v62 = (void *)v83;
- v22 = &v87;
- if ( (unsigned int)v89 >= 0x10 )
- v22 = v87;
- sha256Things(
- v22,
- dwBufferSizeB,
- (int)lpRandomBufferA,
- dwRandomDataBufferSize,
- 1 << lpPubKey,
- (int)v62,
- v63,
- (int)v64);
- lpRandomBufferA[2 * dwRandomDataBufferSize] = *(_BYTE *)(lpStructA_ + 9);
- lpRandomBufferA[2 * dwRandomDataBufferSize + 1] = *(_BYTE *)(lpStructA_ + 10);
- lpRandomBufferA[2 * dwRandomDataBufferSize + 2] = *(_BYTE *)(lpStructA_ + 11);
- }
- else
- {
- dwIterationsCount = *(_BYTE *)(lpStructA_ + 8);
- if ( !dwIterationsCount || dwIterationsCount > 0x18u )
- {
- v64 = (int *)dbgCall1(&unk_ED4454);
- v63 = 262158;
- v49 = &v57;
- v57 = -886977346;
- v58 = 1526336850;
- v59 = "k:\\8053\\backup\\crypt\\genkey.cpp";
- v60 = "Crypto::GenKey";
- v61 = 82;
- LABEL_71:
- v49[5] = v69;
- dbgCall2(v57, v58, (int)v59, (int)v60, v61, (int)v62, v63, v64);
- memDeleteIf(&v87);
- memDelete(&lpRandomDataBuffer);
- return v85;
- }
- v64 = &encryptedRandomKey;
- lpBufferA = &v87;
- if ( (unsigned int)v89 >= 0x10 )
- lpBufferA = v87;
- sha256XorAgain(
- lpBufferA,
- dwBufferSizeB,
- (int)lpRandomBufferA,
- dwRandomDataBufferSize,
- 1 << dwIterationsCount,
- (int)v64);
- lpRandomBufferA[2 * dwRandomDataBufferSize] = *(_BYTE *)(lpStructA_ + 8);
- }
- }
- else
- {
- BYTE1(v86) = 2;
- vectorStuffB((int)&lpRandomDataBuffer, 2 * dwRandomDataBufferSize);
- lpRandomBufferA = lpRandomDataBuffer;
- v25 = &v87;
- if ( (unsigned int)v89 >= 0x10 )
- v25 = v87;
- sha256H_1000Times(
- (int)v25,
- dwBufferSizeB,
- (int)lpRandomDataBuffer,
- dwRandomDataBufferSize,
- (int)&encryptedRandomKey);
- }
- AES_set_encrypt_key(&encryptedRandomKey, 8 * dwRandomDataBufferSize, (char *)&v86 + 2);
- if ( !(Size & 0xF) )
- {
- v26 = (size_t)&lpRandomBufferA[Size];
- memcpy(&lpRandomBufferA[Size], (const void *)(*(_DWORD *)v77 + 1), Size);
- dwRandomDataBufferSize = Size;
- if ( Size )
- {
- v27 = v26 - 8;
- v28 = ((Size - 1) >> 4) + 1;
- do
- {
- *(_DWORD *)(v27 + 8) ^= *(_DWORD *)(v27 - 8);
- v29 = (_DWORD *)(v27 + 16);
- *(_DWORD *)(v27 + 12) ^= *(_DWORD *)(v27 - 4);
- *v29 ^= *(_DWORD *)v27;
- *(_DWORD *)(v27 + 20) ^= *(_DWORD *)(v27 + 4);
- AES_encrypt(v27 + 8, v27 + 8, (char *)&v86 + 2);
- v27 = (int)v29;
- --v28;
- }
- while ( v28 );
- lpRandomBufferA = lpRandomDataBuffer;
- }
- goto LABEL_45;
- }
- if ( Size != 24 )
- {
- v64 = (int *)dbgCall1(&unk_ED4454);
- v63 = 262158;
- v49 = &v57;
- v57 = -886977298;
- v58 = 1526336850;
- v59 = "k:\\8053\\backup\\crypt\\genkey.cpp";
- v60 = "Crypto::GenKey";
- v61 = 130;
- goto LABEL_71;
- }
- v94 = *((_DWORD *)lpRandomBufferA + 2);
- v95 = *((_DWORD *)lpRandomBufferA + 3);
- v30 = *(_DWORD *)v77;
- v96 = *((_DWORD *)lpRandomBufferA + 4);
- v97 = *((_DWORD *)lpRandomBufferA + 5);
- v94 ^= *(_DWORD *)(v30 + 1);
- v95 ^= *(_DWORD *)(v30 + 5);
- v96 ^= *(_DWORD *)(v30 + 9);
- v97 ^= *(_DWORD *)(v30 + 13);
- AES_encrypt(&v94, &v94, (char *)&v86 + 2);
- v31 = (int)(lpRandomBufferA + 24);
- *(_DWORD *)v31 = v94;
- *(_DWORD *)(v31 + 4) = v95;
- *(_DWORD *)(v31 + 8) = v96;
- *(_DWORD *)(v31 + 12) = v97;
- *((_DWORD *)lpRandomBufferA + 10) = v94;
- *((_DWORD *)lpRandomBufferA + 11) = v95;
- v32 = *(_DWORD *)v77;
- *(_DWORD *)v31 ^= *(_DWORD *)(*(_DWORD *)v77 + 17);
- *(_DWORD *)(v31 + 4) ^= *(_DWORD *)(v32 + 21);
- AES_encrypt(lpRandomBufferA + 24, lpRandomBufferA + 24, (char *)&v86 + 2);
- dwRandomDataBufferSize = Size;
- LABEL_45:
- LOBYTE(v98) = 0;
- if ( (unsigned int)v89 >= 0x10 )
- operator delete(v87);
- LABEL_47:
- v33 = *(_DWORD *)(v84 + 4);
- pubKeyPtr = *(_DWORD *)v84;
- if ( *(_DWORD *)v84 == v33 )
- goto LABEL_57;
- BYTE1(v86) |= 1u;
- lpPubKey = pubKeyPtr;
- pubKeySTruct = d2i_X509(0, &lpPubKey, v33 - pubKeyPtr);
- v36 = pubKeySTruct;
- v84 = pubKeySTruct;
- if ( !pubKeySTruct )
- {
- v64 = (int *)dbgCall1(&unk_ED4364);
- v63 = 262157;
- v54 = &v57;
- v57 = -886977289;
- v58 = 1526336850;
- v59 = "k:\\8053\\backup\\crypt\\genkey.cpp";
- v60 = "Crypto::GenKey";
- v61 = 139;
- goto LABEL_85;
- }
- v37 = X509_get_pubkey(pubKeySTruct);
- v83 = v37;
- if ( !v37 )
- {
- X509_free(v36);
- v64 = (int *)dbgCall1(&unk_ED4364);
- v63 = 262157;
- v54 = &v57;
- v57 = -886977284;
- v58 = 1526336850;
- v59 = "k:\\8053\\backup\\crypt\\genkey.cpp";
- v60 = "Crypto::GenKey";
- v61 = 144;
- LABEL_85:
- v48 = (int)v85;
- v54[5] = v69;
- dbgCall2(v57, v58, (int)v59, (int)v60, v61, (int)v62, v63, v64);
- LABEL_86:
- if ( lpRandomBufferA )
- operator delete(lpRandomBufferA);
- return (_DWORD *)v48;
- }
- v38 = EVP_PKEY_CTX_new(v37, 0);
- v39 = (int *)v38;
- if ( !v38 )
- {
- EVP_PKEY_free(v83);
- X509_free(v84);
- v53 = (void *)dbgCall1(&unk_ED4364);
- dbgCall2(
- -886977277,
- 1526336850,
- (int)"k:\\8053\\backup\\crypt\\genkey.cpp",
- (int)"Crypto::GenKey",
- 151,
- v69,
- 262157,
- v53);
- memDelete(&lpRandomDataBuffer);
- return v85;
- }
- if ( EVP_PKEY_encrypt_init(v38) <= 0 )
- {
- EVP_PKEY_CTX_free(v39);
- EVP_PKEY_free(v83);
- X509_free(v84);
- v52 = (void *)dbgCall1(&unk_ED4364);
- dbgCall2(
- -886977270,
- 1526336850,
- (int)"k:\\8053\\backup\\crypt\\genkey.cpp",
- (int)"Crypto::GenKey",
- 158,
- v69,
- 262157,
- v52);
- memDelete(&lpRandomDataBuffer);
- return v85;
- }
- v74 = 0;
- v73 = v81 - (_DWORD)lpRandomBufferA;
- if ( EVP_PKEY_encrypt(v39, 0, &v74, lpRandomBufferA, v81 - (_DWORD)lpRandomBufferA) <= 0 )
- {
- EVP_PKEY_CTX_free(v39);
- EVP_PKEY_free(v83);
- X509_free(v84);
- v51 = (void *)dbgCall1(&unk_ED4364);
- dbgCall2(
- -886977262,
- 1526336850,
- (int)"k:\\8053\\backup\\crypt\\genkey.cpp",
- (int)"Crypto::GenKey",
- 166,
- v69,
- 262157,
- v51);
- memDelete(&lpRandomDataBuffer);
- return v85;
- }
- sub_4AFBC0(v74 + 20);
- LOBYTE(v98) = 2;
- v40 = EVP_sha1(v71, 0);
- if ( X509_digest(v84, v40) <= 0 )
- {
- EVP_PKEY_CTX_free(v39);
- EVP_PKEY_free(v83);
- X509_free(v84);
- v64 = (int *)dbgCall1(&unk_ED4364);
- v63 = 262157;
- v50 = &v57;
- v57 = -886977254;
- v58 = 1526336850;
- v59 = "k:\\8053\\backup\\crypt\\genkey.cpp";
- v60 = "Crypto::GenKey";
- v61 = 174;
- goto LABEL_75;
- }
- v41 = EVP_PKEY_encrypt(v39, v71 + 20, &v74, lpRandomBufferA, v73);
- v64 = v39;
- if ( v41 <= 0 )
- {
- EVP_PKEY_CTX_free(v64);
- EVP_PKEY_free(v83);
- X509_free(v84);
- v64 = (int *)dbgCall1(&unk_ED4364);
- v63 = 262157;
- v50 = &v57;
- v57 = -886977247;
- v58 = 1526336850;
- v59 = "k:\\8053\\backup\\crypt\\genkey.cpp";
- v60 = "Crypto::GenKey";
- v61 = 181;
- goto LABEL_75;
- }
- EVP_PKEY_CTX_free(v64);
- EVP_PKEY_free(v83);
- X509_free(v84);
- if ( v74 & 3 )
- {
- v64 = (int *)dbgCall1(&unk_ED4364);
- v63 = 262157;
- v50 = &v57;
- v57 = -886977241;
- v58 = 1526336850;
- v59 = "k:\\8053\\backup\\crypt\\genkey.cpp";
- v60 = "Crypto::GenKey";
- v61 = 187;
- LABEL_75:
- v50[5] = v69;
- dbgCall2(v57, v58, (int)v59, (int)v60, v61, (int)v62, v63, v64);
- memDelete(&v71);
- memDelete(&lpRandomDataBuffer);
- return v85;
- }
- vectorStuffB((int)&v71, v74 + 20);
- sub_648DC0(&lpRandomDataBuffer, &v71);
- LOBYTE(v98) = 0;
- memDelete(&v71);
- lpRandomBufferA = lpRandomDataBuffer;
- LABEL_57:
- if ( !BYTE1(v86) )
- {
- v64 = (int *)dbgCall1(&unk_ED4454);
- v63 = 262158;
- v54 = &v57;
- v57 = -886977236;
- v58 = 1526336850;
- v59 = "k:\\8053\\backup\\crypt\\genkey.cpp";
- v60 = "Crypto::GenKey";
- v61 = 192;
- goto LABEL_85;
- }
- sub_64E100((char *)&v86 + 1);
- v42 = v81;
- BYTE1(v86) = ((unsigned int)(v81 - (_DWORD)lpRandomBufferA) >> 2) - 1;
- sub_64E100((char *)&v86 + 1);
- vectorStuffA(v79, *(void **)(v79 + 4), lpRandomBufferA, v42, v75);
- v98 = -1;
- if ( lpRandomBufferA )
- {
- operator delete(lpRandomBufferA);
- lpRandomDataBuffer = 0;
- v81 = 0;
- v82 = 0;
- }
- lpStructA_ = v75;
- ++v72;
- v12 = v70 + 36;
- v70 += 36;
- }
- while ( v72 < (*(_DWORD *)(v75 + 16) - *(_DWORD *)(v75 + 12)) / 36 );
- if ( !(_BYTE)v86 )
- {
- v5 = v85;
- goto LABEL_90;
- }
- Src = 1028;
- if ( !genRandomData(&lpRandom16Buffer, 16, 1) )// Generate 16 bytes of random data
- {
- v43 = (void *)dbgCall1(&unk_ED4454);
- dbgCall2(
- -886977225,
- 1526336850,
- (int)"k:\\8053\\backup\\crypt\\genkey.cpp",
- (int)"Crypto::GenKey",
- 203,
- v69,
- 262158,
- v43);
- return v85;
- }
- AES_set_encrypt_key(*(_DWORD *)v77 + 1, 8 * dwRandomDataBufferSize, (char *)&v86 + 2);
- AES_encrypt(&lpRandom16Buffer, (char *)&encryptedRandomKey + 2, (char *)&v86 + 2);
- sha256H_1000Times((int)&encryptedRandomKey + 2, 16, (int)&lpRandom16Buffer, 16, (int)&encryptedRandomKey + 2);// encrypetdRandomKey = hashedkey
- v55 = v79;
- sub_C2FCE0(v79, *(void **)(v79 + 4), &Src, (size_t)&v93, v75);
- v5 = v85;
- LABEL_91:
- LOBYTE(v86) = -1;
- stdStuff((int)&v75, *(void **)(v55 + 4), 1u, (int)&v86);
- sub_653970(v55, v65);
- v56 = (volatile signed __int32 *)dword_12635BC;
- *v5 = dword_12635BC;
- if ( v56 )
- _InterlockedExchangeAdd(v56, 1u);
- return v5;
- }
Add Comment
Please, Sign In to add comment