Skip to content

Instantly share code, notes, and snippets.

@sprite2005
Created March 9, 2012 12:57
Show Gist options
  • Save sprite2005/2006425 to your computer and use it in GitHub Desktop.
Save sprite2005/2006425 to your computer and use it in GitHub Desktop.
int __cdecl GenerateMachineHashFromString(int pInputString, unsigned int inputLength, int hashH, int hashL)
{
int result; // eax@17
int v30; // ST20_4@37
unsigned int v31; // ST1C_4@37
int v32; // ST28_4@37
int v33; // ST1C_4@37
int v34; // ST20_4@37
int v35; // ST28_4@37
int v36; // ST1C_4@37
int v37; // ST20_4@37
int v38; // ST28_4@37
int v39; // ST1C_4@37
int v40; // ST20_4@37
unsigned int v41; // ST1C_4@52
unsigned int v42; // ST28_4@52
unsigned int v43; // ST20_4@52
unsigned int v44; // ST1C_4@52
unsigned int v45; // ST28_4@52
unsigned int v46; // ST20_4@52
int v47; // [sp+Ch] [bp-20h]@1
int v51; // [sp+1Ch] [bp-10h]@1
unsigned int v52; // [sp+20h] [bp-Ch]@1
int v53; // [sp+28h] [bp-4h]@1
v52 = inputLength + *(_DWORD *)hashH - 559038737;
v53 = inputLength + *(_DWORD *)hashH - 559038737;
v51 = *(_DWORD *)hashL + v52;
v47 = pInputString;
while ( inputLength > 0xC )
{
v30 = v52
+ *(_BYTE *)(v47 + 4)
+ (*(_BYTE *)(v47 + 5) << 8)
+ (*(_BYTE *)(v47 + 6) << 16)
+ (*(_BYTE *)(v47 + 7) << 24);
v31 = v51
+ *(_BYTE *)(v47 + 8)
+ (*(_BYTE *)(v47 + 9) << 8)
+ (*(_BYTE *)(v47 + 10) << 16)
+ (*(_BYTE *)(v47 + 11) << 24);
v32 = (v53
+ *(_BYTE *)v47
+ (*(_BYTE *)(v47 + 1) << 8)
+ (*(_BYTE *)(v47 + 2) << 16)
+ (*(_BYTE *)(v47 + 3) << 24)
- v31) ^ (v31 >> 28) ^ 16 * v31;
v33 = v30 + v31;
v34 = (v30 - v32) ^ ((unsigned int)v32 >> 26) ^ (v32 << 6);
v35 = v33 + v32;
v36 = (v33 - v34) ^ ((unsigned int)v34 >> 24) ^ (v34 << 8);
v37 = v35 + v34;
v38 = (v35 - v36) ^ ((unsigned int)v36 >> 16) ^ (v36 << 16);
v39 = v37 + v36;
v40 = (v37 - v38) ^ ((unsigned int)v38 >> 13) ^ (v38 << 19);
v53 = v39 + v38;
v51 = (v39 - v40) ^ ((unsigned int)v40 >> 28) ^ 16 * v40;
v52 = v53 + v40;
inputLength -= 12;
v47 += 12;
}
switch ( inputLength )
{
case 0xCu:
v51 += *(_BYTE *)(v47 + 11) << 24;
goto LABEL_40;
case 0xBu:
LABEL_40:
v51 += *(_BYTE *)(v47 + 10) << 16;
goto LABEL_41;
case 0xAu:
LABEL_41:
v51 += *(_BYTE *)(v47 + 9) << 8;
goto LABEL_42;
case 9u:
LABEL_42:
v51 += *(_BYTE *)(v47 + 8);
goto LABEL_43;
case 8u:
LABEL_43:
v52 += *(_BYTE *)(v47 + 7) << 24;
goto LABEL_44;
case 7u:
LABEL_44:
v52 += *(_BYTE *)(v47 + 6) << 16;
goto LABEL_45;
case 6u:
LABEL_45:
v52 += *(_BYTE *)(v47 + 5) << 8;
goto LABEL_46;
case 5u:
LABEL_46:
v52 += *(_BYTE *)(v47 + 4);
goto LABEL_47;
case 4u:
LABEL_47:
v53 += *(_BYTE *)(v47 + 3) << 24;
goto LABEL_48;
case 3u:
LABEL_48:
v53 += *(_BYTE *)(v47 + 2) << 16;
goto LABEL_49;
case 2u:
LABEL_49:
v53 += *(_BYTE *)(v47 + 1) << 8;
goto LABEL_50;
case 1u:
LABEL_50:
v53 += *(_BYTE *)v47;
goto LABEL_52;
case 0u:
result = v51;
*(_DWORD *)hashH = v51;
*(_DWORD *)hashL = v52;
break;
default:
LABEL_52:
v41 = (v52 ^ v51) - ((v52 >> 18) ^ (v52 << 14));
v42 = (v41 ^ v53) - ((v41 >> 21) ^ (v41 << 11));
v43 = (v42 ^ v52) - ((v42 >> 7) ^ (v42 << 25));
v44 = (v43 ^ v41) - ((v43 >> 16) ^ (v43 << 16));
v45 = (v44 ^ v42) - ((v44 >> 28) ^ 16 * v44);
v46 = (v45 ^ v43) - ((v45 >> 18) ^ (v45 << 14));
*(_DWORD *)hashH = (v46 ^ v44) - ((v46 >> 8) ^ (v46 << 24));
result = hashL;
*(_DWORD *)hashL = v46;
break;
}
return result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment