Hola amigos, uno de los trucos que quiero implementarlo en mi clase para crear loader debuggers es saltarse la protección antidebugger para Windows 10 basada en RaiseException para provocar evento OutputDebugEvent. Lo que hace es que si no hay debugger no se envía el mensaje y da una excepción que la aplicación controla y si hay debugger no se produce excepción y por ahí nos pilla. Os pongo un código de ejemplo:
void __stdcall _OutputDebugStringW(LPCWSTR lpOutputString)
{
char outputDebugStringBuffer[1000] = {0};
WideCharToMultiByte(CP_ACP, 0, lpOutputString, -1, outputDebugStringBuffer, sizeof(outputDebugStringBuffer), 0, 0);
ULONG_PTR args[4];
//unicode
args[0] = (ULONG_PTR)wcslen(lpOutputString) + 1;
args[1] = (ULONG_PTR)lpOutputString;
//ansi for compatibility
args[2] = (ULONG_PTR)wcslen(lpOutputString) + 1;
args[3] = (ULONG_PTR)outputDebugStringBuffer;
__try
{
RaiseException(0x4001000A, 0, 4, args);//DBG_PRINTEXCEPTION_WIDE_C
ShowMessageBox("DBG_PRINTEXCEPTION_WIDE_C -> Debugger detected");
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
ShowMessageBox("DBG_PRINTEXCEPTION_WIDE_C -> Debugger NOT detected");
}
}
La cosa es ¿Como puedo implementar un truco para saltarse esa protección? Se me ocurrió poner un bp en esa api y estando en ese bp devolverle EXCEPTION_EXECUTE_HANDLER ¿Alguna sugerencia?