SSDTInfo

aneb co vše se skrývá v tabulkách systémových volání

Pod pojmem SSDT (System Service Descriptor/Dispatch Table) si většina z lidí znalých jádra Windows představí datové struktury, které zajišťují správné fungování mechanismu systémových volání. Jejich modifikací lze monitorovat a ovlivňovat nejen chování aplikací.

Protože mě obsah těchto tabulek odjakživa zajímal a různé bezpečnostní aplikace jej nezobrazovaly příliš podrobně, rozhodl jsem se napsat utilitu SSDTInfo, která najde a zobrazí všechny dostupné informace.

SSDTInfo dokáže zobrazit obecné informace o tabulkách systémových volání, mezi které patří obsah jejich podtabulek a vlastnosti jednotlivých systémových služeb z toho plynoucí. Pomocí menu Tabulka lze určit, jakou z obou struktur má program prozkoumat.

Pomocí položky Tabulka | Zkontrolovat se spustí kontrola konzistence. Program zobrazí všechny informace z oblasti tabulek systémových volání, které mu připadají podezřelé. Zde je nutné uvést, že aktuální verze aplikace nedokáže zjistit pravé adresy KeServiceDescriptorTable a KeServiceDescriptorTable, ale zobrazí ty informace, které bude systém s největší pravděpodobností používat, když nějaké obyčejné vlákno provede systémové volání.

Doplňkové služby spočívají v možnosti uložit nasbírané informace do textových souborů (položka Soubor | Uložit) a nastavit jazyk. Zatím je podporována čeština a angličtina, ale podporu dalšího jazyka lze snadno doplnit, stačí se držet následujícího návodu:

  • Vytvořit soubor s příponou .lng, vyplnit její příslušnými hláškami (viz soubory czech.lng a english.lng)
  • Nový soubor s hláškami by měl mít stejně řádků jako ostatní jazykové soubory. Na každém řádku musí být přítomna právě jedna hláška
  • Po nakopírování nového souboru do adresáře s programem by se po spuštění programu měla v menu Jazyk objevit nová položka.

Podporované systémy

SSDTInfo podporuje 32bitové verze operačních systémů Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows 7 a Windows Server 2008.

Na 64bitových Windows se tabulky systémových volání liší polem adres systémových služeb, které místo adres systémových služeb obsahuje jejich offsety vzhledem k jeho začátku. Dolní čtyři bity offsetu navíc mohou být využity k uchování informace o počtu parametrů, protože začátky rutin jsou zarovnány na 16 bajtů. Díky této optimalizaci není třeba při každém systémovém volání sahat do tabulky argumentů (ArgumentTable), což vede k určitému zrychlení.

Větším problémem je nalezení adres tabulek systémových volání, protože na této platformě ani jedna z nich není exportována a struktury ETHREAD postrádají položku ServiceTable. Ačkoliv způsob, jak potřebné informace získat, znám, zatím jsem nenašel čas na jeho implementaci.

Download

Binárky aplikace si můžete stáhnout níže. Součástí je i ovladač ssdtinfo.sys, z čehož vyplývá, že program pro svůj běh vyžaduje administrátorská práva. Na Windows podporujících Kontrolu uživatelských účtů (User Account Control) by si o něm měl sám pomocí známého dialogu požádat.

Zatím si můžete stáhnout pouze binárky, ale uvolnění zdrojových kódů je též plánováno.

Stáhnout SSDTInfo v1.0

2 + 2 = 5, for extremely large values of 2.