Zwei "debugger detections": Wie genau nutzen?



  • Hi!

    Vorneweg, ich hab so gut wie keine Ahnung von ASM 😞
    Nun, ich habe zwei Codes gefunden, welche erkennen sollen, ob ein Prozess debugged wird (Ich verwende eigentlich C++ aber inline-asm im Visual Studio):

    __asm
    	{
    		push offset _seh
    
    		push fs:[0]
    		mov fs:[0], esp
    
    		int 2dh
    
    		nop
    		pop fs:[0]
    		add esp, 4
    
    		; debugger detected
    
    		_seh:
    
    		; debugger not detected
    	}
    
    __asm
    	{
    		push offset not_debugged
    
    		push fs:[0]
    		mov fs:[0], esp
    
    		push 1234h ;invalid handle
    		call CloseHandle
    
    		; debugger detected
    
    		not_debugged:
    	}
    

    Beim ersten Code habe ich das Problem, dass wenn kein Debugger entdeckt wird, das Programm sofort schließt. Ich denke, ich muss die Exception abfangen, aber wie?

    Beim zweiten Code ist das Problem, dass wenn kein Debugger entdeckt wird, das Programm sofort schließt und wenn ein Debugger entdeckt wird, das Programm bei der nächsten Anweisung nach dem asm-Block crasht mit "Unhandled exception: Privileged instruction" (Wobei das vielleicht gewollt ist, keine Ahnung, aber ohne Debugger soll es weiterlaufen).

    Könnt ihr mir Tipps geben, wie ich diese beiden Methoden richtig nutze?
    Wäre sehr dankbar!




Anmelden zum Antworten