Pushok

Trigger Bot (Vector scanning)

Feb 17th, 2012
743
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.92 KB | None | 0 0
  1. #include <iostream>
  2. #include <Windows.h>
  3. #include <TlHelp32.h>
  4. #include <tchar.h>
  5. #include <string>
  6.  
  7. #define CLIENT_MODULE "client.dll"
  8. #define ENGINE_MODULE "engine.dll"
  9.  
  10. #define AIM_OFFSET 0x3EFCBC
  11. #define LOCAL_NAME_OFFSET 0x003CE3AC
  12.  
  13. #define TRIGGERBOT_MAX_LENGTH 1700.0
  14.  
  15. #define STRUCT_OFFSET 0x007390A8
  16. #define STRUCT_SIZE 0x140
  17. #define MIN_ID 0
  18. #define MAX_ID 64
  19.  
  20. #define ORIGIN_OFFSET 0x60
  21. #define TEAM_OFFSET 0x58
  22. #define NAME_OFFSET 0x38
  23. #define HEALTH_OFFSET 0x5C
  24. #define INGAME_OFFSET 0x28 //Useless but maybe needed ;)
  25.  
  26. #define PLAYER_TRUE_WIDTH 26
  27. #define PLAYER_TRUE_HEIGHT 72
  28.  
  29. #define PLAYER_HEIGHT ( PLAYER_TRUE_HEIGHT + 5 )
  30. #define PLAYER_WIDTH ( PLAYER_TRUE_WIDTH - 8 )
  31.  
  32. struct PlayerProfile
  33. {
  34.  
  35.     DWORD TorseHeight;
  36.     DWORD NeckHeight;
  37.  
  38.     DWORD HeadTop;
  39.  
  40.     DWORD TorseWidth;
  41.     DWORD HeadWidth;
  42.  
  43. } ppStand = { PLAYER_TRUE_HEIGHT - 5, PLAYER_HEIGHT - ( PLAYER_TRUE_HEIGHT - 5 ), PLAYER_HEIGHT, 16, 8 };
  44.  
  45. BOOL FindProcessByName( TCHAR* ProcessName, PROCESSENTRY32* processEntry )
  46. {
  47.     HANDLE hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, NULL );
  48.      
  49.     if( Process32First( hSnapshot, processEntry ) )
  50.     {
  51.         do
  52.         {
  53.             if( !_tcscmp( processEntry->szExeFile, ProcessName ) )
  54.             {
  55.                 CloseHandle( hSnapshot );
  56.                 return TRUE;
  57.             }
  58.         } while ( Process32Next( hSnapshot, processEntry ) );
  59.     }
  60.  
  61.     CloseHandle( hSnapshot );
  62.     return FALSE;
  63. }
  64.  
  65. BOOL FindModuleByName( TCHAR* ModuleName, MODULEENTRY32* moduleEntry, DWORD dwProcessId )
  66. {
  67.     HANDLE hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwProcessId );
  68.  
  69.     if( hSnapshot == INVALID_HANDLE_VALUE )
  70.     {
  71.         std::wcout << L"Something went wrong with ToolHelp func. Code: " << GetLastError( ) << L"\n";
  72.         return FALSE;
  73.     }
  74.  
  75.     if( Module32First( hSnapshot, moduleEntry ) )
  76.     {
  77.         do
  78.         {
  79.             if( !_tcscmp( moduleEntry->szModule, ModuleName ) )
  80.             {
  81.                 return TRUE;
  82.             }
  83.         } while( Module32Next( hSnapshot, moduleEntry ) );
  84.     }
  85.     else
  86.     {
  87.         std::wcout << L"Could not find first module. " <<  GetLastError() << "\n";
  88.     }
  89.  
  90.     CloseHandle( hSnapshot );
  91.     return FALSE;
  92. }
  93.  
  94. inline float DegToRad( float fAng )
  95. {
  96.     return fAng * 3.14159265 / 180;
  97. }
  98.  
  99. inline float VecDist( float* fVec1, float* fVec2 )
  100. {
  101.     return sqrt( pow( fVec1[0] - fVec2[0] , 2 ) + pow( fVec1[1] - fVec2[1] , 2 ) + pow( fVec1[2] - fVec2[2] , 2 ) );
  102. }
  103.  
  104. inline bool IsInBox( float* fPoint, float* fCubeCenter, float fHeight, float fWidth )
  105. {
  106.     if( ( fPoint[0] < fCubeCenter[0] + fWidth / 2 ) && ( fPoint[0] > fCubeCenter[0] - fWidth / 2 ) &&
  107.         ( fPoint[1] < fCubeCenter[1] + fWidth / 2 ) && ( fPoint[1] > fCubeCenter[1] - fWidth / 2 ) &&
  108.         ( fPoint[2] < fCubeCenter[2] + fHeight / 2 ) && ( fPoint[2] > fCubeCenter[2] - fHeight / 2 ) )
  109.     {
  110.         return true;
  111.     }
  112.  
  113.     return false;
  114. }
  115.  
  116. int main( )
  117. {
  118.     PROCESSENTRY32 processEntry;
  119.     MODULEENTRY32 clientModule;
  120.     MODULEENTRY32 engineModule;
  121.  
  122.     processEntry.dwSize = sizeof( PROCESSENTRY32 );
  123.     clientModule.dwSize = sizeof( MODULEENTRY32 );
  124.     engineModule.dwSize = sizeof( MODULEENTRY32 );
  125.  
  126.     if( FindProcessByName( _T( "hl2.exe" ), &processEntry ) )
  127.     {
  128.         HANDLE hProcess = OpenProcess( PROCESS_VM_READ, FALSE, processEntry.th32ProcessID );
  129.  
  130.         if( hProcess != INVALID_HANDLE_VALUE )
  131.         {
  132.             if( FindModuleByName( _T( CLIENT_MODULE ), &clientModule, processEntry.th32ProcessID ) &&
  133.                 FindModuleByName( _T( ENGINE_MODULE ), &engineModule, processEntry.th32ProcessID ) )
  134.             {
  135.                 DWORD* dwRadarAddr = reinterpret_cast< DWORD* >( clientModule.modBaseAddr + STRUCT_OFFSET );
  136.                 DWORD* dwAimAddr = reinterpret_cast< DWORD* >( engineModule.modBaseAddr + AIM_OFFSET );
  137.                 DWORD* dwLocalNameAddrPtr = reinterpret_cast< DWORD* >( engineModule.modBaseAddr + LOCAL_NAME_OFFSET );
  138.                
  139.                 DWORD dwLocalNameAddr;
  140.                 DWORD dwNewRadar;
  141.  
  142.                 if( ReadProcessMemory( hProcess, dwRadarAddr, &dwNewRadar, sizeof( DWORD ), NULL ) )
  143.                 {
  144.                     CHAR szLocalName[127];
  145.  
  146.                     if( ReadProcessMemory( hProcess, dwLocalNameAddrPtr, &dwLocalNameAddr, sizeof( DWORD ), NULL ) )
  147.                     {
  148.                         if( !ReadProcessMemory( hProcess, reinterpret_cast< DWORD* >( dwLocalNameAddr ), szLocalName, sizeof( szLocalName ), NULL ) )
  149.                         {
  150.                             std::cout << "Could not read local player name. " << GetLastError( ) << "\n";
  151.                             std::cout << (DWORD*)engineModule.modBaseAddr << " " << dwLocalNameAddr << "\n";
  152.  
  153.                             getchar();
  154.                             return 1;
  155.                         }
  156.                         else
  157.                         {
  158.                             std::cout << szLocalName << "\n";
  159.                         }
  160.                     }
  161.  
  162.                     CHAR szNameBuffer[127];
  163.  
  164.                     DWORD dwHealthAddr;
  165.                     DWORD dwTeamAddr;
  166.                     DWORD dwNameAddr;
  167.                     DWORD dwOriginAddr;
  168.  
  169.                     DWORD dwLocalTeam;
  170.                     DWORD dwLocalHealth;
  171.                     DWORD dwLocalId = -1;
  172.  
  173.                     DWORD dwPlayerTeam;
  174.                     DWORD dwPlayerHealth;
  175.  
  176.                     float fPlayerOrigin[3];
  177.  
  178.                     float fLocalOrigin[3];
  179.                     float fLocalAimAngles[3];
  180.  
  181.                     while( true )
  182.                     {
  183.                         Sleep( 1 );
  184.  
  185.                         if( !ReadProcessMemory( hProcess, reinterpret_cast< LPVOID >( dwAimAddr ), fLocalAimAngles, sizeof( float[3] ), NULL ) )
  186.                         {
  187.                             std::cout << "Could not read local aim angles.\n";
  188.  
  189.                             getchar();
  190.                             return 1;
  191.                         }
  192.  
  193.                         for( int i = 0; i < 32; i++ )
  194.                         {
  195.                             dwHealthAddr = dwNewRadar + i * STRUCT_SIZE + HEALTH_OFFSET;
  196.                             dwTeamAddr = dwNewRadar + i * STRUCT_SIZE + TEAM_OFFSET;
  197.                             dwNameAddr = dwNewRadar + i * STRUCT_SIZE + NAME_OFFSET;
  198.                             dwOriginAddr = dwNewRadar + i * STRUCT_SIZE + ORIGIN_OFFSET;
  199.  
  200.                             if( ReadProcessMemory( hProcess, reinterpret_cast< LPVOID >( dwNameAddr ), szNameBuffer, sizeof( szNameBuffer ), NULL ) )
  201.                             {
  202.                                 if( !strcmp( szLocalName, szNameBuffer ) )
  203.                                 {
  204.                                     dwLocalId = i;
  205.                                    
  206.                                     ReadProcessMemory( hProcess, reinterpret_cast< LPVOID >( dwTeamAddr ), &dwLocalTeam, sizeof( DWORD ), NULL );
  207.                                     ReadProcessMemory( hProcess, reinterpret_cast< LPVOID >( dwHealthAddr ), &dwLocalHealth, sizeof( DWORD ), NULL );
  208.                                     ReadProcessMemory( hProcess, reinterpret_cast< LPVOID >( dwOriginAddr ), fLocalOrigin, sizeof( float[3] ), NULL );
  209.  
  210.                                     break;
  211.                                 }
  212.                             }
  213.                         }
  214.  
  215.                         if( dwLocalId == -1 )
  216.                         {
  217.                             std::cout << "Could not find player\n";
  218.                             getchar();
  219.  
  220.                             return 1;
  221.                         }
  222.  
  223.                         if( dwLocalHealth == 0 )
  224.                         {
  225.                             continue;
  226.                         }
  227.  
  228.                         for( int i = 1; i < 32; i++ )
  229.                         {
  230.                             bool bBreakCycle = false;
  231.                             float fPoint[3] = { 0 };
  232.  
  233.                             if( i == dwLocalId )
  234.                             {
  235.                                 continue;
  236.                             }
  237.  
  238.                             dwHealthAddr = dwNewRadar + i * STRUCT_SIZE + HEALTH_OFFSET;
  239.                             dwTeamAddr = dwNewRadar + i * STRUCT_SIZE + TEAM_OFFSET;
  240.                             dwOriginAddr = dwNewRadar + i * STRUCT_SIZE + ORIGIN_OFFSET;
  241.  
  242.                             ReadProcessMemory( hProcess, reinterpret_cast< LPVOID >( dwTeamAddr ), &dwPlayerTeam, sizeof( DWORD ), NULL );
  243.                            
  244.                             if( dwPlayerTeam != dwLocalTeam )
  245.                             {
  246.                                 ReadProcessMemory( hProcess, reinterpret_cast< LPVOID >( dwHealthAddr ), &dwPlayerHealth, sizeof( DWORD ), NULL );
  247.                            
  248.                                 if( dwPlayerHealth != 0 )
  249.                                 {
  250.                                     ReadProcessMemory( hProcess, reinterpret_cast< LPVOID >( dwOriginAddr ), fPlayerOrigin, sizeof( float[3] ), NULL );
  251.  
  252.                                     fPlayerOrigin[2] -= PLAYER_TRUE_HEIGHT;
  253.                                     //fPlayerOrigin[2] += PLAYER_HEIGHT;
  254.  
  255.                                     if( VecDist( fLocalOrigin, fPlayerOrigin ) < TRIGGERBOT_MAX_LENGTH )
  256.                                     {
  257.                                         for( float f = 1; f < TRIGGERBOT_MAX_LENGTH; f++ )
  258.                                         {
  259.                                             fPoint[0] = fLocalOrigin[0] + cos( DegToRad( fLocalAimAngles[1] ) ) * f;
  260.                                             fPoint[1] = fLocalOrigin[1] + sin( DegToRad( fLocalAimAngles[1] ) ) * f;
  261.                                             fPoint[2] = fLocalOrigin[2] + sin( DegToRad( fLocalAimAngles[0] * -1 ) ) * f;
  262.  
  263.                                             float fHeadPos[3] = { fPlayerOrigin[0], fPlayerOrigin[1], fPlayerOrigin[2] + ppStand.TorseHeight + (float)( ppStand.NeckHeight ) / 2 };
  264.                                             float fTorsePos[3] = { fPlayerOrigin[0], fPlayerOrigin[1], fPlayerOrigin[2] + (float)ppStand.TorseHeight / 2 };
  265.  
  266.                                             if( IsInBox( fPoint, fHeadPos, ppStand.NeckHeight, ppStand.HeadWidth ) ||
  267.                                                 IsInBox( fPoint, fTorsePos, ppStand.TorseHeight, ppStand.TorseWidth ) )
  268.                                             {
  269.                                                 mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 );
  270.                                                 Sleep( 50 );
  271.  
  272.                                                 mouse_event( MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 );
  273.                                                 Sleep( 25 );
  274.  
  275.                                                 bBreakCycle = true;
  276.  
  277.                                                 break;
  278.                                             }
  279.  
  280.                                             /*if( IsInBox( fPoint, fPlayerOrigin, PLAYER_HEIGHT, PLAYER_WIDTH ) )
  281.                                             {
  282.                                                 mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 );
  283.                                                 Sleep( 2 );
  284.                                                 mouse_event( MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 );
  285.  
  286.                                                 bBreakCycle = true;
  287.  
  288.                                                 break;
  289.                                             }*/
  290.                                         }
  291.                                     }
  292.                                 }
  293.                             }
  294.                         }
  295.                     }
  296.                 }
  297.                 else
  298.                 {
  299.                     std::cout << "Could not find radar addr.\n";
  300.                 }
  301.             }
  302.             else
  303.             {
  304.                 std::cout << "Could not find both modules.\n";
  305.             }
  306.         }
  307.         else
  308.         {
  309.             std::cout << "Could not open process.\n";
  310.         }
  311.     }
  312.     else
  313.     {
  314.         std::cout << "Could not find process.\n";
  315.     }
  316.  
  317.     getchar();
  318. }
Advertisement
Add Comment
Please, Sign In to add comment