格蠹汇编读书笔记

从堆里抢救丢失的博客

查看进程模块:

1
lm

罗列进程的线程:

1
~

罗列堆:

1
!heap

列出用户态空间所有区域:

1
!address

搜索,-u表示支持Unicode模式,从地址10000搜索长度80000:

1
s -u 10000 L80000 "当年在交大"

转成Unicode模式看数据,长度1000,但长度一般是读到Unicode结尾:

1
dU 001b5942 L1000

观察esp值:

1
r esp

确定某个地址是否在堆上以及属性:

1
!address 0728988a

如果无法以Unicode模式导出的话,添加两字节的Unicode起始符以正常识别Unicode编码。

1
eb 001b5942-8 ff fe

数据保存为文件。

1
.writemem D:\log.txt 001b5942-8 L1458

修复因误杀而瘫痪的系统

运行,当系统启动失败时WInDBG触发“Bugcheck Analysis”,最后一行“Bugcheck”字样后第一个数字为停止码,需要在WinDBG帮助文件中查询,查到“STATUS_SYSTEM_PROCESS_TERMINATED”。后面大括号里第一个数的地址处保存着有关进程信息,查看:

1
db e1c53ce0

一看是WinLogon进程。系统启动时内核创建第一个进程为会话管理器进程SMSS.exe,该进程创建子系统服务进程CSRSS和WinLogon。大括号里第二个数为错误码,查看:

1
!error c0000034

SMSS会在启动时检查“HKLM\SYSTEM\ControlSet001\Control\Session Manager”,找类型为REG_MULTI_SZ的,命令字符串大约为“源文件名\0目标文件名\0”,键值名为“PendingFileRenameOperations”,观察进程列表:

1
!process 0 0

当第一个参数为0时,第二个参数为详细程度,0为简洁7最详细,也可以加上符号名、地址、PID等。

Windows 8引入ELAM来优先加载和初始化杀毒软件的驱动。

徒手战木马

Windows启动过程:

  • 用户输入的用户名和密码由WinLogon发给LSASS进行安全认证。
  • LSASS认证通过后创建访问令牌对象。
  • WinLogon启动HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon的UserInit表键下程序,默认userinit.exe,多个程序用逗号分隔。能成功启动一个就算成功,都启动失败时该账号强制登出。
  • UserInit执行登录和初始化脚本,启动Shell键定义的程序,默认Explorer.exe。

侦察广告插件

将WinDBG设为系统默认JIT调试器:

1
windbg.exe -I

回溯100条栈:

1
kn 100

观察栈的更多信息:

1
kPL

详细了解某个模块如urlmon:

1
lm vm urlmon

显示当前函数调用栈,\c只显示当前帧信息,c显示寄存器内容:

1
.frame /c c

显示当前进程栈帧与参数信息,1表示当前进程:

1
kv 1

以GUID结构体方式解析地址01f1b434处数据:

1
dt _GUID 01f1b434

再解电源服务溢出崩溃

查看当前进程信息:

1
!process

有符号转无符号数:

1
?? (unsigned int)(-1073740791)

执行到下一个函数调用:

1
pc

触发错误时,当发现由内核调试时,UnhandledExceptionFilter调用WerpReportFault,再调用WerpReportFaultInternal,再调用SendMessageToWERService向WER系统服务报告错误。

!process查看某个进程的EPROCESS结构地址,再切换过去,需要再次运行才能获得该进程上下文:

1
.process /i 9382a530

第48页读不下去了…