B
boss3D
Guest
Hallo!
Folgende Aufgabenstellung:
Implementieren Sie zumindest folgende Anti-Debugging-Mechanismen:
- IsDebuggerPresent()
- Unhandled Exception
- OutputDebugString()
Testen Sie die Ausführung sowohl im Debugger als auch ohne.
Hier meine Lösung:
Das Problem:
Führe ich in Visual Studio 2013 "Start Without Debugging" aus, kriege ich trotzdem "Debugger detected by OutputDebugString!".
Führe ich in Visual Studio 2013 "Start Debugging" aus, kriege ich (korrekterweise) "Debugger detected by IsDebuggerPresent!". Danach beendet sich das Programm (wie's sein soll).
^^ Woran könnte das Problem bei OutputDebugString liegen? Ich sehe den Fehler nicht ...
Danke für baldige Antworten!
Folgende Aufgabenstellung:
Implementieren Sie zumindest folgende Anti-Debugging-Mechanismen:
- IsDebuggerPresent()
- Unhandled Exception
- OutputDebugString()
Testen Sie die Ausführung sowohl im Debugger als auch ohne.
Hier meine Lösung:
Code:
#include <windows.h>
#include <stdio.h>
LONG WINAPI exHandler(PEXCEPTION_POINTERS pExecpPointers) {
SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)pExecpPointers->ContextRecord->Eax);
pExecpPointers->ContextRecord->Eip += 2;
return EXCEPTION_CONTINUE_EXECUTION;
}
int main(void) {
if (IsDebuggerPresent()) {
MessageBox(NULL, L"Debugger detected by IsDebuggerPresent!", L"Debugger detected", MB_OK);
exit(0);
} else {
MessageBox(NULL, L"No Debugger detected.", L"No Debugger", MB_OK);
}
DWORD Val = 666;
SetLastError(Val);
OutputDebugString(L"anything");
if (GetLastError() == Val) {
MessageBox(NULL, L"Debugger detected by OutputDebugString!", L"Debugger detected", MB_OK);
exit(0);
} else {
MessageBox(NULL, L"No Debugger detected.", L"No Debugger detected", MB_OK);
}
int flag = 0;
SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)exHandler);
__asm {
xor eax, eax;
div eax;
}
MessageBox(NULL, L"No Debugger detected.", L"No Debugger", MB_OK);
printf("Hello, world!\n");
return 0;
}
Führe ich in Visual Studio 2013 "Start Without Debugging" aus, kriege ich trotzdem "Debugger detected by OutputDebugString!".
Führe ich in Visual Studio 2013 "Start Debugging" aus, kriege ich (korrekterweise) "Debugger detected by IsDebuggerPresent!". Danach beendet sich das Programm (wie's sein soll).
^^ Woran könnte das Problem bei OutputDebugString liegen? Ich sehe den Fehler nicht ...
Danke für baldige Antworten!