windbg 基本命令收集
Command | Usage | Example |
---|---|---|
lm | 显示加载的module | lm v |
ln | 查看附近的符号文件 | ln eax |
dps | 查看符号 | dps eax |
gu | 执行到当前函数结束时停下 | gu |
p | 单步步过 | p p2 |
t | 单步步入 | t t2 |
b | 设置断点 | ba bp |
几个使用的命令与设置
Command | Usage | Command | Usage |
---|---|---|---|
pageheap | XXXX | XXX | |
x | X | X | |
X | X | X |
x
windbg的x命令用户显示所有上下文中匹配指定模板的符号, 用户寻找相应的断点位置
即x 后面跟着一个正则表达式, 然后显示所有匹配的符号,
1 | 0:011> x mshtml!Alternate* |
*
代表零个或多个字符?
代表一个字符+d
代表一个或多个字符
x还有个作用, 在函数断下来后输入x, 会自动打印出当前的局部变量
b
ba
设置内存断点ba Access Size
Access 包括 e (执行), r (读/写), w(写)
1 | ba r4 0x0033c558 |
pageheap
正常页堆 , 它在已分配的内存的后面放上几个守护字节(Guard Bytes), 类似于security cookie,再跟上一个标记为PAGE_NOACCESS的内存页。这样,已分配内存的后面如果被重写了,那么守护字节就会被改变,于是当 内存被释放 时,PageHeap就会引发一个AV。
完全页堆 , 当分配一块内存时,通过调整内存块的分配位置,使其结尾恰好与系统分页边界对齐,然后在边界处再多分配一个 不可访问的页作为保护区域。
因此一般UAF的洞开启页堆之后很大可能上可以定位到释放的位置, 而不是重新使用触发的AV.
用gflag.exe开启和关闭,加/full表示开启完全页堆
1 | gflags /p /enable calc.exe /full |
IE开启页堆和堆栈跟踪
1 | gflags.exe /i iexplore.exe +ust +hpa |