Advertisement
Guest User

aobscan

a guest
Oct 24th, 2016
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.75 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <Windows.h>
  3.  
  4. int HexString2Word(LPSTR lpHex, LPWORD &lpArray)
  5. {
  6.     int dwSize = strlen(lpHex);
  7.     lpArray = new WORD[dwSize >> 1];
  8.     memset(lpArray, 0, dwSize);
  9.     for (int i = 0; i < dwSize; i++) {
  10.         auto j = lpHex[i];
  11.         if (j >= '0' && j <= '9')
  12.             j -= '0';
  13.         else if (j >= 'A' && j <= 'Z')
  14.             j -= 'A' - 10;
  15.         else if (j >= 'a' && j <= 'z')
  16.             j -= 'a' - 10;
  17.         else if (j == '?') {
  18.             lpArray[i++ >> 1] = 256;
  19.             continue;
  20.         }
  21.         if (!(i % 2))
  22.             lpArray[i >> 1] += 16 * j;
  23.         else
  24.             lpArray[i >> 1] += j;
  25.     }
  26.     return dwSize >> 1;
  27. }
  28.  
  29. void *aobscan(LPVOID lpMem, LPSTR lpHex, DWORD dwSize)
  30. {
  31.     LPWORD lpWord;
  32.     int dwWord = HexString2Word(lpHex, lpWord);
  33.     for (unsigned int i = 0; i < dwSize; i++) {
  34.         auto lpByte = &LPBYTE(lpMem)[i];
  35.         bool bIsFound = true;
  36.         for (int j = 0; j < dwWord; j++) {
  37.             if (lpByte[j] == lpWord[j] || lpWord[j] == 256)
  38.                 continue;
  39.             else
  40.                 bIsFound = false;
  41.         }
  42.         if (bIsFound)
  43.             return lpByte;
  44.     }
  45.     return 0;
  46. }
  47.  
  48. void aobmemset(LPSTR lpszModule, LPSTR lpScan, LPSTR lpPatch)
  49. {
  50.     HMODULE hModule = GetModuleHandleA(lpszModule);
  51.     if (hModule) {
  52.         auto pDos = (PIMAGE_DOS_HEADER)hModule;
  53.         auto pNt = (PIMAGE_NT_HEADERS)((DWORD)hModule + pDos->e_lfanew);
  54.         auto lpAddr = (LPBYTE)aobscan(hModule, lpScan, pNt->OptionalHeader.SizeOfImage);
  55.         if (lpAddr) {
  56.             LPWORD lpWord;
  57.             int dwSize = HexString2Word(lpPatch, lpWord);
  58.             DWORD dwCache;
  59.             VirtualProtect(lpAddr, dwSize, PAGE_EXECUTE_READWRITE, &dwCache);
  60.             for (int i = 0; i < dwSize; i++)
  61.                 if (lpWord[i] != 256)
  62.                     lpAddr[i] = lpWord[i];
  63.             VirtualProtect(lpAddr, dwSize, dwCache, &dwCache);
  64.         }
  65.     }
  66. }
  67.  
  68. int main()
  69. {
  70.     LoadLibraryA("engine.dll");
  71.     aobmemset("engine.dll", "7528e8????????50", "EB");
  72.     return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement