Pitanje:
Tehnike uklanjanja pogrešaka na Unix platformama?
perror
2013-03-20 14:13:52 UTC
view on stackexchange narkive permalink
Tehnike uklanjanja pogrešaka na Unix platformama?
"sve tehnike koje sam pronašao na Internetu lako su se mogle riješiti čim se shvati tehnika protiv otklanjanja pogrešaka" <- to je slučaj kod većine njih, ali nije razlog da ih se samo zbog toga popusti.
Možda biste željeli provjeriti [ovu] [1] temu. [1]: http://reverseengineering.stackexchange.com/questions/1930/detecting-tracing-in-linux
Dva odgovori:
#1
+20
Igor Skochinsky
2013-03-21 00:27:37 UTC
view on stackexchange narkive permalink

Evo nekih koje sam vidio ili čuo:

  • Uklanjanje zaglavlja odjeljaka. Jednostavna i potpuno legalna radnja koja zaustavlja GDB na mrtvom putu. Ne radi protiv nekih drugih programa za otklanjanje pogrešaka (npr. IDA). To se može učiniti pomoću alata sstrip .

  • Korištenjem funkcije syscall ili uputa za izravne syscallove umjesto pozivanja određenih funkcija poput ptrace () . Može se pobijediti postavljanjem točke prekida na funkciju syscall ili samo korakom kroz datoteku, ali može biti neočigledno ako za nju ne znate.

  • Izvođenje akcija uklanjanja pogrešaka prije main () , npr u konstruktorima globalnih objekata ili pomoću __attribute __ ((konstruktor)) . Budući da GDB obično postavlja početnu točku prekida u main () , on se brine o zadanoj situaciji. Zaobilazno rješenje je jednostavno: stavite točku prekida na stvarnu ulaznu točku datoteke ( info datoteka u GDB-u).

  • Šalje sebi signale povezane s otklanjanjem pogrešaka poput SIGTRAP . (Imajte na umu da se to može zanemariti s handle SIGTRAP nostop u GDB-u.)

  • Forkiranje i praćenje samog sebe s ptrace .

  • Umetanje lažnih točaka prekida: Umetanjem int3 / 0xcc prisilit će se program za pronalaženje pogrešaka da se zaustavi na tim bajtovima jer će se tretirati kao točke prekida softvera. Ako su brojni, moglo bi znatno usporiti analizu.

  • Otkrivanje točke prekida: Vidio sam ovu tehniku ​​u ovom radu, možete priložiti funkciju koja aktivirat će se kada se uspostavi točka prekida. Ovaj rad pokriva i neke druge trikove.

Ok, ovo se čini razumnim popisom tehnika, ali ništa iznenađujuće do sada. Nedostaju vam trikovi prijelomnih točaka (umetanje lažnih prijelomnih točaka da bi se zbunio program za pronalaženje pogrešaka prilikom PTRACEd i provjera heša sljedećeg bloka koda da biste vidjeli jesu li umetnute nove točke prekida ili nisu). No, biste li znali rad koji opisuje sve ove tehnike za Unix (znam neke radove za MS-Windows, ali nijedan za Unix sustave).
@Emmanuel: slobodno ga uređujte i dodajte više, zato sam to i napravio wiki. Ne znam nijedan rad, ali možda možete pronaći još trikova u nečemu poput Phracka.
Moj je IDA umro dok je pokušavao učitati ARM binarni zapis koji je imao zaglavlja odjeljaka. Dakle, broj 1 još uvijek može biti koristan trik (iako sam u konačnici napisao skriptu za rekonstituciju zaglavlja).
@nneonneo: ako se to dogodi s trenutnom verzijom, pošaljite izvještaj o grešci. Hvala.
Prava zabava je fork i koristite ptrace () na sebi kao oblik IPC-a.
#2
+9
Andrew
2013-03-20 19:31:52 UTC
view on stackexchange narkive permalink

Koliko razumijem tehnologiju za uklanjanje pogrešaka, to je igra mačke i miša (ili mačke i mačke). Tehnika djeluje dok je protivnička strana ne shvati i tada više ne djeluje. Mislim da je na kraju prednost na programu za ispravljanje pogrešaka. Razmotrite dinamičke binarne instrumentacije ili sustave virtualnih strojeva. Prisutnost DBI ili emulacije možete otkriti tražeći pukotine ili greške u emulaciji platforme, ali to su samo pogreške u softveru za emulaciju / prijevod. Ako ste imali "savršeni" sustav emulacije, tada otklonjena pogreška nije mogla znati da li joj se prati?

Stoga mislim da je najbolje što možete učiniti sitnice oko kojih se lako može riješiti. Shiva sustav i dalje mislim da predstavlja "u redu" zaštitu od otklanjanja pogrešaka na Unix platformama, jer dešifrira male dijelove sebe da se pokreću na zahtjev, a zatim ih ponovno šifrira, koliko se sjećam.

Označio bih Shiva sustav kao napredni paker, ali zapravo ne kao tehniku ​​protiv otklanjanja pogrešaka (čak i ako je njegov glavni učinak korištenje programa za otklanjanje pogrešaka izuzetno dosadnim jer je vaš prozor u memoriji u kojem možete učinkovito postaviti točke prekida izuzetno malen u usporedbi s "normalan" program).


Ova pitanja su automatski prevedena s engleskog jezika.Izvorni sadržaj dostupan je na stackexchange-u, što zahvaljujemo na cc by-sa 3.0 licenci pod kojom se distribuira.
Loading...