2016-07-10 13 views
1

Ich möchte einen Debugger an einen anderen Prozess anhängen, aber ich muss den Debugger anhängen, ohne einen neuen Thread zu erstellen. Wenn ein Debugger an einen Prozess angehängt wird, erstellt er normalerweise einen neuen Thread innerhalb des Zielprozesses und führt eine Routine namens ntdll!DbgBreakPoint innerhalb des erstellten Threads aus.Debugger an einen Prozess anhängen, ohne einen neuen Thread zu erstellen

Diese Routine führt die int3 Anweisung, die der Debugger die Kontrolle über die Ausführung nehmen können so, wenn der Debugger anspringt, ist dies, wie der Call-Stack wie rechts schaut nach den Debugger Befestigung:

ntdll!DbgBreakPoint 
ntdll!DbgUiRemoteBreakin+0x39 
KERNEL32!BaseThreadInitThunk+0x24 
ntdll!__RtlUserThreadStart+0x2f 
ntdll!_RtlUserThreadStart+0x1b 

Der Grund Warum muss ich einen Debugger unter diesen Einschränkungen anfügen, weil ich die Erstellung neuer Threads in Ntdll debuggen und Debuggen muss, nachdem Threads bereits erstellt wurden, macht keinen Sinn.

Da ich die Kontrolle über das Zielprogramm habe, kann ich den Programmzähler des Hauptthreads auf den von mir gewünschten Wert setzen, und deshalb kann ich die erste ausgeführte Anweisung irgendwo im Code setzen, aber ich kann das nicht fangen Ausnahme, weil wenn ich einen Debugger angehängt habe, sind bereits Threads erstellt und ich komme auf das gleiche Problem zurück.

Ich habe bereits versucht, mein Problem mit seltsamen WinDbg/ollydbg/x64dbg Einstellungen zu beheben, aber ich konnte es nicht funktionieren. Also zu meinem Punkt, gibt es eine Debugger/Debugging-Methode, die mir erlauben, an einen Remote-Prozess anhängen, ohne einen Remote-Thread zu erstellen und meine int 3 fangen?

Hilfe wird geschätzt!

+0

ja, gibt es :) absolut nicht brauchen, erstellen neue Thread auf Anhang – RbMm

+0

@RbMm, Hallo, können Sie bitte erarbeiten? – Aviv

+0

für Start Debug bereits laufenden Prozess - alles, was wir brauchen - ZwDebugActiveProcess API aufrufen, Remote-Thread in Debugee (DbgUiRemoteBreakin) absolut nicht brauchen, ich weiß nicht, aus welchem ​​Grund dies getan. Ich habe einen eigenen geschriebenen Debugger, einer ist der beste von allen existierenden. aber das ist nur meine in diesem Moment – RbMm

Antwort

0

gefunden einfach die Lösung,

Es gibt eine Option in WinDbg "Nicht-invasive Debuggen" genannt. Mit dieser Option versucht der Debugger nicht, einen neuen Thread innerhalb des Zielprozesses zu erstellen.

es zu aktivieren, wenn man sich nur auf ein neues Verfahren Anbringen dieses Kontrollkästchen:

enter image description here

Und Sie sind gut zu gehen!

Danke an RbMm für die Klärung dieses Problems!

- EDIT -

Diese Lösung lassen Sie den Code und Register anzeigen, aber es bricht nicht den Debugger auf int 3 Anweisungen und daher ist es keine gute Lösung.

+0

aber sind das echte Debugging? "Der Prozess kann untersucht werden, aber Debug-Ereignisse werden nicht empfangen" - ich habe auch diese Option in selbst Debugger9atach ohne Debug und suspend!) – RbMm

+0

was Sie gefunden - ist kein Debugging und Lösung für Sie – RbMm

+0

ist Ihre Lösung bricht "Int 3"? – Aviv