Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Windows.h>
- #include <TlHelp32.h>
- #include <iostream>
- #include <tchar.h>
- #include <mbstring.h>
- #define MODULE_NAME "client.dll"
- #define ENGINE_MODULE "engine.dll"
- #define STRUCT_OFFSET 0x00738098
- #define CLIENT_COUNT_OFFSET 0x0039B514
- #define CLIENT_COUNT_OFFSET2 0x1A0
- #define STRUCT_SIZE 0x140
- #define START_ID 0
- #define MAX_ID 32
- #define NAME_OFFSET 0x38
- #define HEALTH_OFFSET 0x5C
- #define INGAME_OFFSET 0x28
- BOOL FindProcessByName( TCHAR* ProcessName, PROCESSENTRY32* processEntry )
- {
- HANDLE hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, NULL );
- if( Process32First( hSnapshot, processEntry ) )
- {
- do
- {
- if( !_tcscmp( processEntry->szExeFile, ProcessName ) )
- {
- CloseHandle( hSnapshot );
- return TRUE;
- }
- } while ( Process32Next( hSnapshot, processEntry ) );
- }
- CloseHandle( hSnapshot );
- return FALSE;
- }
- BOOL FindModuleByName( TCHAR* ModuleName, MODULEENTRY32* moduleEntry, DWORD dwProcessId )
- {
- HANDLE hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwProcessId );
- if( hSnapshot == INVALID_HANDLE_VALUE )
- {
- std::wcout << L"Something went wrong with ToolHelp func. Code: " << GetLastError( ) << L"\n";
- return FALSE;
- }
- if( Module32First( hSnapshot, moduleEntry ) )
- {
- do
- {
- if( !_tcscmp( moduleEntry->szModule, ModuleName ) )
- {
- return TRUE;
- }
- } while( Module32Next( hSnapshot, moduleEntry ) );
- }
- else
- {
- std::wcout << L"Could not find first module. " << GetLastError() << "\n";
- }
- CloseHandle( hSnapshot );
- return FALSE;
- }
- int main( )
- {
- PROCESSENTRY32 processEntry;
- MODULEENTRY32 clientModule;
- MODULEENTRY32 engineModule;
- processEntry.dwSize = sizeof( PROCESSENTRY32 );
- clientModule.dwSize = sizeof( MODULEENTRY32 );
- engineModule.dwSize = sizeof( MODULEENTRY32 );
- if( FindProcessByName( _T( "hl2.exe" ), &processEntry ) )
- {
- HANDLE hProcess = OpenProcess( PROCESS_VM_READ, FALSE, processEntry.th32ProcessID );
- if( hProcess != INVALID_HANDLE_VALUE )
- {
- if( FindModuleByName( _T(MODULE_NAME), &clientModule, processEntry.th32ProcessID ) &&
- FindModuleByName( _T(ENGINE_MODULE), &engineModule, processEntry.th32ProcessID ) )
- {
- DWORD dwAddress = reinterpret_cast< DWORD >( clientModule.modBaseAddr ) + STRUCT_OFFSET;
- DWORD dw2ndAddress;
- DWORD dwEngAddress = reinterpret_cast< DWORD >( engineModule.modBaseAddr ) + CLIENT_COUNT_OFFSET;
- DWORD dw2ndEngAddress;
- if( ReadProcessMemory( hProcess, reinterpret_cast< PVOID >( dwAddress ), &dw2ndAddress, sizeof( dw2ndAddress ), NULL ) &&
- ReadProcessMemory( hProcess, reinterpret_cast< PVOID >( dwEngAddress ), &dw2ndEngAddress, sizeof( dw2ndEngAddress ), NULL ) )
- {
- char szRadBase[] = "Radar base: ";
- CharToOemA( szRadBase, szRadBase );
- std::cout << szRadBase << (DWORD*)dw2ndAddress << "\n";
- DWORD dwTotalPlayers = 0;
- if( !ReadProcessMemory( hProcess, reinterpret_cast< PVOID >( dw2ndEngAddress + CLIENT_COUNT_OFFSET2 ), &dwTotalPlayers, sizeof( dwTotalPlayers ), NULL ) )
- {
- std::cout << "Could not get players count. Set it to 64\n";
- dwTotalPlayers = 64;
- }
- else
- {
- if( dwTotalPlayers <= 64 )
- {
- std::cout << "Client count: " << dwTotalPlayers << "\n\n";
- }
- else
- {
- dwTotalPlayers = 64;
- std::cout << "Total players > 64. Update offsets.\n";
- }
- }
- for( DWORD i = 0; i < dwTotalPlayers; i++ )
- {
- DWORD dwNameOffset = dw2ndAddress + STRUCT_SIZE * i + NAME_OFFSET;
- DWORD dwHealthOffset = dw2ndAddress + STRUCT_SIZE * i + HEALTH_OFFSET;
- DWORD dwIngameOffset = dw2ndAddress + STRUCT_SIZE * i + INGAME_OFFSET;
- CHAR szNameBuffer[128];
- DWORD dwHealthBuff;
- DWORD dwIngame = 0;
- if( ReadProcessMemory( hProcess, reinterpret_cast< PVOID >( dwIngameOffset ), &dwIngame, sizeof( dwIngame ), NULL ) )
- {
- if( !dwIngame )
- {
- continue;
- }
- }
- else
- {
- std::cout << "Could not read ingame offset. Code: " << GetLastError( ) << "\n";
- }
- if( ReadProcessMemory( hProcess, reinterpret_cast< PVOID >( dwNameOffset ), szNameBuffer, sizeof( szNameBuffer ), NULL ) )
- {
- CharToOemA( szNameBuffer, szNameBuffer );
- }
- else
- {
- std::cout << "Could not read name buffer! Code:" << GetLastError( ) << "\n";
- }
- if( ReadProcessMemory( hProcess, reinterpret_cast< PVOID >( dwHealthOffset ), &dwHealthBuff, sizeof( dwHealthBuff ), NULL ) )
- {
- std::cout << i << ": " << szNameBuffer << "[" << dwHealthBuff << "]\n";
- }
- else
- {
- std::cout << "Could not read health state! Code:" << GetLastError( ) << "\n";
- }
- }
- }
- else
- {
- std::cout << "Could not find address! Code: " << GetLastError( ) << "\n";
- }
- }
- else
- {
- std::cout << "Could not find module! Code:" << GetLastError( ) << "\n";
- }
- }
- }
- else
- {
- std::cout << "Could not find process! Code:" << GetLastError( ) << "\n";
- }
- getchar();
- }
Add Comment
Please, Sign In to add comment