Advertisement
Guest User

hash man

a guest
Jul 18th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.99 KB | None | 0 0
  1. int __cdecl sub_82AFC0(int a1, int a2)
  2. {
  3. int v2; // ebx@1
  4. int v3; // esi@1
  5. int result; // eax@2
  6. unsigned int v5; // esi@5
  7. int v6; // edx@10
  8. int v7; // esi@10
  9. signed int v8; // eax@10
  10. int v9; // ecx@10
  11. int AnotherHash; // edi@10
  12. unsigned int v11; // ecx@11
  13. unsigned int v12; // ecx@11
  14. int v13; // edi@13
  15. int v14; // ecx@13
  16. int v15; // eax@13
  17. int v16; // [sp+8h] [bp-8h]@10
  18. int v17; // [sp+18h] [bp+8h]@10
  19. int v18; // [sp+1Ch] [bp+Ch]@10
  20. int Hash; // [sp+1Ch] [bp+Ch]@11
  21.  
  22. v2 = a1;
  23. v3 = *(_DWORD *)(a1 + 16);
  24. if ( !*(_BYTE *)(a1 + 6) )
  25. {
  26. result = sub_81E3B0(a1, a2 - 16, -1);
  27. if ( result )
  28. return result;
  29. goto LABEL_10;
  30. }
  31. *(_BYTE *)(a1 + 6) = 0;
  32. if ( !*(_BYTE *)(**(_DWORD **)v3 + 6) )
  33. {
  34. *(_DWORD *)(a1 + 20) = *(_DWORD *)(v3 + 12);
  35. LABEL_10:
  36. v16 = ***(_DWORD ***)(a1 + 16) + 20 - *(_DWORD *)(***(_DWORD ***)(a1 + 16) + 20);
  37. v17 = (a1 + *(_DWORD *)(a1 + 12) + 44) ^ *(_DWORD *)(a1 + *(_DWORD *)(a1 + 12) + 44);
  38. v6 = *(_DWORD *)(v16 + 40);
  39. v7 = *(_BYTE *)(v16 + 80)
  40. + ((*(_BYTE *)(v16 + 83) + ((*(_BYTE *)(v16 + 82) + (*(_BYTE *)(v16 + 81) << 8)) << 8)) << 8);
  41. v8 = *(_DWORD *)(v16 + 52);
  42. v9 = *(_DWORD *)(v16 + 60);
  43. v18 = -1395309893 * v6 - 1838748549 * v7 - 1993746777 * v9 - 1125194579 * v8;
  44. AnotherHash = 476035360 * v6 + 1546808719 * v9 - 706264423 * v8 - 2088292391 * v7;
  45. if ( v8 <= 8 ) // calculate from proto size members sizek, sizep, etc
  46. {
  47. Hash = AnotherHash ^ v18;
  48. }
  49. else
  50. {
  51. v11 = *(_DWORD *)(v16 + 36) + 4 * ((v18 + 4) % (unsigned int)(v8 - 4));
  52. Hash = ((unsigned int)(v17 * *(_DWORD *)(v16 + 36 + v11 + 4)) >> 26)
  53. + ((unsigned int)(v17 * *(_DWORD *)(v16 + 36 + v11 + 8)) >> 26)
  54. + ((unsigned int)(v17 * *(_DWORD *)(v11 + v16 + 36 + 12)) >> 26)
  55. + v18
  56. + ((unsigned int)(v17 * *(_DWORD *)(v16 + 36 + v11)) >> 26);
  57. v12 = *(_DWORD *)(v16 + 36) + 4 * ((AnotherHash + 4) % (unsigned int)(v8 - 4));
  58. AnotherHash += ((unsigned int)(v17 * *(_DWORD *)(v16 + 36 + v12 + 4)) >> 26)
  59. + ((unsigned int)(v17 * *(_DWORD *)(v12 + v16 + 36 + 8)) >> 26)
  60. + ((unsigned int)(v17 * *(_DWORD *)(v12 + v16 + 36 + 12)) >> 26)
  61. + ((unsigned int)(v17 * *(_DWORD *)(v16 + 36 + v12)) >> 26);
  62. }
  63. v13 = *(_DWORD *)(v16 + 72) * (AnotherHash | 1);
  64. v14 = __ROL4__(v13, 11);
  65. v15 = __ROR4__(v13, 7);
  66. if ( Hash != (v13 ^ v15 ^ v14) ) // Decrypt the hash from proto members and check if isnt same
  67. aB0grixozwxq0[-2] = (LPVOID)((unsigned int)aB0grixozwxq0[-2] | 0x200);
  68. return sub_8221A0(v2, (*(_DWORD *)(v2 + 16) - *(_DWORD *)(v2 + 36)) / 24);
  69. }
  70. v5 = v3 - *(_DWORD *)(a1 + 36) - 24;
  71. result = sub_81E310(a1, a2);
  72. if ( result )
  73. {
  74. result = *(_DWORD *)(*(_DWORD *)(a1 + 16) + 8);
  75. *(_DWORD *)(a1 + 8) = result;
  76. }
  77. if ( v5 >= 0x18 )
  78. goto LABEL_10;
  79. return result;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement