Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <iostream>
- using namespace std;
- typedef unsigned int DWORD;
- typedef unsigned char BYTE;
- __int64 __fastcall GetUnk(__int64 a1, unsigned __int64 a2, unsigned int a3)//data*, len, salt
- {
- unsigned __int64 v3; // r9@1
- __int64 result; // rax@1
- int v5; // er8@2
- v3 = 0;
- result = a3;
- if (a2)
- {
- do
- {
- v5 = *(BYTE *)(v3++ + a1);
- result = ((unsigned int)(1025 * (v5 + result)) >> 6) ^ 1025 * (v5 + (DWORD)result);
- } while (v3 < a2);
- }
- return result;
- }
- __int64 __fastcall GetHash2(unsigned __int8 *a1, unsigned int a2)//data*, salt
- {
- BYTE* _indexes = new BYTE[256];
- for (int i = 0; i < 255; i++)
- _indexes[i] = i;
- unsigned int v2; // er10@1
- unsigned int v3; // er8@1
- unsigned __int8 *v4; // r9@1
- signed __int64 v5; // r9@3
- unsigned __int8 i; // al@3
- unsigned int v7; // er8@5
- int j; // eax@8
- __int64 v9; // rax@9
- unsigned int v10; // er8@9
- unsigned int v11; // edx@9
- unsigned int v12; // er8@12
- unsigned __int8 v13; // al@13
- v2 = 0;
- v3 = a2;
- v4 = a1;
- if (a1)
- {
- if (*a1 == 34)
- {
- v5 = (signed __int64)(a1 + 1);
- for (i = a1[1]; *(BYTE *)v5; i = *(BYTE *)v5)
- {
- if (i == 34)
- break;
- ++v5;
- v7 = 1025 * (_indexes[i] + v3);
- v3 = (v7 >> 6) ^ v7;
- }
- }
- else
- {
- if (!((unsigned __int8)a1 & 3))
- {
- for (j = *(DWORD *)a1; !((j - 16843009) & 0x80808080); j = *(DWORD *)v4)
- {
- v9 = *v4;
- v4 += 4;
- v10 = 1025 * (_indexes[v9] + v3);
- v11 = 1025
- * ((1025 * ((v10 ^ (v10 >> 6)) + _indexes[*(v4 - 3)]) ^ (1025
- * ((v10 ^ (v10 >> 6))
- + _indexes[*(v4 - 3)]) >> 6))
- + _indexes[*(v4 - 2)]);
- v3 = (1025 * ((v11 ^ (v11 >> 6)) + _indexes[*(v4 - 1)]) >> 6) ^ 1025
- * ((v11 ^ (v11 >> 6))
- + _indexes[*(v4 - 1)]);
- }
- }
- while (1)
- {
- v13 = *v4;
- if (!*v4)
- break;
- ++v4;
- v12 = 1025 * (_indexes[v13] + v3);
- v3 = (v12 >> 6) ^ v12;
- }
- }
- v2 = v3;
- }
- return v2;
- }
- __int64 GetHash(unsigned __int8 *data, unsigned int salt)//data*, salt
- {
- BYTE* _indexes = new BYTE[256];
- for (int i = 0; i < 255; i++)
- _indexes[i] = i;
- unsigned int v2; // er10@1
- unsigned int v3; // er8@1
- unsigned __int8 *v4; // r9@1
- signed __int64 v5; // r9@3
- unsigned __int8 i; // al@3
- unsigned int v7; // er8@5
- int j; // eax@8
- __int64 v9; // rax@9
- unsigned int v10; // er8@9
- unsigned int v11; // edx@9
- unsigned int v12; // er8@12
- unsigned __int8 v13; // al@13
- v2 = 0;
- v3 = salt;
- v4 = data;
- if (data)
- {
- if (*data == 34)
- {
- v5 = (signed __int64)(data + 1);
- for (i = data[1]; *(BYTE *)v5; i = *(BYTE *)v5)
- {
- if (i == 34)
- break;
- ++v5;
- v7 = 1025 * (_indexes[i] + v3);
- v3 = (v7 >> 6) ^ v7;
- }
- }
- else
- {
- if (!((unsigned __int8)data & 3))
- {
- for (j = *(DWORD *)data; !((j - 16843009) & 0x80808080); j = *(DWORD *)v4)
- {
- v9 = *v4;
- v4 += 4;
- v10 = 1025 * (_indexes[v9] + v3);
- v11 = 1025
- * ((1025 * ((v10 ^ (v10 >> 6)) + _indexes[*(v4 - 3)]) ^ (1025
- * ((v10 ^ (v10 >> 6))
- + _indexes[*(v4 - 3)]) >> 6))
- + _indexes[*(v4 - 2)]);
- v3 = (1025 * ((v11 ^ (v11 >> 6)) + _indexes[*(v4 - 1)]) >> 6) ^ 1025
- * ((v11 ^ (v11 >> 6))
- + _indexes[*(v4 - 1)]);
- }
- }
- while (1)
- {
- v13 = *v4;
- if (!*v4)
- break;
- ++v4;
- v12 = 1025 * (_indexes[v13] + v3);
- v3 = (v12 >> 6) ^ v12;
- }
- }
- v2 = v3;
- }
- return 32769 * ((9 * v2 >> 11) ^ 9 * v2);
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- char* _newText = "CREATE_VEHICLE";
- __int64 _result = GetHash2((unsigned char*)_newText, 0);
- // __int64 _result2 = GetHash((unsigned char*)_newText, 0);
- __int64 _result3 = GetUnk((long long)_newText, 14, 0);
- printf("%X8\r\n", _result);
- // printf("%X8\r\n", _result2);
- printf("%X8\r\n", _result3);
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement