Guest User

QTS no. 22 - Dynamic Link Library Loader Class

a guest
Aug 23rd, 2010
558
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.30 KB | None | 0 0
  1. /*
  2. -----------------------------------------
  3. * Game hacking QTS ( Quickie Tip Series )
  4. * no. 22 - Dynamic Link Library Loader Class
  5. -----------------------------------------
  6. * Author: SEGnosis  - GHAnon.net
  7. * Thanks to:
  8. * bitterbanana      - No known site
  9. * Drunken Cheetah   - No known site
  10. * fatboy88      - No known site
  11. * Geek4Ever         - No known site
  12. * learn_more        - www.uc-forum.com
  13. * Novocaine         - http://ilsken.net/blog/?page_id=64
  14. * Philly0494        - No known site
  15. * Roverturbo        - www.uc-forum.com
  16. * SilentKarma       - www.halocoders.com - offline
  17. * Strife        - www.uc-forum.com
  18. * Wieter20      - No known site
  19. */
  20.  
  21. #ifndef H_LOADER
  22. #define H_LOADER
  23.  
  24.  
  25. #pragma comment( lib, "Psapi")
  26. #include <Windows.h>
  27. #include <shlwapi.h>
  28. #include <tlhelp32.h>
  29. #include <psapi.h>
  30.  
  31.  
  32. //----------------------------------//
  33.  
  34.  
  35. #define CREATE_THREAD_ACCESS ( PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ )
  36.  
  37.  
  38. //----------------------------------//
  39.  
  40.  
  41.  
  42. void Alert( char* szString )
  43. {
  44.     MessageBox( 0, szString, "Alert", MB_ICONINFORMATION );
  45. }
  46.  
  47.  
  48. class C_Library_Loader
  49. {
  50.     public:
  51.         C_Library_Loader();
  52.         ~C_Library_Loader();
  53.         C_Library_Loader( char* szpProcessName, char* szpLibrary );
  54.  
  55.         int GetTargetProcessIdFromProcName( char* szName );
  56.         BOOL LoadLibraryIntoProcess();
  57.     private:
  58.  
  59.         char m_szProcessName[ MAX_PATH ];
  60.         char m_szLibrary[ MAX_PATH ];
  61. };
  62.  
  63.  
  64. C_Library_Loader::C_Library_Loader()
  65. {
  66.  
  67. }
  68.  
  69. C_Library_Loader::~C_Library_Loader()
  70. {
  71.  
  72. }
  73.    
  74. C_Library_Loader::C_Library_Loader( char* szpProcessName, char* szpLibrary )
  75. {
  76.     strcpy( m_szProcessName, szpProcessName );
  77.     strcpy( m_szLibrary, szpLibrary );
  78. }
  79.  
  80. BOOL C_Library_Loader::LoadLibraryIntoProcess()
  81. {
  82.     DWORD dwID = GetTargetProcessIdFromProcName( m_szProcessName );
  83.  
  84.     if( !dwID )
  85.         return FALSE;
  86.  
  87.     HANDLE hProcess = OpenProcess( CREATE_THREAD_ACCESS, FALSE, dwID );
  88.        
  89.     if( hProcess != INVALID_HANDLE_VALUE )
  90.     {
  91.         LPVOID  lpvRemoteString,
  92.                     lpvLibraryAddress;
  93.  
  94.             lpvLibraryAddress   = ( LPVOID )GetProcAddress( GetModuleHandle( "kernel32.dll" ), "LoadLibraryA" );
  95.             lpvRemoteString     = ( LPVOID )VirtualAllocEx( hProcess, NULL, strlen( m_szLibrary ), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE );
  96.            
  97.             if( !lpvRemoteString )
  98.                 Alert( "Failed to allocate memory process" );
  99.             else
  100.             {
  101.                 WriteProcessMemory( hProcess, ( LPVOID )lpvRemoteString, m_szLibrary, strlen( m_szLibrary ), NULL );
  102.                 CreateRemoteThread( hProcess, NULL, NULL, ( LPTHREAD_START_ROUTINE )lpvLibraryAddress, ( LPVOID )lpvRemoteString, NULL, NULL );  
  103.             }
  104.  
  105.             CloseHandle( hProcess );
  106.  
  107.         return TRUE;
  108.     }
  109.  
  110.     return FALSE;
  111. }
  112.  
  113. int C_Library_Loader::GetTargetProcessIdFromProcName( char *szName )
  114. {
  115.     PROCESSENTRY32  ProcessSlot;
  116.     HANDLE          hProcess;
  117.     long            iID;
  118.  
  119.     ProcessSlot.dwSize = sizeof( PROCESSENTRY32 );
  120.    
  121.     hProcess = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
  122.  
  123.     if( hProcess == INVALID_HANDLE_VALUE)
  124.         Alert( "Failed to get process snapshot for process" );
  125.     else
  126.     {
  127.         iID = Process32First( hProcess, &ProcessSlot );
  128.  
  129.         while( iID )
  130.         {
  131.             if( strstr( ProcessSlot.szExeFile, szName ) )
  132.                 return ProcessSlot.th32ProcessID;
  133.  
  134.             iID                 = Process32Next( hProcess, &ProcessSlot );
  135.             ProcessSlot.dwSize  = sizeof( PROCESSENTRY32 );
  136.         }
  137.     }
  138.     return false;
  139. }
  140.  
  141.  
  142. #endif
Advertisement
Add Comment
Please, Sign In to add comment