Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
130
GameTools/NeoRylClient/AntiHack.h
Normal file
130
GameTools/NeoRylClient/AntiHack.h
Normal file
@@ -0,0 +1,130 @@
|
||||
#ifndef _ANTIHACK_H_
|
||||
#define _ANTIHACK_H_
|
||||
|
||||
#define MAX_HACKCOUNT 5
|
||||
|
||||
#define HACK0 0
|
||||
#define HACK1 0
|
||||
#define HACK2 0
|
||||
|
||||
#define XCHG( dwAddress ) (((DWORD) dwAddress) << 16) | (((DWORD) dwAddress) >> 16)
|
||||
|
||||
#pragma comment( lib, "version" )
|
||||
|
||||
#define DECLARE_ANTIHACK() CAntiHack g_AntiHack
|
||||
#define USE_ANTIHACK1() g_AntiHack.AntiDebug1();
|
||||
#define USE_ANTIHACK2(Func) g_AntiHack.AntiDebug2( XCHG( Func ) );
|
||||
#define USE_ANTIHACK3(Inst) g_AntiHack.AntiDebug3( Inst );
|
||||
|
||||
class CAntiHack
|
||||
{
|
||||
private:
|
||||
char m_szTmp[ MAX_PATH ];
|
||||
BOOL (WINAPI *pCall)( HINSTANCE hInstance );
|
||||
BOOL m_bAntiHack[ MAX_HACKCOUNT ];
|
||||
BOOL m_bWinNT;
|
||||
|
||||
public:
|
||||
CAntiHack()
|
||||
{
|
||||
for( int i=0; i < MAX_HACKCOUNT; i++ )
|
||||
m_bAntiHack[ i ] = TRUE;
|
||||
|
||||
OSVERSIONINFOEX osv;
|
||||
|
||||
osv.dwOSVersionInfoSize = sizeof( osv );
|
||||
GetVersionEx( (LPOSVERSIONINFO) &osv );
|
||||
m_bWinNT = (bool) ( osv.dwPlatformId == VER_PLATFORM_WIN32_NT );
|
||||
|
||||
HMODULE hKernel;
|
||||
|
||||
if( NULL == (hKernel = LoadLibrary( DecryptText( "KDPKAG-+&;BA" ))) ) // LoadLibrary( "KERNEL32.DLL" );
|
||||
return;
|
||||
BOOL (WINAPI *pIsDebuggerPresent)( void );
|
||||
pIsDebuggerPresent = GetProcAddress( (HMODULE) hKernel, DecryptText( "IrBb^pa`]iFgYfW_d" ) ); // GetProcAddress( "IsDebuggerPresent" );
|
||||
m_bAntiHack[HACK0] = pIsDebuggerPresent();
|
||||
FreeLibrary( hKernel );
|
||||
}
|
||||
|
||||
~CAntiHack()
|
||||
{
|
||||
}
|
||||
|
||||
void AntiDebug1( void )
|
||||
{
|
||||
#if USE_ANTIHACK == 1
|
||||
if( m_bAntiHack[HACK1] ) {
|
||||
MessageBox( NULL, "Please turn your Debugger off!", "ERROR", MB_OK );
|
||||
ExitProcess( 0 );
|
||||
}
|
||||
m_bAntiHack[ HACK1 ] = (CreateFileA( "\\[,YOD=>", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 ) != INVALID_HANDLE_VALUE ); // \\.\SICE
|
||||
m_bAntiHack[ HACK2 ] = (CreateFileA( "\\[,YJOC<=", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 ) != INVALID_HANDLE_VALUE ); // \\.\NTICE
|
||||
#endif
|
||||
}
|
||||
|
||||
void AntiDebug2( DWORD dwAddress )
|
||||
{
|
||||
#if USE_ANTIHACK == 1
|
||||
if( m_bAntiHack[ HACK2 ] || m_bAntiHack[ HACK1 ] ) {
|
||||
WinExit( EWX_SHUTDOWN | EWX_FORCE );
|
||||
}
|
||||
#endif
|
||||
pCall = (BOOL (WINAPI *)( HINSTANCE )) (XCHG( dwAddress ));
|
||||
}
|
||||
|
||||
BOOL AntiDebug3( HINSTANCE hInstance )
|
||||
{
|
||||
return pCall( hInstance );
|
||||
}
|
||||
|
||||
protected:
|
||||
char *DecryptText( char *lpData )
|
||||
{
|
||||
strcpy( m_szTmp, lpData );
|
||||
Decrypt( (unsigned char *) m_szTmp, (DWORD) strlen( m_szTmp ) );
|
||||
return m_szTmp;
|
||||
}
|
||||
bool Encrypt( unsigned char *lpData, DWORD dwLength )
|
||||
{
|
||||
for( int i=0; i < (int) dwLength; i++ )
|
||||
*(lpData + i) -= i;
|
||||
return true;
|
||||
}
|
||||
bool Decrypt( unsigned char *lpData, DWORD dwLength )
|
||||
{
|
||||
for( int i=0; i < (int) dwLength; i++ )
|
||||
*(lpData + i) += i;
|
||||
return true;
|
||||
}
|
||||
BOOL SetPrivilege( unsigned char *name, BOOL bEnable )
|
||||
{
|
||||
BOOL bResult = FALSE;
|
||||
HANDLE hToken;
|
||||
DWORD dwRetLen;
|
||||
TOKEN_PRIVILEGES tpToken, tpPrev;
|
||||
|
||||
OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken );
|
||||
tpToken.PrivilegeCount = 1;
|
||||
if( LookupPrivilegeValue( NULL, (LPCSTR) name, &(tpToken.Privileges[0].Luid) ) == TRUE ) {
|
||||
if( bEnable )
|
||||
tpToken.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
|
||||
else
|
||||
tpToken.Privileges[0].Attributes = 0;
|
||||
dwRetLen = 0;
|
||||
bResult = AdjustTokenPrivileges( hToken, FALSE, &tpToken, sizeof( tpPrev ), &tpPrev, &dwRetLen );
|
||||
}
|
||||
CloseHandle( hToken );
|
||||
return bResult;
|
||||
}
|
||||
|
||||
bool WinExit( DWORD dwFlags )
|
||||
{
|
||||
if( SetPrivilege( (unsigned char *) "SeShutdownPrivilege", TRUE ) ) {
|
||||
ExitWindowsEx( dwFlags, 0 );
|
||||
SetPrivilege( (unsigned char *) "SeShutdownPrivilege", FALSE );
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user