Hackshield no need to Bypass, Just jump with detaurs create
for PBlackout and pointblank, create detours then hook then dip different kinds
for PBlackout and pointblank, create detours then hook then dip different kinds


DWORD addrRenderContext = FindPattern( i3SceneDx, 0, patRenderContext, maskRenderContext, 1 ); #ifdef DEBUG Log->Write( "addrRenderContext %p", addrRenderContext ); #endif if( addrRenderContext == 0 ) return false; while( (i3RenderContext*)addrRenderContext == NULL || *(i3RenderContext**)addrRenderContext == NULL || **(i3RenderContext***)addrRenderContext == NULL || ***(i3RenderContext****)addrRenderContext == NULL ) Sleep(10); pRenderContext = ***(i3RenderContext****)addrRenderContext; Log->Write( "pRenderContext %p", pRenderContext ); while( pRenderContext->isReady == 0 ) Sleep( 10 ); Log->Write( "pRenderContext->isReady %d", pRenderContext->isReady ); static DWORD dwEndSceneAddr = *( DWORD* )pRenderContext->pD3DDevice + 42 * 4; Log->Write( "dwEndSceneAddr %p", dwEndSceneAddr ); oEndScene = (tEndScene)VTableHook( *( DWORD* )pRenderContext->pD3DDevice, 42, ( DWORD )&hEndScene ); Log->Write( "hEndScene %p", ( DWORD )&hEndScene ); Log->Write( "oEndScene %p", oEndScene );

(__stdcall* pAdpDrawIndexedPrimitive)(ULONG,D3D_DRAWINDEXEDPRIMITIVE*) = NULL; // my RESULT
pDetourRemove((PBYTE)ArmyDrawIndexedPrimitive,(PBYTE)ArmyDrawIndexedPrimitive);
VTableHook // ready detected:( oDrawIndexedPrimitive(pDevice, PrimType, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount);
__asm;
if(GetAsyncKeyState(VK_F10)&1){Glass2=!Glass2;}
if (Glass2)
if(Stride == 44 )
{
pDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
xxxxxxxxxx(xxxxxxxxx); // your DIP
pDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
}



i3RenderContext * g_pRenderContext
04C8CFCF CC INT3 04C8CFD0 83EC 60 SUB ESP,60 04C8CFD3 A1 54EDDF04 MOV EAX,DWORD PTR DS:[4DFED54] 04C8CFD8 33C4 XOR EAX,ESP 04C8CFDA 894424 5C MOV DWORD PTR SS:[ESP+5C],EAX 04C8CFDE A1 BC98D504 MOV EAX,DWORD PTR DS:[4D598BC] ; i3RenderContext * g_pRenderContext 04C8CFE3 53 PUSH EBX 04C8CFE4 8B5C24 6C MOV EBX,DWORD PTR SS:[ESP+6C] 04C8CFE8 55 PUSH EBP 04C8CFE9 8B6C24 6C MOV EBP,DWORD PTR SS:[ESP+6C] 04C8CFED 56 PUSH ESI 04C8CFEE 8BF1 MOV ESI,ECX 04C8CFF0 8B08 MOV ECX,DWORD PTR DS:[EAX] 04C8CFF2 FF15 9496D504 CALL DWORD PTR DS:[4D59694] ; i3RenderContext::IsReady(void)
BYTE patRenderContext[] = "\xA1\x00\x00\x00\x00\x53\x8B\x5C\x24\x6C\x55";
char maskRenderContext[] = "x????xxxx?x";
bool Hook()
{
while( i3SceneDx == NULL )
i3SceneDx = GetModuleHandleA( "i3SceneDx" );
Log->Write( "i3SceneDx %p", i3SceneDx );
DWORD addrRenderContext = FindPattern( i3SceneDx, 0, patRenderContext, maskRenderContext, 1 );
Log->Write( "addrRenderContext %p", addrRenderContext );
if( addrRenderContext == 0 )
return false;
while( (i3RenderContext*)addrRenderContext == NULL ||
*(i3RenderContext**)addrRenderContext == NULL ||
**(i3RenderContext***)addrRenderContext == NULL ||
***(i3RenderContext****)addrRenderContext == NULL )
Sleep(10);
pRenderContext = ***(i3RenderContext****)addrRenderContext;
Log->Write( "pRenderContext %p", pRenderContext );
while( pRenderContext->isReady == 0 )
Sleep( 10 );
Log->Write( "pRenderContext->isReady %d", pRenderContext->isReady );
// put hook now
}