Soovin seadistada virtuaalmasina monitori, kasutades Microsofti Hyper-V, VMware vSphere / ESX, Xen või mõnda muud alternatiivset hüpervisori lahendust, mis on võimeline jälgima külalise OS-i (VMM-i VM) käivitamist .
Eelkõige tahaksin, et saaksin vaadata külalise OS-i juhiseid enne, kui neid töötab virtuaalne protsessor. Lisaks tahaksin ka, et saaksin seadistada monitorid mõnele külalis-OS-i protsessori registrile, nii et kui neid muudetakse (nt kirjutades MOV-käskudega), peatatakse külalise olek kirjutamise kohas (ja rip / eip osutab sellele juhisele).
Olen otsinud VMM-i lahendust, mis paljastaks viisi, kuidas oma eesmärke täita, kuid ma ei leidnud midagi.
Kas keegi teab, mis on parim viis sellisele asjale läheneda? Kas hüpervisori kohta on soovitusi, mida peaksin kasutama? (Ma arvan, et Xeni oleks ilmselt kõige lihtsam muuta ja siluda, kuna see on avatud lähtekoodiga)
Suur tänu.
Tervist,
MUUDA: proovin ennast paremini selgitada. Proovin siluda tuumarežiimis (x86-64) töötavat koodi. Praegu kasutan WinDbgi abil ring0-koodi silumiseks virtuaalmasinas (VMware).
Kui saaksin, oleksin rohkem kui õnnelik, kui määraksin mälupesale riistvaralise murdepunkti (ba) ja näeksin, mis sinna loeb / kirjutab. Probleem on selles, et ring0-s töötav kood keelab minu riistvara katkestuspunktid. Põhimõtteliselt salvestab see kood dr7 registri sisu välja, kustutab selle, pääseb juurde mällu, mida ma vaatan (mällu, mille riistvara katkestuspunkti seadsin) ja lõpuks taastab dr7 registri pärast juurdepääsu. Seega ei tabata minu riistvara murdepunkti kunagi. See tähendab, et ma ei saa kunagi aru, kust mäluga manipuleeriti. Piisab sellest, kui öelda, et tarkvara murdepunktid pole vastuvõetav alternatiiv. Lisaks olen proovinud ka dr7-s üldtuvastusbitiga ringi käia ja installinud oma lõksuhalduri, et aru saada, kas keegi kruvib minu riistvaraliste murdepunktidega. Kuid see kood on üsna tark ja saab selle katsega kenasti hakkama (re: taastab vana konksu enne silumisregistrite juurde pääsemist).
Loodan, et näete nüüd minu mured. Selle ring0-ga töötava koodi käsitlemiseks pean töötama madalamal tasemel kui ring0. Ainus viis selleks on hüpervisor.
Tahaksin jälgida nt dr7 registri sisu ja vaadata, mis sellele juurde pääseb (loeb / kirjutab). Kui leian rikkekoodi RIP-i, saan sellest läbi astuda ja mõista rohkem, mida see teeb.