Pushok

CS:S Players dump

Feb 9th, 2012
429
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.07 KB | None | 0 0
  1. #include <Windows.h>
  2. #include <TlHelp32.h>
  3. #include <iostream>
  4. #include <tchar.h>
  5. #include <mbstring.h>
  6.  
  7. #define MODULE_NAME "client.dll"
  8. #define ENGINE_MODULE "engine.dll"
  9.  
  10. #define STRUCT_OFFSET 0x00738098
  11. #define CLIENT_COUNT_OFFSET 0x0039B514
  12. #define CLIENT_COUNT_OFFSET2 0x1A0
  13. #define STRUCT_SIZE 0x140
  14. #define START_ID 0
  15. #define MAX_ID 32
  16. #define NAME_OFFSET 0x38
  17. #define HEALTH_OFFSET 0x5C
  18. #define INGAME_OFFSET 0x28
  19.  
  20. BOOL FindProcessByName( TCHAR* ProcessName, PROCESSENTRY32* processEntry )
  21. {
  22.     HANDLE hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, NULL );
  23.      
  24.     if( Process32First( hSnapshot, processEntry ) )
  25.     {
  26.         do
  27.         {
  28.             if( !_tcscmp( processEntry->szExeFile, ProcessName ) )
  29.             {
  30.                 CloseHandle( hSnapshot );
  31.                 return TRUE;
  32.             }
  33.         } while ( Process32Next( hSnapshot, processEntry ) );
  34.     }
  35.  
  36.     CloseHandle( hSnapshot );
  37.     return FALSE;
  38. }
  39.  
  40. BOOL FindModuleByName( TCHAR* ModuleName, MODULEENTRY32* moduleEntry, DWORD dwProcessId )
  41. {
  42.     HANDLE hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwProcessId );
  43.  
  44.     if( hSnapshot == INVALID_HANDLE_VALUE )
  45.     {
  46.         std::wcout << L"Something went wrong with ToolHelp func. Code: " << GetLastError( ) << L"\n";
  47.         return FALSE;
  48.     }
  49.  
  50.     if( Module32First( hSnapshot, moduleEntry ) )
  51.     {
  52.         do
  53.         {
  54.             if( !_tcscmp( moduleEntry->szModule, ModuleName ) )
  55.             {
  56.                 return TRUE;
  57.             }
  58.         } while( Module32Next( hSnapshot, moduleEntry ) );
  59.     }
  60.     else
  61.     {
  62.         std::wcout << L"Could not find first module. " <<  GetLastError() << "\n";
  63.     }
  64.  
  65.     CloseHandle( hSnapshot );
  66.     return FALSE;
  67. }
  68.  
  69. int main( )
  70. {
  71.     PROCESSENTRY32 processEntry;
  72.     MODULEENTRY32 clientModule;
  73.     MODULEENTRY32 engineModule;
  74.  
  75.     processEntry.dwSize = sizeof( PROCESSENTRY32 );
  76.     clientModule.dwSize = sizeof( MODULEENTRY32 );
  77.     engineModule.dwSize = sizeof( MODULEENTRY32 );
  78.  
  79.     if( FindProcessByName( _T( "hl2.exe" ), &processEntry ) )
  80.     {
  81.         HANDLE hProcess = OpenProcess( PROCESS_VM_READ, FALSE, processEntry.th32ProcessID );
  82.  
  83.         if( hProcess != INVALID_HANDLE_VALUE )
  84.         {
  85.             if( FindModuleByName( _T(MODULE_NAME), &clientModule, processEntry.th32ProcessID ) &&
  86.                 FindModuleByName( _T(ENGINE_MODULE), &engineModule, processEntry.th32ProcessID ) )
  87.             {
  88.                 DWORD dwAddress = reinterpret_cast< DWORD >( clientModule.modBaseAddr ) + STRUCT_OFFSET;
  89.                 DWORD dw2ndAddress;
  90.  
  91.                 DWORD dwEngAddress = reinterpret_cast< DWORD >( engineModule.modBaseAddr ) + CLIENT_COUNT_OFFSET;
  92.                 DWORD dw2ndEngAddress;
  93.  
  94.                 if( ReadProcessMemory( hProcess, reinterpret_cast< PVOID >( dwAddress ), &dw2ndAddress, sizeof( dw2ndAddress ), NULL ) &&
  95.                     ReadProcessMemory( hProcess, reinterpret_cast< PVOID >( dwEngAddress ), &dw2ndEngAddress, sizeof( dw2ndEngAddress ), NULL ) )
  96.                 {
  97.                     char szRadBase[] = "Radar base: ";
  98.                    
  99.                     CharToOemA( szRadBase, szRadBase );
  100.  
  101.                     std::cout << szRadBase << (DWORD*)dw2ndAddress << "\n";
  102.  
  103.                     DWORD dwTotalPlayers = 0;
  104.  
  105.                     if( !ReadProcessMemory( hProcess, reinterpret_cast< PVOID >( dw2ndEngAddress + CLIENT_COUNT_OFFSET2 ), &dwTotalPlayers, sizeof( dwTotalPlayers ), NULL ) )
  106.                     {
  107.                         std::cout << "Could not get players count. Set it to 64\n";
  108.  
  109.                         dwTotalPlayers = 64;
  110.                     }
  111.                     else
  112.                     {
  113.                         if( dwTotalPlayers <= 64 )
  114.                         {
  115.                             std::cout << "Client count: " << dwTotalPlayers << "\n\n";
  116.                         }
  117.                         else
  118.                         {
  119.                             dwTotalPlayers = 64;
  120.                             std::cout << "Total players > 64. Update offsets.\n";
  121.                         }
  122.                     }
  123.  
  124.                     for( DWORD i = 0; i < dwTotalPlayers; i++ )
  125.                     {
  126.                         DWORD dwNameOffset = dw2ndAddress + STRUCT_SIZE * i + NAME_OFFSET;
  127.                         DWORD dwHealthOffset = dw2ndAddress + STRUCT_SIZE * i + HEALTH_OFFSET;
  128.                         DWORD dwIngameOffset = dw2ndAddress + STRUCT_SIZE * i + INGAME_OFFSET;
  129.  
  130.                         CHAR szNameBuffer[128];
  131.                         DWORD dwHealthBuff;
  132.                         DWORD dwIngame = 0;
  133.  
  134.  
  135.                         if( ReadProcessMemory( hProcess, reinterpret_cast< PVOID >( dwIngameOffset ), &dwIngame, sizeof( dwIngame ), NULL ) )
  136.                         {
  137.                             if( !dwIngame )
  138.                             {
  139.                                 continue;
  140.                             }
  141.                         }
  142.                         else
  143.                         {
  144.                             std::cout << "Could not read ingame offset. Code: " << GetLastError( ) << "\n";
  145.                         }
  146.  
  147.                         if( ReadProcessMemory( hProcess, reinterpret_cast< PVOID >( dwNameOffset ), szNameBuffer, sizeof( szNameBuffer ), NULL ) )
  148.                         {
  149.                             CharToOemA( szNameBuffer, szNameBuffer );
  150.                         }
  151.                         else
  152.                         {
  153.                             std::cout << "Could not read name buffer! Code:" << GetLastError( ) << "\n";
  154.                         }
  155.  
  156.                         if( ReadProcessMemory( hProcess, reinterpret_cast< PVOID >( dwHealthOffset ), &dwHealthBuff, sizeof( dwHealthBuff ), NULL ) )
  157.                         {
  158.                             std::cout << i << ": " << szNameBuffer << "[" << dwHealthBuff << "]\n";
  159.                         }
  160.                         else
  161.                         {
  162.                             std::cout << "Could not read health state! Code:" << GetLastError( ) << "\n";
  163.                         }
  164.                     }
  165.                 }
  166.                 else
  167.                 {
  168.                     std::cout << "Could not find address! Code: " << GetLastError( ) << "\n";
  169.                 }
  170.             }
  171.             else
  172.             {
  173.                 std::cout << "Could not find module! Code:" << GetLastError( ) << "\n";
  174.             }
  175.         }
  176.     }
  177.     else
  178.     {
  179.         std::cout << "Could not find process! Code:" << GetLastError( ) << "\n";
  180.     }
  181.  
  182.     getchar();
  183. }
Add Comment
Please, Sign In to add comment