Advertisement
Guest User

Untitled

a guest
Jul 18th, 2010
370
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.85 KB | None | 0 0
  1. /*
  2. -----------------------------------------
  3. * Operation 7 Netgame
  4. * Glitch detection kick bypass
  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. #ifndef H_GLITCHBYPASS
  23. #define H_GLITCHBYPASS
  24.  
  25.  
  26. //----------------------------------//
  27.  
  28.  
  29. #include <Windows.h>
  30.  
  31.  
  32. //----------------------------------//
  33.  
  34.  
  35. #define asm_JMP 0xE9
  36.  
  37.  
  38. void GBPassDetour();
  39.  
  40.  
  41. DWORD WINAPI GBPassThread( LPVOID );
  42.  
  43.  
  44. //----------------------------------//
  45.  
  46.  
  47. class C_GlitchBypass
  48. {
  49.     public:
  50.         C_GlitchBypass();
  51.         ~C_GlitchBypass();
  52.  
  53.         void    Begin();
  54.  
  55.         void    WriteDetour();
  56.  
  57.         DWORD   FindPattern( DWORD base, DWORD size, char pattern[], char mask[] );
  58.  
  59.  
  60.         DWORD           m_ulDetourAddress,
  61.                         m_ulReturnAddress,
  62.                         m_ulEsiRegister;
  63.        
  64.         BYTE            m_usEcx;
  65.  
  66.         bool            m_bEnabled;
  67.  
  68. }CGBPass;
  69.  
  70.  
  71. //----------------------------------//
  72.  
  73.  
  74. C_GlitchBypass::C_GlitchBypass()
  75. {
  76.     m_ulDetourAddress = 0;
  77.     m_ulReturnAddress = 0;
  78. }
  79.  
  80.  
  81. C_GlitchBypass::~C_GlitchBypass()
  82. {
  83.  
  84. }
  85.  
  86.  
  87. void C_GlitchBypass::Begin()
  88. {
  89.     CreateThread( 0, 0, GBPassThread, 0, 0, 0 );
  90. }
  91.  
  92.  
  93. DWORD C_GlitchBypass::FindPattern(DWORD base, DWORD size, char pattern[], char mask[] )
  94. {
  95.     for( DWORD retAddress = base; retAddress < (base + size) ; retAddress++ )
  96.     {
  97.         if( *(BYTE*)retAddress == (pattern[0]&0xff) || mask[0] == '?' )
  98.         {
  99.             DWORD startSearch = retAddress;
  100.             for( int i = 0; mask[i] != '\0' ; i++, startSearch++ )
  101.             {
  102.                 if( (pattern[i]&0xff) != *(BYTE*)startSearch && mask[i] != '?')
  103.                     break;
  104.                
  105.                 if( ((pattern[i]&0xff) == *(BYTE*)startSearch || mask[i] == '?') && mask[i+1] == '\0' )
  106.                     return retAddress;
  107.             }        
  108.         }
  109.     }
  110.     return NULL;
  111. }
  112.  
  113.  
  114. void C_GlitchBypass::WriteDetour()
  115. {
  116.     // Set return address
  117.         m_ulReturnAddress = m_ulDetourAddress + 7; // 7 = Size in bytes of all the instructions overwritten
  118.  
  119.  
  120.     // Create new array to hold instruction
  121.         unsigned char cJump[ 7 ] = { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 };
  122.  
  123.  
  124.     // Set instruction for long jump
  125.         cJump[ 0 ] = asm_JMP;
  126.  
  127.  
  128.     // Set offset for jump
  129.         DWORD ulOffset = ( ( DWORD )GBPassDetour - 5 ) - m_ulDetourAddress;
  130.         memcpy( &cJump[ 1 ], &ulOffset, 4 );
  131.    
  132.  
  133.     // Write detour
  134.         DWORD dwOld;
  135.         VirtualProtect( ( PVOID )m_ulDetourAddress, 7, PAGE_EXECUTE_READWRITE, &dwOld );
  136.         memcpy( ( PVOID )m_ulDetourAddress, &cJump, 7 );
  137.         VirtualProtect( ( PVOID )m_ulDetourAddress, 7, dwOld, 0 );
  138. }
  139.  
  140.  
  141. //----------------------------------//
  142.  
  143.  
  144. DWORD WINAPI GBPassThread( LPVOID )
  145. {
  146.     while( !CGBPass.m_ulDetourAddress )
  147.     {
  148.         CGBPass.m_ulDetourAddress = CGBPass.FindPattern( 0x400000, 0x316000, "\x83\xC4\x08\x3C\x03\x88\x0E\x72\x1B\x8B\x0D\x00\x00\x00\x00\x6A\x04\x6A\x00\x68\x00\x00\x00\x00\x51\xFF\x15\x00\x00\x00\x00\xE9\x00\x00\x00\x00\x8B\x43\x40\x8B\x88\x00\x00\x00\x00\x05\x00\x00\x00\x00\x83\xF9\x08\x72\x05", "xxxxxxxxxxx????xxxxx????xxx????x????xxxxx????x????xxxxx" );
  149.         Sleep( 250 );
  150.     }
  151.  
  152.     CGBPass.WriteDetour();
  153.    
  154.     return 0;
  155. }
  156.  
  157.  
  158. __declspec(naked) void GBPassDetour()
  159. {
  160.     __asm
  161.     {
  162.         mov CGBPass.m_ulEsiRegister,esi
  163.         mov CGBPass.m_usEcx,cl
  164.  
  165.         pushad
  166.         pushfd
  167.     }
  168.    
  169.     static BYTE* pBypass = ( BYTE* )CGBPass.m_ulEsiRegister;
  170.  
  171.     if( CGBPass.m_bEnabled )
  172.         *pBypass = 0;
  173.     else
  174.         *pBypass = CGBPass.m_usEcx;
  175.  
  176.    
  177.     __asm
  178.     {
  179.         popfd
  180.         popad
  181.         add esp,0x08
  182.         cmp al,0x03
  183.         jmp [CGBPass.m_ulReturnAddress]
  184.     }
  185. }
  186.  
  187.  
  188.  
  189. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement