Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- -----------------------------------------
- * Game hacking QTS ( Quickie Tip Series )
- * no. 27 - Automatic pointer checking
- -----------------------------------------
- * Author: SEGnosis - GHAnon.net
- * Thanks to:
- * bitterbanana - No known site
- * Drunken Cheetah - No known site
- * fatboy88 - No known site
- * Geek4Ever - No known site
- * learn_more - www.uc-forum.com
- * Novocaine - http://ilsken.net/blog/?page_id=64
- * Philly0494 - No known site
- * Roverturbo - www.uc-forum.com
- * SilentKarma - www.halocoders.com - offline
- * Strife - www.uc-forum.com
- * Wieter20 - No known site
- */
- #ifndef H_USERDETOUR
- #define H_USERDETOUR
- //----------------------------------//
- #include <Windows.h>
- //----------------------------------//
- struct S_Auto_Pointer
- {
- DWORD* dwpClass;
- DWORD* dwpOffset;
- DWORD dwOffsetAmount;
- char* szpModule;
- DWORD dwBaseOffset;
- };
- //----------------------------------//
- class C_Memory_Manager
- {
- public:
- C_Memory_Manager();
- void AllocAutoPointer();
- void AppendAutoPointer( DWORD* dwpClass, char* szpModule, DWORD dwBaseOffset, DWORD dwOffsetAmount, ... );
- DWORD CheckPointer( DWORD* dwpClass );
- private:
- S_Auto_Pointer* m_pAutoPointer;
- DWORD m_dwAutoPointerAmount;
- }CMManager;
- C_Memory_Manager::C_Memory_Manager()
- {
- m_pAutoPointer = 0;
- m_dwAutoPointerAmount = 0;
- }
- //----------------------------------//
- void C_Memory_Manager::AllocAutoPointer()
- {
- if( m_pAutoPointer == 0 )
- m_pAutoPointer = new S_Auto_Pointer;
- else
- {
- S_Auto_Pointer* apTemp = new S_Auto_Pointer[ m_dwAutoPointerAmount + 1 ];
- memcpy( apTemp, m_pAutoPointer, sizeof( S_Auto_Pointer ) * m_dwAutoPointerAmount );
- delete[] m_pAutoPointer;
- m_pAutoPointer = apTemp;
- ZeroMemory( &m_pAutoPointer[ m_dwAutoPointerAmount ], sizeof( S_Auto_Pointer ) );
- }
- }
- void C_Memory_Manager::AppendAutoPointer( DWORD* dwpClass, char* szpModule, DWORD dwBaseOffset, DWORD dwOffsetAmount, ... )
- {
- AllocAutoPointer();
- m_pAutoPointer[ m_dwAutoPointerAmount ].dwpClass = dwpClass;
- char* szpMask = Strings._pattern( false, "%d", dwOffsetAmount );
- char szBuffer[ MAX_PATH ] = { 0 };
- m_pAutoPointer[ m_dwAutoPointerAmount ].dwBaseOffset = dwBaseOffset;
- m_pAutoPointer[ m_dwAutoPointerAmount ].dwOffsetAmount = dwOffsetAmount;
- m_pAutoPointer[ m_dwAutoPointerAmount ].dwpOffset = new DWORD[ dwOffsetAmount ];
- m_pAutoPointer[ m_dwAutoPointerAmount ].szpModule = Strings._sprintf( false, szpModule );
- va_list va_alist;
- va_start( va_alist, dwOffsetAmount );
- for( UINT i = 0; i < dwOffsetAmount; i++ )
- {
- DWORD dwVar = va_arg( va_alist, DWORD );
- m_pAutoPointer[ m_dwAutoPointerAmount ].dwpOffset[ i ] = dwVar;
- }
- m_dwAutoPointerAmount++;
- }
- DWORD C_Memory_Manager::CheckPointer( DWORD* dwpClass )
- {
- DWORD* dwpRet = 0;
- for( UINT i = 0; i < m_dwAutoPointerAmount; i++ )
- {
- if( m_pAutoPointer[ i ].dwpClass == dwpClass )
- {
- dwpRet = ( DWORD* )GetModuleHandle( m_pAutoPointer[ i ].szpModule );
- if( !dwpRet )
- break;
- dwpRet = ( DWORD* )( ( DWORD )dwpRet + m_pAutoPointer[ i ].dwBaseOffset );
- if( !( *dwpRet ) )
- break;
- for( UINT k = 0; k < m_pAutoPointer[ i ].dwOffsetAmount; k++ )
- dwpRet = ( DWORD* )( ( DWORD )*dwpRet + m_pAutoPointer[ i ].dwpOffset[ k ] );
- if( !( *dwpRet ) )
- break;
- }
- }
- *dwpClass = ( DWORD )*dwpRet;
- return ( DWORD )*dwpRet;
- }
- //----------------------------------//
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement