//++ BulliT
# include "hud.h"
# include "cl_util.h"
# if defined(AG_USE_CHEATPROTECTION) && defined(_WIN32)
# include "AgWallhack.h"
# include "AgVersionInfo.h"
# include "com_weapons.h"
# include "agbase64.h"
# include "agmapi.h"
# include "agicq.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
bool CheckHooks ( const char * pszModule , const char * pszMethod , BYTE * pBytesToCheck , DWORD dwSize )
{
bool bOK = false ;
HANDLE hProcess = : : GetCurrentProcess ( ) ;
HMODULE hModule = : : GetModuleHandle ( pszModule ) ;
if ( ! hModule )
return true ; //The dll aint loaded
LPVOID pAddress = : : GetProcAddress ( hModule , pszMethod ) ;
// change the page-protection for the intercepted function
DWORD dwOldProtect ;
if ( ! : : VirtualProtectEx ( hProcess , pAddress , dwSize , PAGE_EXECUTE_READ , & dwOldProtect ) )
return false ;
//Read the bytes to see if someone hooked that function
BYTE * pBytesInMem = ( BYTE * ) malloc ( dwSize ) ;
DWORD dwRead = 0 ;
if ( : : ReadProcessMemory ( hProcess , pAddress , pBytesInMem , dwSize , & dwRead ) )
{
bOK = 0 ! = memcmp ( pBytesInMem , pBytesToCheck , dwRead ) ;
/*
char szAddress [ _MAX_PATH ] ;
sprintf ( szAddress , " %s::%s - at %lx - %s " , pszModule , pszMethod , pAddress , bOK ? " OK " : " HACK " ) ;
AgLog ( szAddress ) ;
HANDLE hFile = CreateFile ( " c: \\ temp.bin " , GENERIC_READ | GENERIC_WRITE , FILE_SHARE_READ , NULL , CREATE_ALWAYS , NULL , NULL ) ;
DWORD dwWritten ;
WriteFile ( hFile , pBytesToCheck , dwRead , & dwWritten , NULL ) ;
CloseHandle ( hFile ) ;
*/
}
//
// restore page protection
//
VirtualProtectEx ( hProcess , pAddress , dwSize , dwOldProtect , & dwOldProtect ) ;
free ( pBytesInMem ) ;
return bOK ;
}
AgWallhack g_Wallhack ;
static char szDisconnect [ ] = " disconnect \n " ;
static char szMicrosoft [ ] = " Microsoft Corporation " ;
static char szCDFPS [ ] = " cd_fps " ;
static char * s_szGoodDlls [ ] =
{
/*
" \\ ag \\ cl_dlls \\ client.dll " ,
" \\ ag \\ dlls \\ ag.dll " ,
" \\ ag \\ dlls \\ hl.dll " ,
" \\ aghl \\ cl_dlls \\ client.dll " ,
" \\ aghl \\ dlls \\ ag.dll " ,
" \\ aghl \\ dlls \\ hl.dll " ,
*/
" \\ vgui.dll " ,
" \\ woncrypt.dll " ,
" \\ wonauth.dll " ,
" \\ hl_res.dll " ,
" \\ hw.dll " ,
" \\ sw.dll " ,
" \\ mss32.dll " ,
" \\ mssv12.dll " ,
" \\ mssv12.asi " ,
" \\ mp3dec.asi " ,
" \\ mssv29.asi " ,
" \\ steamvalidateuseridtickets.dll " ,
" \\ voice_miles.dll " ,
" \\ hl.exe " ,
" \\ cstrike.exe " ,
} ;
static char * s_szBadDlls [ ] =
{
" glhack.dll " , //Famous glhack.
" default.dll " , //Cracked version of famous glhack. This one is encoded... smart fellow :P
" hl_rem.dll " , //Cracked version of famous glhack. I will stop any version by opening the dll anyway.
" oldogl32.dll " , //Famous glhack.
" oglhack.dll " ,
" ogl.dll " ,
" sw!zz3r.dll " ,
" hookhl.dll " ,
" ogc.dll " ,
} ;
static char * s_szBadStrings [ ] =
{
" Z2xoYWNr " , //glhack
" b3BlbmdsLmluaQAA " , //opengl.ini
" VFdDaGVhdAAA " , //TWCheat
" Qi50ZXJhcGh5 " , //B.teraphy
" RmxhdXR6 " , //Flautz
" c3chenozcgAA " , //sw!zz3r
" QU5BS2lO " , //ANAKiN
" VVBYIQAA " , //UPX!
" Yzpcb3BlbmdsMzIuZGxs " , //c:\opengl32.dll
" aGxoLmRsbAAA " , //hlh.dll
" R1JpTS1GX0gA " , //GRiM-F_H
" Q2hyb21heFMA " , //ChromaxS
" b2djLmRsbAAA " , //ogc.dll
" ZVohJDd2 " , //eZ!$7v Swizz hack
" Y29kZXJzLmRsbAAA " , //coders.dll wh_beta4, wh_beta5
" b2djLmNmZwAA " , //ogc.cfg
" eHF6MgAA " , //xqz2 - xqz2_b71
" eHFiNgAA " , //xqb6 - xqz2_b80
" cEBncmFt " , //p@gram - XQZ2Beta85
" W09HQ10A " , //[OGC] - from ogc 7
" Sm9vbHoA " , //Joolz - from ogc 8 -
" dGhyb3VnaCB3YWxs " , //through wall - from ogc 8 -
" UlNEU/s19Llq " , //RSDS<EFBFBD> 5<EFBFBD> <EFBFBD> j from 187 Wallhack
" d2FsbGhhY2sA " , //wallhack from SyFWallHack.dll
" W1VHQ10A " , //[UGC] from [FuRy]-immortal
" R0xIYWNr " , //GLHack
" XDE4N0hBQ0sA " , //\187HACK - 187 version 1.5, 2.0, xqz
" THRmeGhvb2sA " , //Ltfxhook - version 4
" c2VjdXJlLmluaQAA " , //secure.ini - nc-secure
" bWFkQ29kZUhvb2sA " , //madCodeHookLib - www.madshi.net hooking library that some seem to use.
" amFpbmEA " , //jaina - comes from exprtl0.dll
" bmV0LWNvZGVycwAA " , //net-coders - from net coderse hack
// "YWltaGFjawAA", //aimhack - 187 version xqz
" V2FsbGhhY2sA " , //Wallhack - from many hacks.
" aG9va2VyLmRsbAAA " , //hooker.dll
" VW5ob29rZXIA " , //Unhooker
//in cheats.dat "V2lyZWZyYW1l", //Wireframe - from Net coders hack.
/*
" T0dDAAAA " , //OGC
" b2djAAAA " , //ogc
*/
/*
http : //www.zone.ee/kunnchat/
http : //www.unknowncheats.com/
http : //www.cheat-network.net/chnetphp/
*/
} ;
AgWallhack : : AgWallhack ( )
{
# ifndef _DEBUG
# ifndef AG_TESTCHEAT
if ( IsDebuggerPresent ( ) )
exit ( - 1 ) ;
# endif
# endif
m_dwHLAddressToValidate = 0L ;
int i = 0 ;
for ( i = 0 ; i < sizeof ( s_szBadStrings ) / sizeof ( s_szBadStrings [ 0 ] ) ; i + + )
AddBadString ( s_szBadStrings [ i ] ) ;
for ( i = 0 ; i < sizeof ( s_szBadDlls ) / sizeof ( s_szBadDlls [ 0 ] ) ; i + + )
AddBadDll ( s_szBadDlls [ i ] ) ;
char szHalfLife [ MAX_PATH ] ;
GetModuleFileName ( GetModuleHandle ( " client.dll " ) , szHalfLife , sizeof ( szHalfLife ) ) ;
szHalfLife [ strrchr ( szHalfLife , ' \\ ' ) - szHalfLife ] = ' \0 ' ;
szHalfLife [ strrchr ( szHalfLife , ' \\ ' ) - szHalfLife ] = ' \0 ' ;
szHalfLife [ strrchr ( szHalfLife , ' \\ ' ) - szHalfLife ] = ' \0 ' ;
strlwr ( szHalfLife ) ;
char szDll [ MAX_PATH ] ;
for ( i = 0 ; i < sizeof ( s_szGoodDlls ) / sizeof ( s_szGoodDlls [ 0 ] ) ; i + + )
{
sprintf ( szDll , " %s%s " , szHalfLife , s_szGoodDlls [ i ] ) ;
m_setGoodDlls . insert ( szDll ) ;
}
/*
unsigned short usSize = 0 ;
unsigned char szSearch [ 256 ] ;
AgBase64Decode ( " hitewalls " , 9 , szSearch , usSize ) ;
OutputDebugString ( ( char * ) szSearch ) ;
OutputDebugString ( " \n " ) ;
*/
/*
AgBase64Encode ( ( unsigned char * ) " Wallhack " , 8 , szDll ) ;
OutputDebugString ( szDll ) ;
OutputDebugString ( " \n " ) ;
*/
/*
AgBase64Encode ( ( unsigned char * ) " ownlinecheating " , 7 , szDll ) ;
OutputDebugString ( szDll ) ;
OutputDebugString ( " \n " ) ;
*/
m_bDoneCheck = false ;
m_iFiles = 0 ;
m_dwBytes = 0 ;
}
AgWallhack : : ~ AgWallhack ( )
{
m_setBadStrings . clear ( ) ;
m_setBadDlls . clear ( ) ;
m_setGoodDlls . clear ( ) ;
m_setGoodSystemDlls . clear ( ) ;
}
void AgWallhack : : AddBadDll ( const char * pszDll )
{
if ( pszDll & & 0 ! = strlen ( pszDll ) )
m_setBadDlls . insert ( pszDll ) ;
}
void AgWallhack : : AddBadString ( const char * pszString )
{
if ( pszString & & 0 ! = strlen ( pszString ) )
m_setBadStrings . insert ( pszString ) ;
}
void AgWallhack : : AddBadStrings ( const char * pszStrings )
{
char * pszStringsTemp = strdup ( pszStrings ) ;
char * pszCheatString = strtok ( pszStringsTemp , " \n " ) ;
while ( pszCheatString ! = NULL )
{
AgString strCheatString = pszCheatString ;
AgTrim ( strCheatString ) ;
if ( strCheatString . length ( ) )
AddBadString ( strCheatString . c_str ( ) ) ;
pszCheatString = strtok ( NULL , " \n " ) ;
}
free ( pszStringsTemp ) ;
}
bool AgWallhack : : InitToolHelp32 ( )
{
if ( m_hKernel32 & & m_lpfCreateToolhelp32Snapshot & & m_lpfModule32First & & m_lpfModule32Next )
return true ;
m_hKernel32 = : : LoadLibrary ( " kernel32.dll " ) ;
if ( NULL = = m_hKernel32 )
return false ;
m_lpfCreateToolhelp32Snapshot = ( CREATETOOLHELP32SNAPSHOT ) : : GetProcAddress ( m_hKernel32 , " CreateToolhelp32Snapshot " ) ;
m_lpfModule32First = ( MODULE32FIRST ) : : GetProcAddress ( m_hKernel32 , " Module32First " ) ;
m_lpfModule32Next = ( MODULE32NEXT ) : : GetProcAddress ( m_hKernel32 , " Module32Next " ) ;
m_lpfProcess32First = ( PROCESS32FIRST ) : : GetProcAddress ( m_hKernel32 , " Process32First " ) ;
m_lpfProcess32Next = ( PROCESS32NEXT ) : : GetProcAddress ( m_hKernel32 , " Process32Next " ) ;
if ( NULL = = m_lpfCreateToolhelp32Snapshot | |
NULL = = m_lpfModule32First | |
NULL = = m_lpfModule32Next | |
NULL = = m_lpfProcess32First | |
NULL = = m_lpfProcess32Next )
{
: : FreeLibrary ( m_hKernel32 ) ;
m_hKernel32 = NULL ;
return false ;
}
return true ;
}
bool AgWallhack : : Check ( )
{
# ifdef _DEBUG
//return true;
//m_bDoneCheck = true;
//HMODULE x1 = LoadLibrary("E:/Dev/cheats/nC 2.1/nC-Hack.dll");
# endif
if ( m_bDoneCheck )
return true ;
if ( ! InitToolHelp32 ( ) )
{
char szMessage [ ] = " Cheat check: This version of Windows is not supported \n " ;
ServerCmd ( " say <AG Mod> this version of Windows is not supported. " ) ;
AgLog ( szMessage ) ;
ConsolePrint ( szMessage ) ;
ClientCmd ( szDisconnect ) ;
return false ;
}
int iCheck = InternalCheck ( ) ;
# ifdef _DEBUG
char szChecked [ 128 ] ;
sprintf ( szChecked , " Checked for %d cheats in %d files with total data of %ld bytes \n " , ( int ) ( m_setBadStrings . size ( ) + m_setBadDlls . size ( ) ) , m_iFiles , m_dwBytes ) ;
ConsolePrint ( szChecked ) ;
# endif
if ( 0 > iCheck )
{
char szMessage [ 512 ] ;
sprintf ( szMessage , " say <AG Mod> Autodisconnected, error in installation. \n " ) ;
ServerCmd ( szMessage ) ;
sprintf ( szMessage , " Error in installation %s. (Error = %d) \n " , m_sDll . c_str ( ) , iCheck ) ;
AgLog ( szMessage ) ;
ConsolePrint ( szMessage ) ;
ClientCmd ( szDisconnect ) ;
return false ;
}
if ( 0 ! = iCheck )
{
char szMessage [ 512 ] ;
sprintf ( szMessage , " say <AG Mod> Disconnected for using invalid module %s. \n " , m_sDll . c_str ( ) ) ;
ServerCmd ( szMessage ) ;
sprintf ( szMessage , " Cheat check: %s is not allowed in AG. (Code = %d) \n " , m_sDll . c_str ( ) , iCheck ) ;
AgLog ( szMessage ) ;
ConsolePrint ( szMessage ) ;
//AgSendICQ(szMessage);
//AgSendMail(szMessage);
# ifndef _DEBUG
SendMessageToIRC ( szMessage ) ;
ClientCmd ( szDisconnect ) ;
return false ;
# endif
}
// m_bDoneCheck = true;
return true ;
}
void DumpToFile ( MODULEENTRY32 * pME )
{
char szFile [ MAX_PATH ] ;
sprintf ( szFile , " %s/filedump.txt " , AgGetDirectory ( ) ) ;
FILE * pFile = fopen ( szFile , " a+ " ) ;
if ( ! pFile )
{
return ;
}
fwrite ( pME - > modBaseAddr , sizeof ( BYTE ) , pME - > modBaseSize , pFile ) ;
fflush ( pFile ) ;
fclose ( pFile ) ;
}
int AgWallhack : : InternalCheck ( )
{
# ifndef _DEBUG
# ifndef AG_TESTCHEAT
if ( IsDebuggerPresent ( ) )
{
m_sDll = " debugger " ;
return - 1 ;
}
# endif
# endif
char szSystemDir [ MAX_PATH ] ;
GetSystemDirectory ( szSystemDir , sizeof ( szSystemDir ) ) ;
strlwr ( szSystemDir ) ;
m_sDll = " " ;
# ifdef _DEBUG
DWORD dwTime = GetTickCount ( ) ;
# endif
unsigned char szSearch [ 256 ] ;
szSearch [ 0 ] = ' \0 ' ;
HANDLE hSnapShot = m_lpfCreateToolhelp32Snapshot ( TH32CS_SNAPMODULE , 0 ) ;
if ( INVALID_HANDLE_VALUE = = hSnapShot )
{
m_sDll = " toolhelp was not found " ;
return - 2 ;
}
MODULEENTRY32 me ;
me . dwSize = sizeof ( MODULEENTRY32 ) ;
HMODULE hCurrent = : : GetModuleHandle ( " client.dll " ) ;
if ( ! GetModuleHandle ( " hl.exe " ) & & ! GetModuleHandle ( " cstrike.exe " ) )
{
m_sDll = " hl.exe or cstrike.exe was not found " ;
return - 3 ;
}
BYTE byHokoHack [ 1 ] = { 0xE8 } ;
BYTE byRegularJumpHack [ 1 ] = { 0xE9 } ;
if ( ! CheckHooks ( " opengl32.dll " , " glBegin " , byHokoHack , sizeof ( byHokoHack ) )
| | ! CheckHooks ( " opengl32.dll " , " glBegin " , byRegularJumpHack , sizeof ( byRegularJumpHack ) )
)
{
m_sDll = " opengl32.dll (patched) " ;
return 11 ;
}
m_iFiles = 0 ;
m_dwBytes = 0 ;
bool bCorrectAddress = false ;
if ( m_lpfModule32First ( hSnapShot , & me ) )
{
do
{
m_iFiles + + ;
m_dwBytes + = me . modBaseSize ;
if ( hCurrent ! = me . hModule )
{
# ifdef _DEBUG
char szTime [ MAX_PATH ] ;
if ( " " = = m_sDll )
{
sprintf ( szTime , " %s %d ms \n " , m_sDll . c_str ( ) , int ( ( GetTickCount ( ) - dwTime ) ) ) ;
AgLog ( szTime ) ;
dwTime = GetTickCount ( ) ;
}
# endif //_DEBUG
char szFileName [ MAX_PATH ] ;
strcpy ( szFileName , me . szExePath ) ;
strlwr ( szFileName ) ;
m_sDll = szFileName ;
DWORD dwAddressInModule = ( DWORD ) me . modBaseAddr ;
if ( m_dwHLAddressToValidate > = dwAddressInModule
& & m_dwHLAddressToValidate < = ( dwAddressInModule + me . modBaseSize ) )
{
bCorrectAddress = ( 0 = = stricmp ( & szFileName [ strlen ( szFileName ) - 6 ] , " hl.exe " ) ) | | ( 0 = = stricmp ( & szFileName [ strlen ( szFileName ) - 11 ] , " cstrike.exe " ) ) ;
}
bool bOpenGL = 0 ;
if ( strlen ( szFileName ) > 11 )
bOpenGL = 0 = = strcmp ( & szFileName [ strlen ( szFileName ) - 12 ] , " opengl32.dll " ) ;
//Extract version resource.
AgVersionInfo vi ;
vi . LoadVersionInfo ( szFileName ) ;
//Check if microsoft dll.
if ( ! vi . HasErrors ( ) )
{
if ( 0 = = strcmp ( szMicrosoft , vi . CompanyName ( ) ) )
{
if ( ! bOpenGL & & me . modBaseSize > 150000L ) //Most cheat dlls are usually less than 150000kb.
continue ;
}
}
if ( 0 = = strcmp ( & szFileName [ strlen ( szFileName ) - 11 ] , " shimeng.dll " ) )
continue ;
//Skip over some HL dll's
bool bGood = false ;
AgStringSet : : iterator itrGoodDlls ;
for ( itrGoodDlls = m_setGoodDlls . begin ( ) ; itrGoodDlls ! = m_setGoodDlls . end ( ) & & ! bGood ; + + itrGoodDlls )
{
if ( 0 = = strcmp ( m_sDll . c_str ( ) , ( * itrGoodDlls ) . c_str ( ) ) )
bGood = true ;
}
if ( bGood )
continue ;
# ifndef AG_TESTCHEAT
//Check bad dll's - practicly worthless :P - the rutine to open and scan the dll inside below is much better.
AgStringSet : : iterator itrWallhackDlls ;
for ( itrWallhackDlls = m_setBadDlls . begin ( ) ; itrWallhackDlls ! = m_setBadDlls . end ( ) ; + + itrWallhackDlls )
{
if ( 0 = = strcmp ( m_sDll . c_str ( ) , ( * itrWallhackDlls ) . c_str ( ) ) )
{
AgLog ( ( " Wallhack found in " + m_sDll + " \n " ) . c_str ( ) ) ;
return 1 ; //He used an obvious cheat.
}
}
# endif
# ifdef _DEBUG
bool bDump = false ;
if ( bDump )
DumpToFile ( & me ) ;
# endif //_DEBUG
if ( bOpenGL )
{
//Check if dll is in windows system directory. Hacks sometimes put the passthru in c:/
if ( NULL = = strstr ( m_sDll . c_str ( ) , szSystemDir ) )
return 2 ; //The opengl32.dll driver wasn't in windows system directory.
//Check file size. Under 600k is wrong.
//Check http://support.microsoft.com/servicedesks/fileversion/dllinfo.asp?sd=MSDN
if ( 600000 > me . modBaseSize )
return 3 ; //This dll is way to small to be the standard opengl32.dll.
//Extract version resource.
if ( vi . HasErrors ( ) )
return 4 ; //Typically a passthruu dll's aint got any version resource.
//Check the version info for microsoft string. Can easily be done by hackers though
if ( 0 ! = strcmp ( szMicrosoft , vi . CompanyName ( ) ) )
return 5 ; //Should be Microsoft Corporation.
//Check the productversion.
int iMajor , iMinor , iMicro , iState ;
vi . ProductVersion ( iMajor , iMinor , iMicro , iState ) ;
if ( iMajor < 4 )
return 6 ; //Should be 4 or more. Cant do any more serious check than this because of the different flavors of windows...
}
# ifdef _DEBUG
AgLog ( m_sDll . c_str ( ) ) ;
# endif
//Oki - brute force method to check for hacks... its easy to rename dll's you know...
AgStringSet : : iterator itrWallhackStrings ;
unsigned long i = 0 ;
unsigned short x = 0 ;
bool bFoundHack = true ;
unsigned char * pBuffer = NULL ;
for ( itrWallhackStrings = m_setBadStrings . begin ( ) ; itrWallhackStrings ! = m_setBadStrings . end ( ) ; + + itrWallhackStrings )
{
unsigned short usSize = 0 ;
AgBase64Decode ( ( * itrWallhackStrings ) . c_str ( ) , ( * itrWallhackStrings ) . size ( ) , szSearch , usSize ) ;
const unsigned char * pszSearch = szSearch ;
i = 0 ;
unsigned long lCount = me . modBaseSize - usSize ;
pBuffer = me . modBaseAddr ;
do
{
//bFoundHack = FastCmp(pBuffer,pszSearch,usSize);
bFoundHack = true ;
x = 0 ;
do
{
bFoundHack = * ( pBuffer + x ) = = * ( pszSearch + x ) ;
+ + x ;
}
while ( bFoundHack & & x < usSize ) ;
if ( bFoundHack )
{
AgLog ( ( " Wallhack found in " + m_sDll + " \n " ) . c_str ( ) ) ;
return 7 ;
}
+ + pBuffer ;
+ + i ;
}
while ( i < lCount ) ;
}
}
me . dwSize = sizeof ( MODULEENTRY32 ) ;
}
while ( m_lpfModule32Next ( hSnapShot , & me ) ) ;
: : CloseHandle ( hSnapShot ) ;
}
if ( ! bCorrectAddress & & ! gEngfuncs . pfnGetCvarPointer ( szCDFPS ) )
{
m_sDll = " ogc type hooking library " ;
return 10 ;
}
return 0 ;
/*
HANDLE hSnapShotProcess = m_lpfCreateToolhelp32Snapshot ( TH32CS_SNAPPROCESS , 0 ) ;
if ( INVALID_HANDLE_VALUE = = hSnapShotProcess )
return - 1 ;
PROCESSENTRY32 pe ;
pe . dwSize = sizeof ( PROCESSENTRY32 ) ;
DWORD th32ProcessID = GetCurrentProcessId ( ) ;
unsigned char * pFileBuffer = NULL ;
DWORD dwBufferSize = 0 ;
if ( m_lpfProcess32First ( hSnapShotProcess , & pe ) )
{
do
{
m_sDll = pe . szExeFile ;
m_iFiles + + ;
if ( th32ProcessID ! = pe . th32ProcessID )
{
AgVersionInfo vi ;
vi . LoadVersionInfo ( pe . szExeFile ) ;
//Check if microsoft dll. Let's hope that no hacker reads this source :P
if ( ! vi . HasErrors ( ) )
{
AgString sCompanyName = vi . CompanyName ( ) ;
AgTrim ( sCompanyName ) ;
if ( " Microsoft Corporation " = = vi . CompanyName ( ) )
continue ;
}
//Load the dll into a buffer so it's possible to scan the contence.
HANDLE hFile = CreateFile ( pe . szExeFile , GENERIC_READ , FILE_SHARE_READ , NULL , OPEN_EXISTING , 0 , 0 ) ;
if ( ! hFile )
return 9 ; //Could not load the exe.
DWORD dwSize = GetFileSize ( hFile , NULL ) ;
m_dwBytes + = dwSize ;
if ( dwBufferSize < dwSize )
{
if ( pFileBuffer )
free ( pFileBuffer ) ;
dwBufferSize = dwSize ;
pFileBuffer = ( unsigned char * ) malloc ( dwBufferSize ) ;
}
DWORD dwRead = 0 ;
if ( ReadFile ( hFile , ( void * ) pFileBuffer , dwSize , & dwRead , NULL ) )
{
if ( dwRead = = dwSize )
{
//Oki - brute force method to check for hacks... its easy to rename dll's you know...
AgStringSet : : iterator itrWallhackStrings ;
unsigned long i = 0 ;
unsigned short x = 0 ;
bool bFoundHack = true ;
unsigned char * pBuffer = NULL ;
for ( itrWallhackStrings = m_setBadStrings . begin ( ) ; itrWallhackStrings ! = m_setBadStrings . end ( ) ; + + itrWallhackStrings )
{
unsigned short usSize = 0 ;
AgBase64Decode ( ( * itrWallhackStrings ) . c_str ( ) , ( * itrWallhackStrings ) . size ( ) , szSearch , usSize ) ;
const unsigned char * pszSearch = szSearch ;
i = 0 ;
unsigned long lCount = dwSize - usSize ;
pBuffer = pFileBuffer ;
do
{
//bFoundHack = FastCmp(pBuffer,pszSearch,usSize);
bFoundHack = true ;
x = 0 ;
do
{
bFoundHack = * ( pBuffer + x ) = = * ( pszSearch + x ) ;
+ + x ;
}
while ( bFoundHack & & x < usSize ) ;
if ( bFoundHack )
{
AgLog ( ( " Wallhack found in " + m_sDll + " \n " ) . c_str ( ) ) ;
return 7 ;
}
+ + pBuffer ;
+ + i ;
}
while ( i < lCount ) ;
}
}
else
{
}
}
else
{
}
CloseHandle ( hFile ) ;
}
pe . dwSize = sizeof ( PROCESSENTRY32 ) ;
}
while ( TRUE = = m_lpfProcess32Next ( hSnapShotProcess , & pe ) ) ;
: : CloseHandle ( hSnapShotProcess ) ;
}
free ( pFileBuffer ) ;
*/
}
# ifdef DEBUG
# define IRC_CHANNEL "#aghl.beta"
# else
# define IRC_CHANNEL "#aghl"
# endif
# ifdef AG_TESTCHEAT
# undef IRC_CHANNEL
# define IRC_CHANNEL "#aghl.beta"
# endif
void AgWallhack : : SendMessageToIRC ( const char * szMessage )
{
char szCommand [ 512 ] ;
sprintf ( szCommand , " irc_nick \" AGHL|CHEATER%0d \" " , gEngfuncs . pfnRandomLong ( 0 , 99 ) ) ;
ClientCmd ( szCommand ) ;
sprintf ( szCommand , " irc_server \" irc.quakenet.eu.org \" " ) ;
ClientCmd ( szCommand ) ;
sprintf ( szCommand , " irc_port \" 6667 \" " ) ;
ClientCmd ( szCommand ) ;
sprintf ( szCommand , " irc_autojoin \" %s \" " , IRC_CHANNEL ) ;
ClientCmd ( szCommand ) ;
int iPlayer = gEngfuncs . GetLocalPlayer ( ) - > index ; // Get the local player's index
sprintf ( szCommand , " irc_autocommand2 \" /msg %s %s (Authid=%s) %s \" " , IRC_CHANNEL , gEngfuncs . PlayerInfo_ValueForKey ( iPlayer , " name " ) , AgGetAuthID ( iPlayer ) . c_str ( ) , " was caught with a cheat. For more info see message below. " ) ;
ClientCmd ( szCommand ) ;
sprintf ( szCommand , " irc_autocommand3 \" /msg %s %s \" " , IRC_CHANNEL , szMessage ) ;
ClientCmd ( szCommand ) ;
ClientCmd ( " ircconnect2 " ) ;
}
# endif //AG_USE_CHEATPROTECTION
//-- Martin Webrant