1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
| int __cdecl sub_C51160(int a1, int a2, int a3) { int v3; int *v5; int *v6; const BYTE *v7; BYTE *v8; int v9; const CHAR *v10; int v11; int v12; int v13; DWORD v14; __int64 v15; int v16; DWORD v17; char v18[176]; int v19[46]; char v20[8]; char v21[12]; DWORD dwBufLen; HCRYPTKEY phKey; DWORD pdwDataLen; char v25; HCRYPTHASH phHash; HCRYPTPROV phProv; int v28;
sub_C53620(a1, 32, 64, 1); v28 = 0; if ( (unsigned __int8)sub_C54FE0((char *)v19 + *(_DWORD *)(v19[0] + 4)) ) { v3 = sub_C51960((int)&dword_C821E8, (int)"无法打开输入文件: "); sub_C51930(v3, a1); sub_C54FC0(sub_C53210); v28 = -1; return sub_C55250(v19); } else { v16 = sub_C535E0(&v25); v5 = (int *)sub_C53FD0(v20); v13 = v5[1]; v12 = *v5; v6 = (int *)sub_C53F70(v19); sub_C51820(v21, *v6, v6[1], v12, v13, v16); LOBYTE(v28) = 1; sub_C56F90(v19); phProv = 0; phKey = 0; phHash = 0; if ( CryptAcquireContextA(&phProv, 0, 0, 0x18u, 0xF0000000) ) { if ( CryptCreateHash(phProv, 0x800Cu, 0, 0, &phHash) ) { v14 = sub_C58580(a3); v7 = (const BYTE *)sub_C57050(a3); CryptHashData(phHash, v7, v14, 0); if ( CryptDeriveKey(phProv, 0x660Eu, phHash, 0, &phKey) ) { pdwDataLen = sub_C58580(v21); dwBufLen = pdwDataLen + 16; sub_C58150(pdwDataLen + 16); v17 = dwBufLen; v8 = (BYTE *)sub_C57050(v21); if ( CryptEncrypt(phKey, 0, 1, 0, v8, &pdwDataLen, v17) ) { sub_C538A0(a2, 32, 64, 1); LOBYTE(v28) = 2; v15 = pdwDataLen; v9 = sub_C57050(v21); sub_C58C00(v18, v9, v15); sub_C56FD0(v18); v10 = (const CHAR *)sub_C56DC0(a1); sub_C5FD86(v10); v11 = sub_C51960((int)&unk_C82138, (int)"加密完成并删除原文件: "); sub_C51930(v11, a1); sub_C54FC0(sub_C53210); LOBYTE(v28) = 1; sub_C552B0(v18); } else { sub_C51960((int)&dword_C821E8, (int)"CryptEncrypt 失败"); sub_C54FC0(sub_C53210); } CryptDestroyKey(phKey); CryptDestroyHash(phHash); CryptReleaseContext(phProv, 0); LOBYTE(v28) = 0; sub_C54C00(v21); v28 = -1; return sub_C55250(v19); } else { sub_C51960((int)&dword_C821E8, (int)"CryptDeriveKey 失败"); sub_C54FC0(sub_C53210); CryptDestroyHash(phHash); CryptReleaseContext(phProv, 0); LOBYTE(v28) = 0; sub_C54C00(v21); v28 = -1; return sub_C55250(v19); } } else { sub_C51960((int)&dword_C821E8, (int)"CryptCreateHash 失败"); sub_C54FC0(sub_C53210); CryptReleaseContext(phProv, 0); LOBYTE(v28) = 0; sub_C54C00(v21); v28 = -1; return sub_C55250(v19); } } else { sub_C51960((int)&dword_C821E8, (int)"CryptAcquireContext 失败"); sub_C54FC0(sub_C53210); LOBYTE(v28) = 0; sub_C54C00(v21); v28 = -1; return sub_C55250(v19); } } }
|