Ma saan selle saavutamiseks välja mõelda kahte meetodit:
-
RunTo
. - 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:
- seadistage määratud aadressil katkestuspunkt.
- jälgige katkestuspunkti päästikut.
- 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:
-
idc.AddBptEx (ea, size, bpttype)
, et paremini kontrollida loodava katkestuspunkti tüüpi. -
idc. SetBptAttr (aadress, bptattr, väärtus)
murdepunkti saadaolevate atribuutide määramiseks.
-
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.