Kysymys:
Haarautuneen lapsen virheenkorjaus virheenkorjauksen estämässä crackmessa
robert
2015-12-29 17:31:52 UTC
view on stackexchange narkive permalink

Olen kiinnostunut virheenkorjauksen menetelmästä, joka on otettu käyttöön crackme-nimellä trace-p. Lapsiprosessi on haarautunut, joka kommunikoi vanhemman kanssa int3-ohjeiden avulla. Haluaisin debugoida lapsen. gdb on asettanut follow-fork-moodin , mutta gdb ei tunnista tiedostoa suoritettavana (todennäköisesti poistettujen osioihin liittyvien tietojen vuoksi). Radare2: n avulla voin purkaa ja jopa virheenkorjauksen, mutta en tiedä kuinka seurata lasta sen jälkeen, kun haarukka on tapahtunut. Haluan tehdä tämän, koska lapsi sisältää ohjeita, kuten:

  0x0804898a jmp dword [edx * 4 + 0x8049334]  

Haluan lopettaa tähän ja tutkia edx, jotta voin nähdä, mihin hyppy vie.

Olen kiinnostunut kaikista työkaluista tai menetelmistä, jotka pystyvät testaamaan aliprosessin.

Kolme vastused:
pancake
2015-12-30 23:50:01 UTC
view on stackexchange narkive permalink

Pysäytä virheenkorjain haarukan sattuessa käyttämällä dbg.forks = true . ja käytä sitten dp -näppäimiä luetteloon ja valitse seurattava pid.

jvoisin
2015-12-29 21:10:50 UTC
view on stackexchange narkive permalink

Ensimmäinen asia radare2: n kanssa on varmistaa, että käytössäsi on uusin git-versio.

Saadaksesi apua radare2: n komennoista, voit käyttää ? -merkki. Jos tarvitset apua määritysmuuttujista, voit käyttää e ?? (koska e? antaisi apua niiden käyttämisessä, ei luettelossa). Koska muuttujia on paljon, voit suodattaa ne sisäisellä grep-komennolla: ~.

 [0x00000000]> e ?? dbg dbg.args: Aseta ohjelman argit vianetsintää dbg.backend: Valitse virheenkorjausohjelman taustakuva dbg.bep: break on entrypoint (loader, entry, constructor, main) dbg.bpinmaps: Pakota katkaisupisteet olevan kelvollisen kartan sisällä dbg.bpsize: Ohjelmiston katkaisupisteiden koko dbg.btalgo: Valitse taaksepäin seuraamisen algoritmi dbg.btdepth: taaksepäin johtamisen syvyys dbg.clone: ​​Pysäytä suoritus, jos uusi ketju luodaan dbg.execs: Lopeta suoritus, jos uusi säie luodaan dbg.follow: Seuraa ohjelmalaskuria, kun pc> core-> offset + dbg.follow dbg.forks: Pysäytä suoritus, jos haarukka () on tehty (katso dbg.threads) dbg.libs: Jos asetettu pysäytetään ladattaessa vastaavaa libname dbg.profile: Polku RRunProfile-tiedostoon dbg.shallow_trace: Vältä seurannan aikana seuraavien puheluiden määrittämisen ulkopuolella dbg.slow: Näytä pino ja regit visuaalisesti tila hitaassa mutta tarkassa tilassa dbg.status: Aseta cmd.prompt arvoksi '.dr *' tai '.dr *; drd; sr PC; pi 1; s-' dbg.swstep: Pakota ohjelmistovaiheiden käyttö (koodianalyysi) + katkaisupiste) dbg.threads: Pysäytä kaikki ketjut, kun virheenkorjain katkeaa (katso dbg.forks) dbg.trace: Seuraa ohjelman suoritusta (katso asm.trace) dbg.trace.tag: Seurantatunniste dbg.unlibs: Jos asetettu pysäytetään, kun puretaan vastaavia libname [0x00000000]> 

Voit myös käyttää e dbg.<tab> , koska automaattinen täydennys on olemassa.

Etsimäsi variale on tietysti dbg.fork , jotta se olisi tosi: tämä pysäyttää prosessin, kun se kohtaa haarukan () . Voit muuttaa pid pidikkeellä d-command:

 [0x00000000]> d? ~ -Prosessilla | dH [käsittelijä] Siirtoprosessi uudelle käsittelijälle | tee avoin prosessi (lataa, aliakseksi 'oo') | dp [?] Luettelo, liitä prosessi- tai ketjutunnukseen | dx [?] Ruiskuta ja suorita koodi kohdeprosessissa (katso gs) [0x00000000]> dp? | Käyttö: dp # Prosessikomennot | dp Luettele nykyiset pid ja lapset | dp Luettele pid: n lapset dp * Luettele kaikki liitettävät pidit | dp = Valitse pid | dp- Dettach select pid | dpa Liitä ja valitse pid | dpe Näytä suoritettavan tiedoston polku | dpf Liitä pid-tyyppiseen tiedostoon fd // HACK | dpk Lähetä signaali prosessoitavaksi | dpn Luo uusi prosessi (haarukka) | dpnt Luo uusi ketju (klooni) | dpt Luettelo nykyisen pid | dpt Luettele prosessin säikeet | dpt = Liitä ketjuun [0x00000000] 
Olivier Lasne
2019-11-15 20:43:05 UTC
view on stackexchange narkive permalink

Radare2: lla on määritysmuuttuja dbg.follow.child , joka vastaa set follow-fork-mod -arvoa.

  e? ? ~ fork dbg.follow.child: Jatka lapsiprosessin seuraamista haarukalla. Oletusarvoisesti vanhemman prosessi on jäljitetty  

Aseta se virheenkorjaamaan aliprosessi komennolla

  e dbg.follow.child = true  

tai kun käynnistät tutkan -e :

  r2 -e dbg.follow.child = true -d ./my_binary 


Tämä Q & A käännettiin automaattisesti englanniksi.Alkuperäinen sisältö on saatavilla stackexchange-palvelussa, jota kiitämme cc by-sa 3.0-lisenssistä, jolla sitä jaetaan.
Loading...