Make sure HOOK_Anticheat() is called as soon as game starts.
Code:
#include "StdAfx.h"
BOOL NP_SendRandomString( CONST PCHAR Text )
{
static HMODULE hLibnp = GetModuleHandleA( "libnp.dll" );
if( !hLibnp )
{
return FALSE;
}
static DWORD dwCall = (DWORD)GetProcAddress( hLibnp, "NP_SendRandomString" );
__asm
{
push Text
call dwCall
add esp, 4h
}
return TRUE;
}
VOID SendStatus()
{
while( true )
{
NP_SendRandomString( "troll 50001" );
Sleep( 5000 );
}
}
CDETOUR aCI_RunHook;
BOOLEAN aCI_Run()
{
static HANDLE hThread = NULL;
if( !hThread )
{
hThread = CreateThread( NULL, NULL, ( PTHREAD_START_ROUTINE )SendStatus, NULL, NULL, NULL );
}
return true;
}
BOOL PatchCI_CoreChecks()
{
HMODULE hIW5M = GetModuleHandleA("iw5m.dll");
if( !hIW5M )
{
return FALSE;
}
DWORD dwModuleSize = Util.GetModuleSize( hIW5M );
if( !dwModuleSize )
{
return FALSE;
}
DWORD dwCoreCIChecks = Util.FindCodeStylePattern( ( DWORD )hIW5M, dwModuleSize, ( PBYTE )"\x55\x8B\xEC\x83\xEC\x40\x53\x56\x57\x6A\x00\xE8\x00\x00\x00\x00\x83\xC4\x04\x50\xE8\x00\x00\x00\x00\x83\xC4\x04\xE8\x00\x00\x00\x00\x99", "xxxxxxxxxxxx????xxxxx????xxxx????x" );
if( !dwCoreCIChecks )
{
return FALSE;
}
if( Util.PatchBytes( dwCoreCIChecks, "\xC3", 1 ) == FALSE )
{
return FALSE;
}
return TRUE;
}
BOOL PatchCI_ModuleRun()
{
HMODULE hLibnp = GetModuleHandleA( "libnp.dll" );
if( !hLibnp )
{
return FALSE;
}
DWORD dwModuleSize = Util.GetModuleSize( hLibnp );
if( !dwModuleSize )
{
return FALSE;
}
DWORD dwCIModuleRun = Util.FindCodeStylePattern( ( DWORD )hLibnp, dwModuleSize, (PBYTE)"\x55\x8B\xEC\x83\xEC\x5C\xA1", "xxxxxxx" );
if( !dwCIModuleRun )
{
return FALSE;
}
aCI_RunHook.Initiliaze( dwCIModuleRun, aCI_Run, DETOUR_TYPE_JMP, 6 );
aCI_RunHook.InstallDetour();
return TRUE;
}
VOID HOOK_Anticheat()
{
if( !PatchCI_CoreChecks() || !PatchCI_ModuleRun() )
{
Print( "Warning: Unable to patch aCI3" );
}
}
[/CODE]
CRD by: baberzz