ListDll

Žádný proces nemůže fungovat pouze na základě svého spustitelného souboru (.exe). Ke své činnosti potřebuje vždy pomoc knihoven DLL. Jedná se například o knihovny obsahující rozhraní Windows API (kernel32.dll, user32.dll, gdi32.dll, advapi32.dll) a nízkoúrovňové funkce (ntdll.dll). Další knihovny obsahují podporu pro složitější komponenty uživatelského rozhraní či další pokročilejší funkce.

Soubory knihoven jsou mapovány do privátní části adresového prostoru procesu. Zároveň se informace o jejich poloze zapisuje i do struktur Bloku prostředí procesu (Process Environment Block – PEB). Zajímavé je, že jinam (například někam do struktur procesu v paměti jádra) se tyto údaje nezapisují.

Struktura PEB se nachází v privátní části adresového prostoru procesu a její majitel může měnit její obsah dle libosti. To znamená, že může zasáhnout i do informací týkajících se knihoven DLL, které proces používá. Jelikož tyto informace čtou knihovny PSAPI a Tool Help Library, když je požádáte o seznam knihoven používaných určitým procesem, každá aplikace může přímo ovlivnit, které knihovny budou v tomto seznamu vidět a které ne.

Program ListDll demonstruje, jak toto chování detekovat a nenechat se ošálit. Zjišťuje seznam knihoven používaných určitým procesem několika způsoby:

  • pomocí knihovny Tool Help Library (CreateToolhelp32Snapshot),
  • procházením struktury PEB,
  • zjišťováním struktury virtuálního adresového prostoru (VirtualQueryEx, NtQueryVirtualMemory).

Program má podobu konzolové aplikace, kterou je možné ovládat z příkazové řádky. Syntaxe je následující:

ListDll --toolhelp <PID_procesu>
ListDll --peb <PID_procesu>
ListDll --vm <PID_procesu>

Druhým argumentem je vždy identifikátor procesu, který můžete zjistit například ze Správce úloh. První argument určuje metodu zjišťování seznamu používaných knihoven (knihovna Tool Help Library, procházení struktury PEB, procházení virtuálního adresového prostoru).

Jak je vidět z tabulky níže, program funguje i na 64bitových verzích Windows. Dokáže vyjmenovat všechny moduly i pro procesy běžící pod emulací WOW64, ale nehlídá duplicity, které se ve strukturách PEB takových procesů vyskytují (procesy běžící pod WOW64 mají totiž dva Bloky prostředí procesu).

Systém Verze kernelu
Windows XP 32bit 5.1.2600
Windows XP 64bit 5.2.3790
Windows Server 2003 R2 32bit 5.2.3790
Windows Server 2003 R2 64bit 5.2.3790
Windows Vista 32bit 6.1.6002
Windows Vista 64bit 6.1.6002
Windows 7 32bit 6.1.7601
Windows 7 64bit 6.1.7601

Stáhnout

Leave a Reply

Your email address will not be published.