Pushok

Vietcong patcher

Jan 29th, 2012
363
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.08 KB | None | 0 0
  1. // Just_a_Test.cpp: определяет точку входа для консольного приложения.
  2. //
  3.  
  4. #include "stdafx.h"
  5.  
  6. BOOL FindProcessByName( TCHAR* name, PROCESSENTRY32 &entry )
  7. {
  8.     entry.dwSize = sizeof( entry );
  9.  
  10.     HANDLE hTlHelp = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, GetCurrentProcessId() );
  11.  
  12.     if( Process32First( hTlHelp, &entry ) )
  13.     {
  14.         if( !_tcscmp( entry.szExeFile, name ) )
  15.         {
  16.             return TRUE;
  17.         }
  18.  
  19.         while( Process32Next( hTlHelp, &entry ) )
  20.         {
  21.             if( !_tcscmp( entry.szExeFile, name ) )
  22.             {
  23.                 return TRUE;
  24.             }
  25.         }
  26.     }
  27.  
  28.     if( hTlHelp != INVALID_HANDLE_VALUE )
  29.     {
  30.         CloseHandle( hTlHelp );
  31.     }
  32.  
  33.     return FALSE;
  34. }
  35.  
  36. BOOL FindModule( TCHAR* name, DWORD dwProcID, MODULEENTRY32 &entry )
  37. {
  38.     HANDLE hTlHelp = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwProcID );
  39.  
  40.     ZeroMemory( &entry, sizeof( entry ) );
  41.     entry.dwSize = sizeof( MODULEENTRY32 );
  42.  
  43.     if( Module32First( hTlHelp, &entry ) )
  44.     {
  45.         if( !_tcscmp( entry.szModule, name ) )
  46.         {
  47.             return TRUE;
  48.         }
  49.  
  50.         while( Module32Next( hTlHelp, &entry ) )
  51.         {
  52.             if( !_tcscmp( entry.szModule, name ) )
  53.             {
  54.                 return TRUE;
  55.             }
  56.         }
  57.     }
  58.  
  59.     if( hTlHelp != INVALID_HANDLE_VALUE )
  60.     {
  61.         CloseHandle( hTlHelp );
  62.     }
  63.  
  64.     return FALSE;
  65. }
  66.  
  67. enum ConsoleColors
  68. {
  69.     Color_Blue = 9,
  70.     Color_Green = 10,
  71.     Color_Red = 12,
  72.     Color_Yellow = 14,
  73.     Color_White = 15
  74. };
  75.  
  76. void SetConsoleColor( ConsoleColors color )
  77. {
  78.     SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), color );
  79. }
  80.  
  81. void DrawNewLines( int count )
  82. {
  83.     if( count > 0 )
  84.     {
  85.         while( count-- )
  86.         {
  87.             std::cout << "\n";
  88.         }
  89.     }
  90. }
  91.  
  92. DWORD FindSignature( UCHAR* chSig, UCHAR* chModule, DWORD dwModuleSize, DWORD dwSigLen )
  93. {
  94.     UCHAR *chMod = chModule;
  95.  
  96.     while( chMod < chModule + dwModuleSize - dwSigLen )
  97.     {
  98.         if( memcmp( chMod, chSig, dwSigLen ) == NULL )
  99.         {
  100.             return chMod - chModule;
  101.         }
  102.  
  103.         chMod++;
  104.     }
  105.  
  106.     return -1;
  107. }
  108.  
  109. int _tmain(int argc, _TCHAR* argv[])
  110. {
  111.     /*enum HackTypes { Hack_InfiniteAmmo, Hack_NoAmmo };
  112.  
  113.     bool bUseHacks = true;
  114.     bool bHacks[sizeof(HackTypes) / sizeof( int )];
  115.  
  116.     if( bUseHacks )
  117.     {
  118.         bHacks[ Hack_InfiniteAmmo ] = true;
  119.         bHacks[ Hack_NoAmmo ] = true;
  120.     }*/
  121.     bool bUnlimAmmo = true;
  122.     bool bNoAmmo = true;
  123.  
  124.     SetConsoleColor( Color_Blue );
  125.     std::cout << "Vietcong Hack Status: ";
  126.    
  127.     PROCESSENTRY32 ProcEntry;
  128.  
  129.     if( FindProcessByName( L"vietcong.exe", ProcEntry ) )
  130.     {
  131.         HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, ProcEntry.th32ProcessID );
  132.         MODULEENTRY32 mEntry;
  133.  
  134.         if( FindModule( L"game.dll", ProcEntry.th32ProcessID, mEntry ) )
  135.         {
  136.             SetConsoleColor( Color_Green );
  137.             std::wcout << L"[LOADED]";
  138.  
  139.             UCHAR *iModule = new UCHAR[mEntry.modBaseSize];
  140.            
  141.             ReadProcessMemory( hProcess, mEntry.modBaseAddr, iModule, mEntry.modBaseSize, NULL);
  142.  
  143.             UCHAR chSig[] = { 0x81, 0xEC, 0x28, 0x02, 0x00, 0x00, 0x53, 0x55, 0x56, 0x57, 0x68, 0x54 };
  144.  
  145.             int iIFaceOffset = FindSignature( chSig, (UCHAR*)iModule, mEntry.modBaseSize, sizeof( chSig ) );
  146.  
  147.             if( iIFaceOffset > 0 )
  148.             {
  149.                 UCHAR chUnlimAmmoSig[] = { 0x66, 0x29, 0x5C, 0x7E };
  150.                 int iUnlimAmmoOffs = FindSignature( chUnlimAmmoSig, (UCHAR*)(iModule + iIFaceOffset), mEntry.modBaseSize - iIFaceOffset, sizeof( chUnlimAmmoSig ) );
  151.  
  152.                 if( iUnlimAmmoOffs > 0 )
  153.                 {
  154.                     UCHAR chAmmoPatch[] = { 0x83, 0x6C, 0x7E, 0x3C, 0x00 };
  155.                     DWORD dwOldProtect;
  156.                    
  157.                     VirtualProtectEx( hProcess, mEntry.modBaseAddr + iIFaceOffset + iUnlimAmmoOffs, sizeof( chAmmoPatch ), PAGE_READWRITE, &dwOldProtect );
  158.                     WriteProcessMemory( hProcess, mEntry.modBaseAddr + iIFaceOffset + iUnlimAmmoOffs, chAmmoPatch, sizeof( chAmmoPatch ), NULL );
  159.                 }
  160.                 else
  161.                 {
  162.                     SetConsoleColor( Color_Red );
  163.                     std::wcout << L"\nCould not find ammo offset!";
  164.                 }
  165.             }
  166.             else
  167.             {
  168.                 SetConsoleColor( Color_Red );
  169.                 std::wcout << L"\nCould not find GAME_SAV_LOAD offset!";
  170.             }
  171.  
  172.             delete [] iModule;
  173.         }
  174.         else
  175.         {
  176.             SetConsoleColor( Color_Red );
  177.             std::cout << "[MDL NOT DETECTED]";
  178.         }
  179.     }
  180.     else
  181.     {
  182.         SetConsoleColor( Color_Red );
  183.         std::cout << "[NOT DETECTED]";
  184.     }
  185.  
  186.     getchar();
  187.     return 0;
  188. }
Advertisement
Add Comment
Please, Sign In to add comment