Fråga:
Hur kan jag förhindra att immunitetsfelsökare / OllyDbg går sönder vid bifogning?
Polynomial
2013-04-12 14:40:40 UTC
view on stackexchange narkive permalink

När jag kopplar OllyDbg eller ImmunityDebugger till en process bryter det automatiskt körningen. Jag ansluter till en användarlägetjänst som körs som SYSTEM och behöver bara fånga undantag, så det här är inte perfekt. Finns det ett sätt att inaktivera break-on-attach-beteendet?

Du vill koppla felsökaren till programmet och omedelbart utföra en "fortsätt", är det korrekt?
Ganska mycket. Jag föredrar att helt undvika brytpunkten. Jag vill bara att felsökaren ska brytas om ett undantag inträffar.
@Polynomial kommer antidebugging-tekniker också att vara ett alternativ?
@DenisLaskov Ett alternativ? Jag är inte säker på att jag följer.
@Polynomial tja, min engelska är långt ifrån perfekt :) låt mig omformulera: Du letar efter sätt att skydda binär från fångas upp, eller efter sätt att titta på binär medan den körs, utan break-on-attach-teknik?
@0xC0000022L Jag felsöker en användarlägetjänst som körs som `SYSTEM` i Windows. Att ge en nedröstning för en sådan tvetydighet verkar också lite hård.
@Polynomial: uhm, varför är det tufft? a.) Jag kunde bara ha nedröstat och inte berättat varför, så du skulle aldrig ha känt b.) Nedröstningar på frågor påverkar din rep (sant) men inte min (så även om du kollade alla rep hela tiden du inte kunde berätta vem nedröstade) c.) Du kan helt enkelt redigera din fråga för att vara mindre tvetydig och jag drar gärna tillbaka min nedröstning - det kan till och med hamna som en uppröstning. Sist men inte minst står jag vid nedröstningen och anledningen till det. Nedröstningar om svar påverkar båda (-1 för väljare, -2 för svarande), btw. Men kolla in min profil som jag nedröstar också svarar;)
@0xC0000022L Fin. Fast.
-1
Tre svar:
waliedassar
2013-04-12 22:28:30 UTC
view on stackexchange narkive permalink

Förklaring

Avbrottet vid bifogning beror på att funktionerna ntdll DbgUiRemoteBreakin och DbgBreakPoint anropas. Om du kontrollerar funktionen kernel32 DebugActiveProcess som anropas av felsökaren, OllyDbg eller ImmunityDebugger, ser du ett samtal till CreateRemoteThread , CreateRemoteThreadEx eller ZwCreateThreadEx -funktionen beroende på ditt operativsystem.

Så antar jag att ett sätt att kringgå brytning är:

  1. felsöka felsökaren själv
  2. gå till DbgUiIssueRemoteBreakin -funktionen och se samtalet till funktionen som skapar fjärrtråden.
  3. ändra lpStartAddress parameter vid CreateRemoteThread / CreateRemoteThreadEx till DbgBreakPoint +1 RETN 0xC3

Plugin

Jag skapade ett OllyDbg v1.10 plugin som NOP är INT3 i DbgBreakPoint i processen med den PID du väljer. Det har bara testats på Windows 7.

Användning

Placera SilentAttach.dll i OllyDbg-katalogen, eld OllyDbg, tryck Alt + F12 och ange sedan process-ID för den process som du tyst vill bifoga till.

NBS Eftersom ingen paus inträffar extraherar OllyDbg inte mycket information. t.ex. lista över laddad modul. Så du måste aktivera sammanhanget med något som Alt + E och sedan Alt+C

Detta är förmodligen den bästa lösningen eftersom det inte rör sig med DbgBreakPoint. Bara NOP-samtalet till DbgBreakPoint i DbgUiRemoteBreakin i processen du vill koppla till.
Länken till plugin-programmet är död, har du någon chans att få det?
peter ferrie
2013-04-12 20:08:18 UTC
view on stackexchange narkive permalink

Ett sätt att göra detta är att ha en OllyDbg plug-in som utför en

WriteProcessMemory (hDebuggee, GetProcAddress (GetModuleHandle ("ntdll"), "DbgBreakPoint"), &mynop, 1 , NULL)

där hDebuggee är handtaget för processen som debugges (jag tror att OllyDbg har ett API för att hämta detta värde), och mynop är en variabel som innehåller en 0x90 byte (nop instruktion).

Det rensar int3-instruktionen som orsakar pausen, så att körningen kan fortsätta omedelbart. Det är ett vanligt anti-felsökningstrick.

Jag tar tillbaka det. Det var det vanliga OllyDbg bifogade frysfelet. Detta fungerar som avsett. Förmodligen den enklaste att genomföra!
Peter Andersson
2013-04-12 18:18:32 UTC
view on stackexchange narkive permalink

Jag tror inte att detta är möjligt utan att göra något extremt invasivt. Antingen lappa OllyDbg för att använda en alternativ ZwXX / NtXX-funktion som accepterar vissa flaggor eller lappar kärnan. Den första pausen görs av operativsystemet så att felsökaren kan samla in information om processen den kopplas till.

Jag har inte verifierat men jag antar att OllyDbg ringer till DebugActiveProcess för att fästa vid det. Dokumentationen för det säger:

När systemet kontrollerar processidentifieraren och fastställer att en giltig felsökningsbilaga görs returnerar funktionen SANT. Därefter förväntas felsökaren vänta på felsökningshändelser med funktionen WaitForDebugEvent. Systemet avbryter alla trådar i processen och skickar felsökningshändelser som representerar processens nuvarande tillstånd.

Och senare

När allt kommer omkring detta görs, systemet återupptar alla trådar i processen. När den första tråden i processen återupptas utför den en brytpunktsinstruktion som får en EXCEPTION_DEBUG_EVENT felsökningshändelse som skickas till felsökaren. Alla framtida felsökningshändelser skickas till felsökaren med den normala mekanismen och reglerna.

Sodomit. Jag antar att lokal kärnfelsökning på Windows inte fungerar på samma sätt?


Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...