Dneska jsem narazil na zajímavý problém. Udělal jsem si memory dump příkazových řádek z procesů cmd a powershell pomocí programu procdump (ofiko program od Microsoftu ke stažení zde). Jak jistě pravidelně sami používáte, tyto programy si pamatují historii (command history) příkazů, které jste zadávali. Můžete se na ně vracet buď pomocí šipek nahoru a dolů, nebo si je dokonce zobrazit přes klávesu F7.
Používám procdump ve svém forensním nástroji na sběr informací z počítačů, pokud je podezření na nějaký incident. No a co když tam někdo nechal běžet příkazovou řádku, nebo právě PowerShell. Nepůjde z toho memory dumpu vyndat seznam těch použitých příkazů?
Nečekal jsem, že by to bylo nějak blízko u sebe, nebo přehledně, ale ono to v těch procesech nebylo vůbec. Přitom ještě nedávno jsem to tam našel. Jak to?
Stačilo si uvědomit, že dneska jak cmd, tak i PowerShell, spouští ještě další proces conhost.exe na to, aby hovořili s uživatelem. Moc nerozumím proč, ale dělá to už od Windows 7. Ale to není ani podstatné. Důležité je to, že historie příkazů je v tom conhost procesu, a nikoliv v cmd.exe, nebo v powershell.exe.
Takže stačí použít další utilitku strings, tedy něco jako
procdump -ma -o <conhostPID> conhost.dmp
strings conhost.dmp > conhost.txt
A ty příkazy už v tom najdete. Samozřejmě nejsou tam moc pěkně pohromadě, ale na to, abyste zjistili, nebo si potvrdili, co tam kdo zadával, to úplně stačí.