Advertisement
Guest User

main.cpp -> 0xSA

a guest
Feb 8th, 2011
329
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.78 KB | None | 0 0
  1. /*
  2.     0xSA
  3.     By Michael
  4.     _________________
  5.  
  6.     Date: 08.02.2010
  7.     Time: 16:11
  8.     _________________
  9.  
  10.     http://forum.sa-mp.de
  11. */
  12.  
  13. // Includes
  14.  
  15. #include <Windows.h>
  16. #include <cstdio>
  17. #include <d3d9.h>
  18. #include <d3dx9.h>
  19. #include "menu.h"
  20.  
  21. // Pragma
  22.  
  23. #pragma once
  24. #pragma comment(lib, "d3d9.lib")
  25. #pragma comment(lib, "d3dx9.lib")
  26.  
  27. // Declarations
  28.  
  29. CD3DMenu menu(10, 40, 300, 500, "0xSA", VK_INSERT, L"Arial") ;
  30.  
  31. MENU_ENTRY health ;
  32. MENU_ENTRY armor ;
  33. MENU_ENTRY money ;
  34.  
  35. typedef HRESULT(__stdcall* tEndScene)(LPDIRECT3DDEVICE9) ;
  36.  
  37. tEndScene pEndScene ;
  38.  
  39. DWORD dwEndScene ;
  40.  
  41. int firstrun = 1 ;
  42.  
  43. // Functions
  44.  
  45. void *DetourFunc(BYTE *src, const BYTE *dst, const int len) {
  46.     BYTE *jmp = (BYTE*)malloc(len+5) ;
  47.     DWORD dwback ;
  48.  
  49.     VirtualProtect(src, len, PAGE_READWRITE, &dwback) ;
  50.     memcpy(jmp, src, len); jmp += len ;
  51.     jmp[0] = 0xE9 ;
  52.     *(DWORD*)(jmp+1) = (DWORD)(src+len - jmp) - 5 ;
  53.     src[0] = 0xE9 ;
  54.     *(DWORD*)(src+1) = (DWORD)(dst - src) - 5 ;
  55.     VirtualProtect(src, len, dwback, &dwback) ;
  56.  
  57.     return (jmp-len) ;
  58. }
  59.  
  60. bool bDataCompare(const BYTE* pData, const BYTE* bMask, const char* szMask) {
  61.     for(;*szMask;++szMask, ++pData, ++bMask)
  62.     if(*szMask=='x' && *pData != *bMask )
  63.     return false ;
  64.     return (*szMask) == NULL ;
  65. }
  66.  
  67. DWORD dwFindPattern(DWORD dwAddress, DWORD dwLen, BYTE *bMask, char * szMask) {
  68.     for(DWORD i=0; i < dwLen; i++)
  69.     if(bDataCompare((BYTE*)(dwAddress+i), bMask, szMask))
  70.     return (DWORD)(dwAddress+i) ;
  71.     return 0 ;
  72. }
  73.  
  74. // Hooks
  75.  
  76. HRESULT __stdcall hkEndScene(LPDIRECT3DDEVICE9 pDevice) {
  77.     if(firstrun != 0) {
  78.          menu.init(pDevice) ;
  79.  
  80.         health = menu.addMenuPointBool("Unl. HP", false) ;
  81.         armor = menu.addMenuPointBool("Unl. Armor", false) ;
  82.         money = menu.addMenuPointBool("Unl. Money", false) ;
  83.  
  84.         firstrun = 0 ;
  85.     }
  86.  
  87.     if(menu.entrys[health].valBool == true) {
  88.         *(float*)(*(DWORD*)0xB6F5F0 + 0x540) = 100.0f ;
  89.     }
  90.  
  91.     if(menu.entrys[armor].valBool == true) {
  92.         *(float*)(*(DWORD*)0xB6F5F0 + 0x548) = 100.0f ;
  93.     }
  94.  
  95.     if(menu.entrys[money].valBool == true) {
  96.         *(DWORD*)0xB7CE50 = 999999999 ;
  97.     }
  98.  
  99.     menu.heartbeat() ;
  100.  
  101.     return pEndScene(pDevice) ;
  102. }
  103.  
  104. // Initialise
  105.  
  106. void Init() {
  107.     HMODULE hmodule = NULL ;
  108.    
  109.     while(!hmodule) {
  110.         hmodule = GetModuleHandleA("d3d9.dll") ;
  111.         Sleep(100) ;
  112.     }
  113.  
  114.     DWORD* VTableStart = 0;
  115.     DWORD FoundPointer = dwFindPattern((DWORD)hmodule, 0x128000, (PBYTE)"\xC7\x06\x00\x00\x00\x00\x89\x86\x00\x00\x00\x00\x89\x86", "xx????xx????xx") ;
  116.  
  117.     memcpy(&VTableStart, (void*)(FoundPointer+2), 4) ;
  118.  
  119.     dwEndScene = (DWORD)VTableStart[42] ;
  120.     pEndScene = (tEndScene)DetourFunc((PBYTE) dwEndScene, (PBYTE)hkEndScene, 5) ;
  121. }
  122.  
  123. int WINAPI DllMain(HINSTANCE hinst, DWORD reason, LPVOID reserved) {
  124.     switch(reason) {
  125.     case DLL_PROCESS_ATTACH:
  126.         CreateThread(0, 0, (LPTHREAD_START_ROUTINE) Init, 0, 0, 0) ;
  127.         break ;
  128.     }
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement