Posted by okidoki.
Hi,
Here is a PBHack base for Crysis:
Checks:
http://okidoki.gamedeception.net/crysis_checks.png PHP Code:
.text:1003E912 push eax
.text:1003E913 inc esi
.text:1003E914 push esi ; checks string???
.text:1003E915 push ecx
.text:1003E916 call sub_1003D01E ; call the checks function
.text:1003E91B jmp loc_1003EF72
PHP Code:
typedef INT ( *PBChecks_t )( int arg1, int arg2, int arg3 );
PBChecks_t pPBChecks;
INT _PBChecks( int arg1, int arg2, int arg3 )
{
// Remove your memory modifications here
INT result = pPBChecks( arg1, arg2, arg3 );
// Re-apply your memory modifications here
return result;
}
Screenshots:
http://okidoki.gamedeception.net/crysis_screenshots.png PHP Code:
.text:10040145 push [ebp+arg_4]
.text:10040148 lea eax, [esi-10Ch]
.text:1004014E push eax
.text:1004014F push [ebp+arg_0]
.text:10040152 call sub_10036437 ; call the screenshots function
.text:10040157 mov eax, dword_100961C8
PHP Code:
typedef INT ( *PBSShots_t )( int arg1, int arg2, int arg3 );
PBSShots_t pPBSShots;
INT _PBSShots( int arg1, int arg2, int arg3 )
{
// Remove your visual modifications / redraw the ( clean ) scene here
INT result = pPBSShots( arg1, arg2, arg3 );
// Re-apply your visual modifications here
return result;
}
Redirections:
PHP Code:
UINT PBThread( void *dummy )
{
DWORD dwPbclBase = NULL;
// Wait for a valid pbcl handle
for( ; dwPbclBase == NULL ; Sleep( 300 ) )
dwPbclBase = ( DWORD )GetModuleHandle( "pbcl.dll" );
DWORD dwProtection;
// Set the checks call address
DWORD dwPBChecksCall = dwPbclBase + 0x3E916;
// Set the original checks function pointer
pPBChecks = ( PBChecks_t )( dwPbclBase + 0x3D01E );
// Redirect the call destination to the _PBChecks function
VirtualProtect( ( void * )dwPBChecksCall, 5, 0x04, &dwProtection );
*( PDWORD )( dwPBChecksCall + 1 ) = ( DWORD )_PBChecks - ( dwPBChecksCall + 5 );
VirtualProtect( ( void * )dwPBChecksCall, 5, dwProtection, &dwProtection );
// Set the screenshots call address
DWORD dwPBSSCall = dwPbclBase + 0x40152;
// Set the original screenshots function pointer
pPBSShots = ( PBSShots_t )( dwPbclBase + 0x36437 );
// Redirect the call destination to the _PBSShots function
VirtualProtect( ( void * )dwPBSSCall, 5, 0x04, &dwProtection );
*( PDWORD )( dwPBSSCall + 1 ) = ( DWORD )_PBSShots - ( dwPBSSCall + 5 );
VirtualProtect( ( void * )dwPBSSCall, 5, dwProtection, &dwProtection );
return NULL;
}
Usage:
PHP Code:
BOOL APIENTRY DllMain( HMODULE hModule, DWORD dwReason, PVOID pvReserved )
{
if( dwReason == DLL_PROCESS_ATTACH )
{
// Apply your own stuff here
CreateThread( 0, 0, PBThread, 0, 0, 0 );
}
return TRUE;
}
For up to date PB informations:
UnKnoWnCheaTs - Multiplayer Game Hacking and Cheats
PS: It's for the Crysis PB client ( v1.726 | A1391 ), and yes I will update it.
Regards.