fork download
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. typedef unsigned long ulong;
  5. typedef unsigned char uchar;
  6.  
  7. ulong rotr(unsigned long n, int s){
  8. return (n >> s) | (n << (32 - s));
  9. }
  10.  
  11. ulong hash_str(char* str, int len){
  12. ulong hash = 0;
  13.  
  14. do{
  15. /* Get current char */
  16. unsigned char currentChar = *str++;
  17. /* Get rid of lowercase shit */
  18. if(currentChar >= 97)
  19. currentChar -= 32;
  20. hash = currentChar + rotr(hash, 13);
  21. len--;
  22. }while(len);
  23.  
  24. return hash;
  25. }
  26.  
  27. ulong x65559(uchar* str){
  28. unsigned long hash = 0;
  29. int c;
  30.  
  31. while ((c = *str++))
  32. hash = c + (hash << 6) + (hash << 16) - hash;
  33.  
  34. return hash;
  35. }
  36.  
  37. int main(void) {
  38. // char str[] = "kernel32.dll";
  39. // char str[] = "k\x00e\x00r\x00n\x00e\x00l\x003\x002\x00.\x00d\x00l\x00l";
  40. char str[] = { 'k', 0, 'e', 0, 'r', 0, 'n', 0, 'e', 0, 'l', 0, '3', 0, '2', 0, '.', 0, 'd', 0, 'l', 0, 'l', 0 };
  41. int len = sizeof(str);
  42.  
  43. printf("hashed '%s' (length: %d) is %08X\n", str, len, hash_str(str, len));
  44. printf("x65559 hashes: %s is %08X", "BaseThreadInitThunk", x65559((uchar*) "BaseThreadInitThunk"));
  45.  
  46. return 0;
  47. }
  48.  
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
hashed 'k' (length: 24) is 6A4ABC5B
x65559 hashes: BaseThreadInitThunk is C4DD8953