Kysymys:
Kuinka voit purkaa Windows-ohjaimen luotettavasti manuaalisesti?
Ange
2013-03-30 01:43:20 UTC
view on stackexchange narkive permalink

Kun purat Windows-käyttäjätilan suoritustiedoston manuaalisesti, voit helposti murtautua sen EntryPointiin (tai TLS: ään) ja seurata, kunnes saavut alkuperäiseen EntryPointiin. Tämä ei kuitenkaan ole mahdollista pakatulla ohjaimella.

Kuinka voit purkaa Windows-ohjaimen luotettavasti manuaalisesti?

Kuka ei kaipaa niistä suurinta, Softice
Neljä vastused:
mrduclaw
2013-03-30 07:19:14 UTC
view on stackexchange narkive permalink

Pidän vastauksestasi alijärjestelmän muuttamisesta, varsinkin jos et ole ytimen virheenkorjauksen ystävä. Olen kuitenkin suuri Windbgin fani. Tapa, jolla teen tämän:

  1. Kytke ytimen virheenkorjaajani virtuaalikoneeksi
  2. Muuta ohjaimen syöttökohdan ensimmäisestä tavusta INT3 (0xCC).
  3. Korjaa PE-tarkistussumma (olen fani antaa pefile: n tehdä tämän työn puolestani).
  4. Lataa ohjain virtuaalikoneeseen ( OSR: llä on loistava ohjaimen latauslaite).

Ytimen tulisi soittaa ohjaimellesi DriverEntry () ja murtautua virheenkorjaajaan puolestasi. Sitten voit jäljittää koodia, kunnes löydät OEP: n, kuten olisit tehnyt joka tapauksessa. Suurin etu, jonka näen tälle menetelmälle, on se, että sinun ei tarvitse väärentää ytimen DLL-tiedostoja tai puheluita, joita ohjain saattaa tehdä purkamisen aikana, ja se toimii x64: llä.

Saatat kuitenkin lyödä seinää uudemmissa Windows-versioissa. OP: n vastaus on tässä mielessä monipuolisempi, mutta sinun on varmasti ammattimaisempi :) ... älä myöskään unohda `devconia 'kuljettajan lataustarpeisiin (mukana lähde DDK: issa / WDK: ssa)
@0xC0000022L Minulla ei ole ollut ongelmia tämän kanssa uudemmissa Windows-versioissa; tee vain normaalia tavaraa, kuten ota testi-allekirjoitus käyttöön jne. Tosin en ole kokeillut sitä Windows 8: ssa. Muuttuiko jotain?
@mrduclaw Kuinka vaihdan kuljettajan sisääntulokohdan ensimmäisen tavun INT3: ksi?! ??
@AminM Anteeksi myöhäisestä vastauksesta, en ole tarkistanut tätä tiliä pitkään aikaan. Avaa tiedosto IDA: ssa, etsi tavut, missä lähtökohta on. Avaa se hexeditorissa ja chnage se 0xCC (katkaisupiste). Tai voit todennäköisesti muokata sitä suoraan IDA: ssa näinä päivinä. Onnea!
Ange
2013-03-30 01:43:20 UTC
view on stackexchange narkive permalink
  1. vaihda ohjaimen alijärjestelmä GUI: ksi (muuttamalla se käyttäjätilan binaariksi)
  2. tyhjennä tuonnin RVA tai käytä joukkoa väärennettyjä ytimen DLL-tiedostoja (vain 32 bittiä) tuonnin lataamisen mahdollistamiseksi
  3. käynnistä virheenkorjausohjelmaasi ja jatka kuin käyttäjämuoto - sinun on todennäköisesti simuloitava joitain sovellusliittymäkutsuja ennen kuin saavut alkuperäiseen EntryPointiin. >
ekse
2013-08-14 01:15:14 UTC
view on stackexchange narkive permalink

Vaihtoehto DriverInit-toiminnon korjaamiselle INT3: lla on asettaa katkaisupiste IopLoadDriver -toimintoon, joka on vastuussa DriverInitin kutsumisesta. Windows XP SP3: ssa katkaisupiste tulisi lisätä kohtaan IopLoadDriver + 0x66a , joka on kutsun sanasana ptr [edi + 2Ch] (0x2C on _DRIVER_OBJECT.DriverInit).

  1. Etsi IopLoadDriver x nt -toiminnolla! IopLoadDriver
  2. Lisää katkaisupiste IopLoadDriver + 0x66a -kansioon
  3. Lataa ja käynnistä ohjain

Muiden Windows-versioiden siirtymät:

  • Windows 7 Pro SP1 32-bittinen saksa: nt! IopLoadDriver + 0x7eb
  • Windows 7 Ultimate 64-bit Yhdysvallat: nt! IopLoadDriver + 0xA04
  • Windows 10 Pro x64 US: nt! IopLoadDriver + 0x51C (koontiversio 10586.420)

(Jos sinulla on siirtoja muille Windows-versioille , muokkaa tätä vastausta)

Mukava vähän tietoa. On aina arvokasta saada palasia, jotka voit koota taaksepäin. Muista myös, että saat hyvän arvauksen Windows-toteutuksen yksityiskohdista katsomalla ReactOS-lähdekoodia.
blabb
2013-08-14 05:43:33 UTC
view on stackexchange narkive permalink

nt! IopLoadDriver epäsuoraa kutsua käytetään vain SERVICE_DEMAND -aloitusohjaimen merkintään

käynnistyslatausajureille, jotka sinun on katkaistava nt! IopInitializeBuiltInDriver myös epäsuora puhelu

näet tämän linkin lyhyen esimerkin viestistä # 17 & # 18

http://www.osronline.com/showthread.cfm ? link = 231280

tämä on lepotilassa oleva skripti (hieman muokattu käyttämään gc: tä (siirry ehdollisesta sijasta suositellun sijaan), joka odottaa ikuisesti ja tulostaa! drvobj -tietoja milloin tahansa ohjain ladataan ytimen virheenkorjausistuntoon

ei sanaa kääritty, komennon tulisi olla yhdellä rivillä

  .foreach / pS 1 / ps 10 (paikka {# kutsu * dword * ptr * \ [* \ + * \] nt! IopInitializeBuiltinDriver}) {bu paikka ".printf \"% msu \\ n \ ", poi (esp + 4); r $ t0 = poi (esp); gu ;! drvobj $ t0 2; gc "}. foreach / pS 1 / ps 10 (paikka {# kutsu * dword * ptr * \ [* \ + * \] nt! IoploadDriver}) {bu paikka" .printf \ "% msu \\ n \ ", poi (esp + 4); r $ t1 = poi (esp); gu;! drv obj $ t1 2; gc "}  

xp sp3 vm

yhdistetyssä kd-istunnossa tee sxe ibp; .reboot kd pyytää ensimmäisen tauon uudelleenkäynnistyksessä (vastaa / break switch boot.ini -ohjelmassa), kun se rikkoo tämän komentosarjan suorittamisen.

  $$ >a< "thisscript.extension"  koodi> 

kaikkien järjestelmäajurien alkupisteiden ja niiden ohjainobjektien tulostamisen lisäksi

jos sovelluksesi lataa ylimääräisen ohjaimen, myös niiden tiedot tulostetaan

esimerkkilähtö sysinternals dbgview -kohteelle, joka on avattu kohdevm: ssä

dbgv.sys-syötekohta kutsutaan, kun merkitset valinnan ytimen sieppauksen sallimiseksi (ctrl + k)

  \ REGISTRY \ MACHINE \ SYSTEM \ ControlSet001 \ Services \ DBGV *** VIRHE: Moduulin lataus on valmis, mutta Dbgv.sysDriver-objektille (ffbd6248) ei voitu ladata symboleja: \ Driver \ DBGVDriverEntry: f6d89185 DbgvDriverStart : 00000000 AjuriPoista: 00000000 AddDevice: 00000000 Lähetysrutiinit:
[00] IRP_MJ_CREATE f6d87168 Dbgv + 0x1168 [01] IRP_MJ_CREATE_NAMED_PIPE 804fa87e pistettä! IopInvalidDeviceRequest [02] IRP_MJ_CLOSE f6d87168 Dbgv + 0x1168 [03] IRP_MJ_READ 804fa87e pistettä! IopInvalidDeviceRequest [04] IRP_MJ_WRITE 804fa87e pistettä! IopInvalidDeviceRequest [05] IRP_MJ_QUERY_INFORMATION 804fa87e pistettä! IopInvalidDeviceRequest 06 IRP_MJ_SET_INFORMATION 804fa87e pistettä! IopInvalidDeviceRequest [07] IRP_MJ_QUERY_EA 804fa87e pistettä! IopInvalidDeviceRequest [08] IRP_MJ_SET_EA 804fa87e pistettä! IopInvalidDeviceRequest [09] IRP_MJ_FLUSH_BUFFERS 804fa87e pistettä! IopInvalidDeviceRequest [0a] IRP_MJ_QUERY_VOLUME_INFORMATION 804fa87e pistettä! IopInvalidDeviceRequest [0b] IRP_MJ_SET_VOLUME_INFORMATION 804fa87e pistettä! IopInvalidDeviceRequest [0C] IRP_MJ_DIRECTORY_CONTROL 804fa87e nt! IopInvalidDeviceRequest [0d] IRP_MJ_FILE _SYSTEM_CONTROL 804fa87e pistettä! IopInvalidDeviceRequest [0e] IRP_MJ_DEVICE_CONTROL f6d87168 Dbgv + 0x1168 [0f] IRP_MJ_INTERNAL_DEVICE_CONTROL 804fa87e pistettä! IopInvalidDeviceRequest [10] IRP_MJ_SHUTDOWN 804fa87e 11 pistettä! IopInvalidDeviceRequest IRP_MJ_LOCK_CONTROL 804fa87e 12 pistettä! IopInvalidDeviceRequest IRP_MJ_CLEANUP 804fa87e pistettä! IopInvalidDeviceRequest [13] IRP_MJ_CREATE_MAILSLOT 804fa87e 14 pistettä! IopInvalidDeviceRequest IRP_MJ_QUERY_SECURITY 804fa87e 15 pistettä! IopInvalidDeviceRequest IRP_MJ_SET_SECURITY 804fa87e 16 pistettä! IopInvalidDeviceRequest IRP_MJ_POWER 804fa87e 17 pistettä! IopInvalidDeviceRequest IRP_MJ_SYSTEM_CONTROL 804fa87e 18 pistettä! IopInvalidDeviceRequest IRP_MJ_DEVICE_CHANGE 804fa87e 19 pistettä! IopInvalidDeviceRequest IRP_MJ_QUERY_QUOTA 804fa87e pistettä! IopInvalidDeviceRequest
[1a] IRP_MJ_SET_QUOTA 804fa87e nt! IopInvalidDeviceRequest [1b] IRP_MJ_PNP 804fa87e nt! IopInvalidDeviceRequest  


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...