Advertisement
Guest User

no. 27 - Automatic pointer checking

a guest
Sep 12th, 2010
719
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.47 KB | None | 0 0
  1. /*
  2. -----------------------------------------
  3. * Game hacking QTS ( Quickie Tip Series )
  4. * no. 27 - Automatic pointer checking
  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.  
  22.  
  23.  
  24. #ifndef H_USERDETOUR
  25. #define H_USERDETOUR
  26.  
  27.  
  28. //----------------------------------//
  29.  
  30.  
  31. #include <Windows.h>
  32.  
  33.  
  34. //----------------------------------//
  35.  
  36.  
  37. struct S_Auto_Pointer
  38. {
  39.     DWORD* dwpClass;
  40.     DWORD* dwpOffset;
  41.     DWORD  dwOffsetAmount;
  42.  
  43.     char* szpModule;
  44.     DWORD dwBaseOffset;
  45. };
  46.  
  47.  
  48. //----------------------------------//
  49.  
  50.  
  51. class C_Memory_Manager
  52. {
  53.     public:
  54.         C_Memory_Manager();
  55.         void AllocAutoPointer();
  56.         void AppendAutoPointer( DWORD* dwpClass, char* szpModule, DWORD dwBaseOffset, DWORD dwOffsetAmount, ... );
  57.         DWORD CheckPointer( DWORD* dwpClass );
  58.     private:
  59.         S_Auto_Pointer* m_pAutoPointer;
  60.  
  61.         DWORD m_dwAutoPointerAmount;
  62. }CMManager;
  63.  
  64.  
  65. C_Memory_Manager::C_Memory_Manager()
  66. {
  67.     m_pAutoPointer = 0;
  68.     m_dwAutoPointerAmount = 0;
  69. }
  70.  
  71.  
  72. //----------------------------------//
  73.  
  74.  
  75. void C_Memory_Manager::AllocAutoPointer()
  76. {
  77.     if( m_pAutoPointer == 0 )
  78.         m_pAutoPointer = new S_Auto_Pointer;
  79.     else
  80.     {
  81.         S_Auto_Pointer* apTemp = new S_Auto_Pointer[ m_dwAutoPointerAmount + 1 ];
  82.         memcpy( apTemp, m_pAutoPointer, sizeof( S_Auto_Pointer ) * m_dwAutoPointerAmount );
  83.        
  84.         delete[] m_pAutoPointer;
  85.        
  86.         m_pAutoPointer = apTemp;
  87.        
  88.         ZeroMemory( &m_pAutoPointer[ m_dwAutoPointerAmount ], sizeof( S_Auto_Pointer ) );
  89.     }
  90. }
  91.  
  92. void C_Memory_Manager::AppendAutoPointer( DWORD* dwpClass, char* szpModule, DWORD dwBaseOffset, DWORD dwOffsetAmount, ... )
  93. {
  94.     AllocAutoPointer();
  95.    
  96.     m_pAutoPointer[ m_dwAutoPointerAmount ].dwpClass = dwpClass;
  97.  
  98.     char* szpMask = Strings._pattern( false, "%d", dwOffsetAmount );
  99.     char  szBuffer[ MAX_PATH ] = { 0 };
  100.  
  101.     m_pAutoPointer[ m_dwAutoPointerAmount ].dwBaseOffset    = dwBaseOffset;
  102.     m_pAutoPointer[ m_dwAutoPointerAmount ].dwOffsetAmount  = dwOffsetAmount;
  103.     m_pAutoPointer[ m_dwAutoPointerAmount ].dwpOffset       = new DWORD[ dwOffsetAmount ];
  104.     m_pAutoPointer[ m_dwAutoPointerAmount ].szpModule       = Strings._sprintf( false, szpModule );
  105.  
  106.     va_list va_alist;
  107.     va_start( va_alist, dwOffsetAmount );
  108.  
  109.     for( UINT i = 0; i < dwOffsetAmount; i++ )
  110.     {
  111.         DWORD dwVar = va_arg( va_alist, DWORD );
  112.         m_pAutoPointer[ m_dwAutoPointerAmount ].dwpOffset[ i ] = dwVar;
  113.     }
  114.    
  115.     m_dwAutoPointerAmount++;
  116. }
  117.  
  118. DWORD C_Memory_Manager::CheckPointer( DWORD* dwpClass )
  119. {
  120.     DWORD* dwpRet = 0;
  121.  
  122.     for( UINT i = 0; i < m_dwAutoPointerAmount; i++ )
  123.     {
  124.         if( m_pAutoPointer[ i ].dwpClass == dwpClass )
  125.         {
  126.             dwpRet = ( DWORD* )GetModuleHandle( m_pAutoPointer[ i ].szpModule );
  127.  
  128.             if( !dwpRet )
  129.                 break;
  130.  
  131.             dwpRet = ( DWORD* )( ( DWORD )dwpRet + m_pAutoPointer[ i ].dwBaseOffset );
  132.  
  133.             if( !( *dwpRet ) )
  134.                 break;
  135.  
  136.             for( UINT k = 0; k < m_pAutoPointer[ i ].dwOffsetAmount; k++ )
  137.                 dwpRet = ( DWORD* )( ( DWORD )*dwpRet + m_pAutoPointer[ i ].dwpOffset[ k ] );
  138.  
  139.             if( !( *dwpRet ) )
  140.                 break;
  141.         }
  142.     }
  143.  
  144.      *dwpClass = ( DWORD )*dwpRet;
  145.  
  146.      return ( DWORD )*dwpRet;
  147. }
  148.  
  149.  
  150. //----------------------------------//
  151.  
  152.  
  153. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement