Küsimus:
Kuidas saab IDApythoni abil seada murdepunkti ja saada registri väärtust
user121314
2016-08-28 01:37:09 UTC
view on stackexchange narkive permalink

Kuidas ma saan määrata murdepunkti ja saada IDApythonis registri EAX väärtuse?

Soovin määrata katkestuspunkti, näiteks aadressil 00b27223 ja tahan igal vaheajal enne selle konkreetse aadressi käivitamist saada tekstina registri EAX väärtuse.

example

üks vastus:
NirIzr
2016-09-03 00:56:41 UTC
view on stackexchange narkive permalink

Ma saan selle saavutamiseks välja mõelda kahte meetodit:

  1. RunTo.
  2. Katkestuspunkti seadistamine, silurite sündmuste ühendamine ja dbg_bpt

1. Kasutamine RunTo

See on peaaegu tühine, kuid ei anna sama palju kontrolli kui teine ​​lähenemine. See võib olla parem kiirete ja määrdunud lahenduste jaoks, kui te seda järgite.

Helistamine idc.RunTo (ea) viib protsessi läbi kuni ea on saavutatud, mis võimaldab teil seejärel helistada idc.GetRegValue (nimi) , et saada väärtuse EAX.

Teatud tingimused ( nagu visatud erand või tabatakse teistsugune murdepunkt) põhjustab RutTo naasmise enne, kui määratud ea on saavutatud. Seejärel võiksite helistada numbrile idc.GetDebuggerEvent , et teada saada, mis juhtus, kuid kui te seda teete, soovitan minna üle teisele lähenemisviisile.

Märkus RunTo käivitab ka protsessi, kui käimasolevat protsessi pole.

2. Murdepunkti seadmine, silurite sündmuste sidumine ja dbg_bpt

rakendamine on turvalisem ja minu jaoks soovitatav lähenemisviis, samas kui selle rakendamine on raskem, võimaldab teiste katkestuspunktide õigesti käsitsemist ja suuremat kontrolli.

Selleks peate tegema kolme asja:

  1. seadistage määratud aadressil katkestuspunkt.
  2. jälgige katkestuspunkti päästikut.
  3. Ja järgige lõpuks seda.

Pange määratud aadressil katkestuspunkt

Selle saavutamiseks on kõige põhilisem meetod, helistades idc.AddBpt (ea) , mis määrab tarkvara sellele aadressile täitmise katkestuspunkti jaoks.

Lisameetodid, mida võite kasutada, on järgmised:

  1. idc.AddBptEx (ea, size, bpttype) , et paremini kontrollida loodava katkestuspunkti tüüpi.
  2. idc. SetBptAttr (aadress, bptattr, väärtus) murdepunkti saadaolevate atribuutide määramiseks.
  3. idc.SetBptCnd (ea, cnd) / idc. SetBptCndEx (ea, cnd, is_lowcnd) , et määrata murdepunkti päästiku tingimus.

Täpsete üksikasjade saamiseks lugege dokumentatsiooni.

Murdepunkti päästiku jälgimine

Selleks peate installima silumisklubi (mis tahes klassi, mis pärib idaapi.DBG_Hooks ), mis rakendab dbg_bpt (tid, ea) meetod, mis kirjeldab lõime ID ja lineaarset aadressi, milles katkestuspunkt vallandas. Kui tagastate 0 koodilt dbg_bpt , peaks see takistama IDA-l kasutajale teada andmast, et see käivitati (eeldades, et käsitsete seda sisemiselt).

Peate oma klassi instantsima ja helistama eksemplari Meetodid Hook ja Unhook selle toimimiseks. Pange tähele, et parem on konksude installimine enne katkestuspunkti loomist.

Ja lõpuks tegutsege selle nimel

Siluri töötamise ajal saate helistada idc.GetRegValue (name ) andes registrinime selle vahetu väärtuse saamiseks.



See küsimus ja vastus tõlgiti automaatselt inglise keelest.Algne sisu on saadaval stackexchange-is, mida täname cc by-sa 3.0-litsentsi eest, mille all seda levitatakse.
Loading...