这两天需要调试lsass.exe, 昨天baidu竟然都查不到什么信息。lsass有它的一些特点。首先它是运行在user mode, 因此一般来讲应该用user mode的调试工具来调试。可是,如果用debuuger直接跟它相连,计算机就会自动重启,使得调试无法进行下去。其次,如果我们想在机器启动的时候调试lsass也比较麻烦,因为user mode debugger那个时候还不能工作。再次,调试lsass的时候,网络的访问不能进行,因此从网络上访问symbols and source code 也成为了不可能。经过认真研究,发现有三种方法可以用来调试lsass,并且各有优缺点。下面就一一讲解一下。
1. ntsd piped through KD
a. 修改注册表
HKLM\Software\Microsoft\Windows NT\CurrenVersion\Image File Execution Options\lsass.exe debugger = REG_SZ c:\debuggers\ntsd.exe -d -g -G
b. 用另一台机器通过kernal debugger和测试机相连
c.重起测试机
这样的话,在启动阶段,当系统调起lsass的时候,测试机的ntsd就开始工作,并且将输入,输出传送到kernal debugger上。这个属于在kernal debugger里进行user mode的调试。
优点:可以在启动的时候调试lsass。
缺点:symbols and source files 必须要copy在测试机上。(不太方便)
2.Debugging LSA via dbgsrv.exe
a.Find the PID for LSA via tlist.exe
b. C:\Program Files\Debugging Tools for Windows>dbgsrv.exe -t tcp:port=1234,password=spat
c.Run this command to attach to LSA on the remote machine.
I:\debugger>windbg.exe -premote tcp:server=192.168.1.102,port=1234,password=spat -p 596 -- where 596 = PID of LSASS
优点:symbols and source files 可以在调试机上
缺点:不能在启动的时候进行调试
3.Debugging LSA from Kernel
a. Get the process address for LSASS
0: kd> !process 0 0 lsass.exe
PROCESS 815196c0 SessionId: 0 Cid: 010c Peb: 7ffdf000 ParentCid: 00e4
DirBase: 042d2000 ObjectTable: 81519aa8 TableSize: 859.
Image: LSASS.EXE
b. Switch to the process context:
Either
.process /p /r 815196c0
Or
.process –i 815196c0 ;g;.reload /user
优点:symbols and source files 可以在调试机上,可以进行log out/ log on 过程的调试
缺点:不能在启动的时候进行调试
因此,如果想在启动的时候调试,就必然要选方法1。如果想在log on的时候调试,选择方法3。其他情况,可以选择方法2,或者方法3。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课