Sådan skelnes Windows-driveren fra dll

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg skal afvige to binære filer - en driver og en fælles dll. Så vidt jeg forstår, skal jeg se dele af disse filer (fx via DumpBin) og se om der er en INIT sektion. Er disse kriterier færdige?

Bedste reference


Du skal analysere det binære og se på Subsystem arkiveret af IMAGE\_OPTIONAL\_HEADER, hvis det er NATIVE, så er det en driver. Se nærmere på det følgende link:


http://msdn.microsoft.com/en-us/library/ms809762.aspx[16]

Andre referencer 1


Du skal bruge heuristics til at fastslå denne kendsgerning og være sikker i det omfang det er muligt. Problemet er, at der bogstaveligt talt findes native bruger-mode programmer (fx autochk.exe og DLL'er (ærligt intet kommer i tankerne for hånden, men jeg har set dem som en del af native programmer, der gør ting før winlogon.exe]] får køre) samt kerne-modparter (bootvid.dll, hal.dll og kernen i en af ​​dens forskellige former ntoskrnl.exe).


Så for at fastslå det er en chauffør kan du prøve følgende:



  1. IMAGE\_OPTIONAL\_HEADER::SubSystem, som påpeget, skulle betyde, at det er 'native' (dvs. har intet subsystem: IMAGE\_SUBSYSTEM\_NATIVE)

  2. Bekræft, at IMAGE\_FILE\_HEADER::Characteristics er ikke DLL (hvilket vil betyde, at det er en kerne- eller brugermodus DLL, check mod IMAGE\_FILE\_DLL)

  3. Sørg for, at det gør eller ikke ikke importerer ntdll.dll eller en anden brugerdrift DLL eller tværtimod, at den importerer en af ​​kernelmodulmodulerne (ntoskrnl.exe, hal.dll, bootvid.dll) for at fastslå om det ville køre i kerne- eller brugertilstand.



Strukturerne og definerer er alle inkluderet i winnt.h.


Kernen:



  • Opret delsystemet (kun IMAGE\_SUBSYSTEM\_NATIVE er interessant for dit tilfælde)

  • fastslå, at det er en DLL eller ej

  • fastslå, om det forbinder mod komponenter i bruger- eller kernemodus