Je me disais aussi, le temps de préparer la réponse, la question avait disparrue
Voici une version C++ de ce que j'ai compris.
void PatchINT3()
{
OSVERSIONINFO osvi = {0};
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osvi);
if(osvi.dwPlatformId != VER_PLATFORM_WIN32_NT)
return;
HINSTANCE hInstance = GetModuleHandle("NTDLL.DLL");
if(hInstance == NULL)
return;
void* p = (void*)GetProcAddress(hInstance, "DbgBreakPoint");
if( p == NULL)
return;
__try
{
if( *((BYTE*)p) != 0xCC)
return;
BYTE nop = 0x90;
DWORD BytesWritten;
if(WriteProcessMemory(GetCurrentProcess(), p, @nop, 1, &BytesWritten) &&
BytesWritten == 1)
{
FlushInstructionCache(GetCurrentProcess(), p, 1);
}
}
__except((GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION) ?
ECEPTION_EXECUTE_HANDLER :
EXCEPTION_CONTINUE_SEARCH )
{
}
}