[新闻稿存档 ^] [< 第 6 卷第 2 号] [第 7 卷,特别声明>]
Systems Internals 通讯第 7 卷,第 1 号
http://www.sysinternals.com
版权所有 (C) 2005 Mark Russinovich
2005 年 1 月 5 日 - 本期内容:
编辑
- 有 DEP?
WINDOWS INTERNALS,第 4 版
SYSINTERNALS 的新增功能
- 11 月统计
- Sysinternals 杂志文章
- Sysinternals RSS 源
- 马克是 Microsoft MVP
- Autoruns v6.01
- 进程资源管理器 v8.61
- Sigcheck v1.0
- Bginfo v4.07
- Regjump v1.0
- Hex2dec v1.0
- Tcpvcon v2.34
- PsTools 更新
- Microsoft 的 Sysinternals
内部信息
- Internet 浏览
- 使用 LiveKd 对有问题的系统进行故障排除
- CreekSide?
- ChkReg 注册表修复程序
- Windows 内存诊断
- 研究未记录的接口
内部培训
- 旧金山的 Windows 连接
- 由 Mark Russinovich 和 David Solomon 讲授的 Windows 内部/Sysinternals 实践课程
Sysinternals 通讯由 Winternals Software 赞助,网址为 http://www.winternals.com。 Winternals Software 是 Windows NT/2000/XP/2003 高级系统工具的领先开发者和提供商。
Winternals 很高兴宣布推出 Administrator's Pak 5.0,并全面更新,包括 ERD Commander 2005。
ERD Commander 2005 中的新功能包括:
- 故障分析器:快速轻松地诊断导致 Windows 崩溃的驱动程序 - 即使系统无法启动
- DiskWipe - 安全地擦除硬盘或卷;自动运行:查看在 Windows 安装程序和用户登录时启动的应用程序 - 可用于诊断系统资源问题和查找潜在的恶意软件
- FireFox Web 浏览器:下载修补程序、驱动程序更新,在 Microsoft 知识库中搜索帮助 - 所有内容都在你尝试修复的系统上
- 修补程序卸载向导,用于删除无法启动的系统上的修补程序和补丁包
- 系统文件修复,用于检查 Windows 系统文件的完整性。
这些功能、ERD Commander 2005 的大量改进和可用性增强,以及基于 Windows PE 的远程恢复客户端的全新更易于生成和使用,均包含在 2005 年 1 月下旬推出的新管理员 Pak 5.0 中。 若要在发布管理员 Pak 5.0 时注册评估,请访问 http://www.winternals.com/ap5preview/.
编辑
大家好,
欢迎阅读 Sysinternals 新闻稿。 本通讯目前有 40000 名订户。
恶意软件(包括间谍软件和病毒)的上升趋势让每个人都担心安全。 良好的安全措施包括紧跟操作系统和应用程序修补程序、安装和配置防火墙、防病毒和间谍软件删除工具,以及从 Internet 下载或打开电子邮件附件时做出判断。 然而,尽管采取了彻底措施,恶意软件仍然可以找到避开防御、感染计算机的方法。 系统防御中最常见的漏洞是缓冲区溢出漏洞,这就是为什么你应该熟悉 Windows XP Service Pack 2 的数据执行防护 (DEP) 功能。
缓冲区溢出是一种编程错误,恶意程序可以利用该错误来控制执行编码错误的线程。 缓冲区溢出通常是基于堆栈的,这意味着攻击者向程序提供的数据量超过了存储在堆栈上的缓冲区中的数据量。 数据的构建方式是,当具有溢出的函数尝试返回到从中调用它的函数时,它会返回到数据中的某个位置。
遗憾的是,缓冲区溢出错误甚至可能困扰经过最佳测试和审查的软件。 Windows 及其组件软件每月发布多个缓冲区溢出(Linux 及其应用程序不可幸免,许多缓冲区溢出,与 Windows 相当)。 大多数缓冲区溢出攻击的一个共同主题是,它们会导致执行放置在应仅包含数据的内存区域中的代码。
虽然 Intel Itanium 处理器从发布起就支持无执行保护,但直到 Windows XP SP2(和即将推出的 Windows Server 2003 SP1),Windows 才实际使用此硬件支持,例如将线程堆栈和堆内存标记为不可执行。 其他支持非执行硬件保护的处理器包括 64 位 AMD64 Opteron 和 Athlon 64 以及 Intel 的克隆 EM64T - 现在在 Xeon 和Pentium 4 处理器上可用。 AMD 和 Intel 最近推出了支持不执行的 32 位处理器:AMD Sempron 和 Pentium 4“J”系列(如 520J、540J 等)。
默认情况下,Windows 应该对堆栈和应用程序堆内存强制实施不执行保护,以防止缓冲区溢出攻击,但现有应用程序成千上万,其中一些应用程序实际上可能依赖于未强制实施正确操作的设置。 因此,Windows XP SP2(强制实施不执行保护的第一个 Windows 版本)使管理员能够控制哪些进程受到保护,哪些进程不受保护。 首先,在旨在提高未来安全性的决策中,64 位版本的 Windows 始终对所有 64 位进程强制实施不执行标志。 如果软件供应商想要发布 64 位应用程序,他们需要确保不会从内存的非可执行区域执行代码(他们可以在动态生成代码时将数据区域标记为可执行,因为 Java 和 .NET 应用程序通常这样做)。
其次,由于缓冲区溢出攻击最常针对操作系统组件,默认情况下,32 位 Windows XP 和 Windows Server 2003 会保护核心操作系统映像。 但是,对于(在 32 位 Windows 或 64 位 Windows 上运行的)32 位应用程序,Windows XP 默认为“选择加入”策略(应用程序不受默认保护),而 Windows Server 2003 默认为“选择退出”(应用程序受到默认保护,但可以排除特定应用程序)。 这很有意义,因为在服务器系统上,安全性通常具有更高的优先级。 可以在 DEP 配置对话框中更改选择加入或选择退出设置,通过系统控制面板小程序“高级”页“性能”部分中的“设置”按钮进行访问。
正如我前面提到的,除了相对较新的 AMD Sempron 和 Pentium 4“J”处理器外,迄今为止发布的所有 x86 兼容芯片都缺乏无执行支持。 但是,Windows XP 和 Windows Server 2003 在这些称为“软件 DEP”的处理器上实现有限形式的 DEP。 由于操作系统在线程生成错误时获得对线程的控制,因此它可以确保它将执行的错误处理程序是程序代码静态注册的。 这可以防止将线程的错误处理程序重定向到溢出的堆栈缓冲区中执行恶意代码的漏洞,这是 CodeRed 病毒在 2001 年发布时导致 IIS 执行的操作。
尽管 DEP 相对简单,但它是操作系统在抵御自我传播恶意软件方面提供的最强大的防御措施之一。 可悲的是,有三件事限制了其功能:当前为不执行设置部署的大多数处理器中缺少硬件支持,Windows XP 中的默认选择加入设置仅保护核心操作系统进程,以及缺乏意识。 软件 DEP 的范围有限,因此除非你在支持不执行的硬件上运行 Windows,否则 DEP 仅略有效。 Windows XP 默认选择加入这一事实意味着,即使用户在非执行硬件上运行 Windows,获得 DEP 保护的唯一进程就是操作系统的进程 - 如果你的第三方防火墙、Web 浏览器、电子邮件阅读器或其他已启用网络的应用程序中存在缓冲区溢出,则你仍然容易受到攻击。 事实上,某些受恶意软件(IIS 和 Outlook)攻击最多的应用程序在选择加入设置下不受保护。 最后,由于大多数人不知道其默认行为,甚至根本不知道 DEP,因此系统在大多数情况下仍面临缓冲区溢出问题的风险。
Microsoft 该让用户支付兼容性价格来换取更好的安全性了,否则用户最终将支付更高的病毒价格,他们反过来会把账单转嫁给 Microsoft。 同时,我强烈建议你升级到 Windows XP SP2(Windows XP 64 位版本和 Windows Server 2003 SP1 也支持不执行),切换到选择加入,并升级到无执行支持的处理器(可惜我不会获得佣金)。
请将新闻稿传递给你认为可能对其内容感兴趣的好友。
谢谢!
-马克
WINDOWS INTERNALS,第 4 版
我与大卫·所罗门共同创作的关于 Windows Server 2003、Windows 2000 和 Windows XP 的内部的官方 Microsoft 书籍现已在书店提供。 大卫和我扩展了上一版的覆盖范围约 25%,不仅添加了有关 Windows Server 2003 和 XP 更改的新材料,还添加了故障排除工具和技术的新材料。 你将找到有关使用进程资源管理器、Filemon 和 Regmon 的高级提示,以及有关 Windows 故障转储分析的全新章节。
了解有关书籍内容和在线订购的详细信息,请参阅
http://www.sysinternals.com/windowsinternals.shtml
SYSINTERNALS 的新增功能
SYSINTERNALS RSS 源
我经常收到向 Sysinternals 添加新发布通知机制的请求,因此我终于遵循了 Web 范围的趋势,添加了 RSS 源(如果你不熟悉 RSS 源,下面是一个很好的入门:http://rss.softwaregarden.com/aboutrss.html).) 该源还使我有机会通知你一些次要 bug 修复和更新,这些更新不一定在头版上完整列出。 它已成为用户根据源每天获得的点击次数来了解更新的首选方式。
访问以下位置的 Sysinternals RSS 源:
http://www.sysinternals.com/sysinternals.xml
Sysinternals 杂志文章
大约六个月前,我开始在 Windows IT Pro Magazine(以前是 Windows 和 .NET 杂志)Sysinternals 工具撰写半月专栏。 每个专栏介绍不同的工具,提供有关高级用法的提示和工作原理的信息。
在下面列出的三篇已发布的专栏中,前两篇可供非订阅者在线访问,第三篇将很快推出:
Autoruns:http://www.win2000mag.com/Windows/Article/ArticleID/44089/44089.html
Pslist 和 Pskill:http://www.winnetmag.com/Windows/Article/ArticleID/43569/43569.html
PsExec:http://www.winnetmag.com/Windows/Issues/IssueID/714/Index.html
马克是 Microsoft MVP
平台 SDK Microsoft 最有价值专家 (MVP) 负责人将我评为 2005 年的 MVP。 我很感谢他和 Microsoft 对我使用 Sysinternals 而为 Microsoft 客户所做贡献的官方认可。
11 月统计
我终于得到了一个不错的 Sysinternals Web 流量分析程序,并分析了 11 月的日志文件。 数字的量级令我吃惊。 它拥有以下亮点:
- 360 万页面浏览量
- 775000 名独立访客
- 120 万次实用工具下载
- 进程资源管理器下载 200000 次,下载量第一
AUTORUNS V6.01
在过去几个月中,Autoruns有了很大的发展,推出了两次主要版本号更新。 最新版本的 Autoruns 除了标准 Run 密钥和启动文件夹外,还显示自动启动位置,包括 Winlogon 通知 DLL、资源管理器工具栏、命名空间扩展和浏览器帮助程序对象以及自动初始化 DLL。 另一项新功能(从进程资源管理器借用的)Google 菜单项通过打开浏览器并启动对所选图像名称的搜索来帮助你识别未知图像。
另一项新功能(映像签名验证)可以帮助你区分恶意软件和系统组件或受信任的应用程序。 Microsoft 通常包括使用 Microsoft 私钥签名的操作系统文件的哈希。 Windows 加密函数使用 Microsoft 的公共签名密钥解密已签名的哈希,Autoruns 会验证系统上的映像,方法是将其哈希与解密版本进行比较,并在匹配时将映像的公司名称前缀为“(已验证)”。 如果映像被篡改、损坏、替换或具有非你的系统信任的发布者签名的哈希,则 Autoruns 会将映像的公司名称报告为“(未验证)”。
作为系统管理员,你可能希望在登录帐户以外的帐户中检查自动启动映像,因此 Autoruns 现在包括一个“用户”菜单,其中包含在计算机上存储配置文件的每个帐户的选择。
最后,现在有一个与 Autoruns GUI 等效的命令行,称为 Autorunsc,它向控制台列出自动运行信息。 与 Sysinternals 的 PsExec 实用工具结合使用时,它能够将输出格式化为 CSV,可以轻松地为整个网络的计算机生成配置的自动启动映像的清单。
下载 Autoruns
http://www.sysinternals.com/ntw2k/freeware/autoruns.shtml
进程资源管理器 V8.61
同样,“进程资源管理器”(一种取代任务管理器作为高级进程管理实用工具的工具)一直是我最关注的工具,因为我得到了它的很多反馈。 自上一份新闻稿以来,进程资源管理器已从版本 8.4 升级到 8.6。 这两个版本具有大量新功能,包括启动搜索所选进程相关信息的 Google 菜单项、进程属性对话框中的字符串选项卡(其中列出了进程图像文件中存在的 ASCII 和 Unicode 字符串),以及列出所选 DLL 图像文件中字符串的字符串菜单项,以及将鼠标悬停在“进程资源管理器”托盘图标上时显示的工具提示中最消耗 CPU 的进程的名称。
许多人请求从任务管理器切换时缺少的功能,例如“任务管理器应用程序”选项卡。“应用程序”选项卡显示交互式桌面上顶级窗口的列表,以及拥有每个窗口的线程的状态:如果线程当前正在等待接收 Windows 消息或在最近五秒内处理了 Windows 消息,则“运行中”,反之“未响应”(具有讽刺意味的是,这通常意味着“运行中”表示线程正在等待,“未响应”表示其正在运行)。 现在,可以通过将“窗口标题”和“窗口状态”列添加到进程视图来使用进程资源管理器获取相同的信息。
进程资源管理器具有针对 at.NET 进程的功能有一段时间了,包括突出显示 .NET 进程和 .NET 进程的进程属性对话框中的 .NET 性能选项卡。 .NET 进程是已加载并注册到 .NET 运行时的进程。 如果进程在启动后某个时间注册,则进程资源管理器可能不会意识到它是一个 .NET 进程,但在手动刷新显示时,最新版本可以通过按刷新工具栏按钮、F5 键或选择“刷新”菜单项来重新检查进程是否为 .NET 状态和作业对象成员身份。
如果不确定哪个进程拥有窗口,可以使用“新建窗口查找器”工具栏按钮来识别它。 只需将工具栏按钮(看起来像靶子)从工具栏上拖动,然后拖动到有问题的窗口中,“进程资源管理器”将在进程视图中选择拥有的进程。
另外,在工具栏附近将立即显示微型 CPU 图。 此图显示系统的 CPU 使用情况历史记录,就像单击它打开“进程资源管理器系统信息”对话框时获取的扩展版本一样,会显示一个工具提示,其中包含在图形中移动鼠标的点的时间戳和 CPU 消耗量最高的进程。 可以将图形移动到工具栏区域中的任意位置,甚至可以移动到其所在行,以便它跨“进程资源管理器”窗口的宽度进行拉伸。
两个与安全相关的功能是映像签名验证和数据执行保护 (DEP) 状态。 启用映像签名选项时,进程资源管理器将查看进程映像是否已由受信任的签名者进行数字签名,并且与 Autoruns 一样,在进程属性对话框中将公司名称前缀为“已验证”或“未验证”。 默认情况下禁用此选项,因为映像签名检查可能需要几秒钟,因为要转到网站来检查验证签名证书的有效性。
DEP(我在本新闻稿的简介中进行了介绍)是应该在 Windows XP SP2 上启用的功能,以增强针对缓冲区溢出攻击的保护。 可以通过将“DEP 状态”列添加到进程视图或通过检查进程属性对话框的图像页上的“DEP 状态”字段来检查进程的 DEP 状态。
最后,进程资源管理器现在在系统进程的 DLL 视图中列出在系统上加载的驱动程序,这是与内核和设备驱动程序工作线程关联的进程。 每个驱动程序的信息与针对其他进程列出的 DLL 相同,包括系统地址空间中的版本、公司名称、完整路径和加载地址。
下载进程资源管理器
http://www.sysinternals.com/ntw2k/freeware/procexp.shtml
SIGCHECK V1.0
许多 Sysinternals 工具都采用可帮助用户识别恶意软件的功能,Sigcheck 是一种命令行实用工具,专用于该目标。 它使用 Autoruns 和进程资源管理器中包含的相同映像签名验证功能来指示文件是否已由受信任的发布者进行数字签名。 此外,它还报告映像或指定映像的文件版本信息,包括产品名称、说明、公司名称和版本。 此信息类似于 Windows XP 和 Windows Server 2003 随附的 Filever 工具报告的时间戳,但 Sigcheck 还会报告最初为未签名图像“链接”或创建文件时的时间戳,以及签名映像签名的时间戳。 最后,大多数已签名哈希都是使用自身已签名的密钥进行签名的,该序列构成了所谓的证书签名链。 Sigcheck 支持命令行选项,该选项指示它打印签名链,其中包含有关链中每个签名者的信息。
Sigcheck 与安全相关的潜在用途之一是调查 Windows 安装根目录下的任何未签名.exe .dll 或 .sys 映像(通常为 \Windows)。 可以通过使用此命令行运行 Sigcheck,轻松识别未签名 .exe 映像,例如:
sigcheck -s -u c:\windows\*.exe
所有 Microsoft 映像都应包含有效的签名,但可惜的是,上述命令会发现许多映像不包含,从而导致文件可能被利用来隐藏恶意软件。
下载 Sigcheck
http://www.sysinternals.com/ntw2k/source/misc.shtml
BGINFO V4.07
对 Bginfo(该工具用于显示在运行它的计算机的桌面上配置的信息,以便于查看)的此次次要更新包括对位图具有更好的支持(必须拉伸以适应你指定的大小)、CPU 检测增强功能、对 MySQL 的支持以及改进多监视器显示兼容性。
下载 Bginfo
http://www.sysinternals.com/ntw2k/freeware/bginfo.shtml
REGJUMP V1.0
如果想要创建特定注册表项的资源管理器快捷方式,或者只需输入密钥的路径并打开 Regedit 到目标位置,你会发现 Regjump 非常有用。 Regjump 是一种命令行实用工具,它使用我们在 Regmon 中开创的相同注册表“跳转到”技术。 为 Regjump 提供一个注册表路径作为其命令行参数,Regedit 将打开并导航到指定的键或值。
下载 Regjump
http://www.sysinternals.com/ntw2k/source/misc.shtml
HEX2DEC V1.0
使用调试器和反汇编时,我经常发现自己不得不将十六进制转换为十进制,反之亦然。 我终于厌倦了打开 Calc、输入一个数字,然后切换基础以查看转换,所以我编写了一个小小的命令行转换实用工具。 Hex2dec 可按任一方向转换,如果输入具有“0x”或“x”前缀或包含字母“a”-“f”(不区分大小写的),则将其方便地标识为十六进制。
下载 Hex2dec
http://www.sysinternals.com/ntw2k/source/misc.shtml
TCPVCON V2.34
Netstat 是内置于 Windows NT 及更高版本的命令行实用工具,可显示系统上当前活动的 TCP 和 UDP 终结点。 Microsoft 随 Windows XP 引入的版本包括一条有用的信息:打开每个终结点的进程的进程标识符 (PID)。 但是,若要确定进程的名称或有关它的任何其他信息,必须打开进程列表工具,并找到具有该 PID 的进程。
TCPView 是一个 Sysinternals GUI 应用程序,它显示与 Netstat 相同的活动终结点信息,但比后者更方便,因为它包括进程名称、在 DNS 名称和原始 IP 地址之间快速切换,以及用颜色突出显示新终结点和已删除终结点。 TCPView 的下载现在包含 TCPVCon(TCPView 的控制台版本),适合喜欢使用命令行接口的用户。 与 Netstat 不同,TCPVCon 显示与每个终结点关联的进程的完整路径,并包含一个以 CSV 格式转储输出的开关。
下载 Tcpvcon
http://www.sysinternals.com/ntw2k/source/tcpview.shtml
PsTools 更新
PsKill 和 PsLoglist 是过去几个月获得增强功能的两个 PsTools。 PsKill 是终止本地或远程系统上进程的命令行实用工具,现在支持 -t
开关,以便结束整个进程树。 许多人要求提供此选项,以便轻松清理批处理脚本的失控树。
PsLoglist 是一种命令行工具,用于在本地或远程系统上转储事件日志。 最近的更新在其已经很长的命令行限定符列表中添加了 5 个选项。 使用新参数可以从输出中排除指定的事件类型或事件源,或者仅转储过去几分钟或几小时的事件。 它现在还支持事件日志监视模式,在该模式中运行直到终止,并打印生成的事件日志记录。
下载 PsTools,包括 PsKill 和 PsLoglist
http://www.sysinternals.com/ntw2k/freeware/pstools.shtml
WWW.MICROSOFT.COM 上的 SYSINTERNALS
以下是自上次新闻稿以来发布的 Microsoft 知识库 (KB) 文章中 Sysinternals 参考的最新一期。 关于 Sysinternals 的 KB 公开参考文章总数达到 63 篇。
修复:Windows 的 Windows 媒体播放器 9 系列频繁访问注册表,可能会影响性能http://support.microsoft.com/?kbid=886423
GDI+ 1.0 安全更新概述 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsecure/html/gdiplus10security.asp
编辑注册表 http://support.microsoft.com/default.aspx?scid=kb;en-gb;835818
尝试访问项目视图时,出现“此视图中没有要显示的信息”错误消息http://support.microsoft.com/default.aspx?scid=kb;en-us;810596
内部信息
Internet 浏览
大约一年前,我宣布我已从 IE 切换到 Mozilla,因为 IE 缺少像样的 Internet 浏览器必需的功能,如弹出窗口阻止、选项卡式浏览、自动表单填充和广告筛选。 不久之后,有人向我提到了 Avant Browser,这是一个使用 IE(它不是自己开发的浏览器)来提供这些功能的可下载小文件。 Mozilla 笨拙的 UI 和经常缺乏与某些站点的兼容性让我做出了切换的决定。 虽然新的 FireFox 版本在这两个方面都更好,但仍有一些不兼容的站点(如 Windows 更新),所以我没有被迫再次切换。
Microsoft 在改进 IE 方面进展缓慢,即使考虑到 IE 的 Windows XP SP2 适度增强功能,他们也该感到羞耻,购买 Avant Browser 并将其构建到下一个版本的 IE 中。
下载 Avant Browser:http://www.avantbrowser.com
使用 LiveKd 对有问题的系统进行故障排除
LiveKd 是我为 Windows 2000 第 3 版编写的实用工具(它现在是 Sysinternals 上的免费软件工具)。 它允许你使用适用于 Windows 的 Microsoft 调试工具包的 Windbg 或 Kd 执行调试命令,这些命令通常用于调查在线和活动的系统中的故障转储和冻结系统。 在 Windows XP 及更高版本上运行时,Microsoft 为调试工具引入了类似的功能,称为“本地内核调试”。 不过,可以使用 LiveKd 执行一些本地内核调试无法执行的操作。 例如,在本地内核调试中执行时,无法查看具有本地内核调试和 list-kernel modules 命令 lm k
的内核模式线程堆栈,仅列出操作系统内核,而未列出其他负载驱动程序。 这两个命令在 LiveKd 内部工作。
另一个在本地内核调试中不起作用但在 LiveKd 中运行的命令是 .dump
。 我从 Microsoft 产品支持服务 (PSS) 工程师那里了解到,.dump
命令可用于对故障系统进行故障排除。 遇到问题但提供 Web 或数据库等服务的计算机可能不适合在调查期间暂停系统时重新启动或进行传统调试。 运行 LiveKd 并执行 .dump 会导致崩溃转储格式的文件,其中包含系统物理内存的内容。 通过将转储文件加载到 WinDbg 或 Kd 中,可以将转储文件带到另一台计算机,并分析操作系统和服务应用程序的状态,从而在查看问题原因时避免中断。
下载 LiveKd
http://www.sysinternals.com/ntw2k/freeware/livekd.shtml
CreekSide?
我最近正在调查 Windows XP Service Pack 2 版本的 Winlogon(负责显示登录用户界面的系统进程)的初始化,当我在反汇编中遇到代码时,Winlogon 检查\Windows\System32
目录中是否存在名为 ediskeer.dll 的 DLL,确保其由受信任的签名者进行数字签名(如果存在),然后加载它并调用 DLL 导出的未命名函数。 当有人登录到系统时执行的 Winlogon 代码也会调用 DLL(如果在初始化期间加载了 DLL)。
我在系统上查找了 DLL,但未找到它,Service Pack 2 CD 中也不存在该 DLL。 那么 DLL 是什么? 使用 Microsoft 为操作系统附带的调试符号,我可以看到 Winlogon 配置了一个名为“Creekside”的变量(如果存在 ediskeer.dll 并已签名),然后我意识到,“ediskeer”由“creekside”的最后 8 个字母按相反顺序排列。 我仍然不确定 Creekside 指的是什么,但我强烈怀疑 DLL 是仅随 Windows XP Starter Edition 一起提供的 DLL,这是 Microsoft 最近为发展中国家推出的低成本 Windows XP 版本。 Starter Edition 基于与 Windows XP Professional 和 Home Edition 相同的操作系统核心,但它对用户可以同时运行的应用程序数施加限制。 如果我的想法是正确的,Winlogon 将加载 DLL 以强制实施该限制,每次新用户登录时都会激活该限制。
ChkReg 注册表修复程序
多年来,Bryce 和我收到了许多关于 Chkdsk 注册表类比的请求,Chkdsk 是文件系统一致性检查实用工具。 我们从来没有写过,因为我们觉得受众数量太小了,不值得付出这种努力。 大约一年前,Microsoft 发布了鲜为人知的 Chkreg,这是一种用于注册表的 Chkdsk,可修复许多类型的注册表损坏。
遗憾的是,Chkreg 仅在 Windows 2000 上受支持(它也可以在 Windows NT 4 和 Windows XP 注册表上运行),并且作为使用本机 API 而不是 Windows API 的“本机”应用程序实现,因此它不会在 Windows 下运行。 下载时,必须将其安装到一组六个 Windows 安装程序启动软盘中,这是一个繁琐且耗时的事情。 我们已联系 Chkreg 的开发人员,鼓励他们公开发布 Windows 版本,我们已了解到 Microsoft 产品支持服务 (PSS) 正在内部使用,但不知道何时或是否会发布。
可以在以下位置下载 Chkreg
http://www.microsoft.com/downloads/details.aspx?FamilyID=56D3C201-2C68-4DE8-9229-CA494362419C&displaylang=en
WINDOWS 内存诊断
Windows 用户最沮丧的体验之一是系统崩溃。 在大多数情况下,故障是错误的第三方设备驱动程序造成的,可以通过禁用驱动程序或通过修复更新到版本来补救。 向 Microsoft Online Crash Analysis (OCA) 报告的大约 10% 的崩溃是由硬件问题引起的,其中大多数与磁盘和内存相关。
如果你遇到 OCA 无法诊断的崩溃或你怀疑内存问题,你应该花几分钟时间使用 Microsoft Windows 内存诊断 (WMD)(Microsoft 最近发布的内存检查工具)。 WMD 的安装程序要求提供用于保存 WMD 程序的软盘或 CD。 从创建的软盘或 CD 启动计算机时,WMD 将运行并执行对计算机内存的全面测试,并在屏幕上报告其进度和任何问题。 如果存在内存错误,WMD 可以为你省去无休止的 Windows 崩溃的挫折感。
可以在 http://www.microsoft.com/downloads/details.aspx?FamilyID=56D3C201-2C68-4DE8-9229-CA494362419C&displaylang=en 下载 Windows 内存诊断
研究未记录的接口
我在新闻稿前面关于进程资源管理器增强功能部分中介绍的 DEP 状态功能依赖于未记录的函数。 我想你们中的许多人都有兴趣了解我如何在无法访问 Windows 源代码的情况下发现(我的 Windows Internals 共同作者大卫·所罗门有权访问,但我没有)函数及其正确用法。
我的分析过程的第一步是假设某个进程的 DEP 状态查询将通过 NtQueryInformationProcess
API 进行路由。 许多检索有关进程信息的 Windows API 函数都使用 NtQueryInformationProcess
接口来获取信息。 此函数在 Windows 驱动程序开发工具包 (DDK) 的 Ntddk.h 文件中建立原型,可通过“本机 API”系统调用接口从用户模式访问:
NTSYSAPI
NTSTATUS
NTAPI
NtQueryInformationProcess(
IN HANDLE ProcessHandle,
IN PROCESSINFOCLASS ProcessInformationClass,
OUT PVOID ProcessInformation,
IN ULONG ProcessInformationLength,
OUT PULONG ReturnLength OPTIONAL
);
其前两个参数是进程句柄和“进程信息类”。 PROCESSINFOCLASS 枚举(如下所示的前几个定义)也包含在 NTDDK.H 中:
typedef enum _PROCESSINFOCLASS {
ProcessBasicInformation,
ProcessQuotaLimits,
ProcessIoCounters,
ProcessVmCounters,
ProcessTimes,
//...
自从在 Windows XP SP2 中引入 DEP 后,我没想到 DEP 查询的信息类会在 Windows XP 或 Windows Server 2003 版本的 Ntddk.h 中列出,并且我快速检查过,确认它不存在。 因此,我必须调查 SP 2 的 Ntoskrnl.exe 的反汇编,即实现的 NtQueryInformationProcess
映像,看看我是否可以从经验上确定 DEP 查询信息类。
反汇编程序获取可执行映像,并列出构成其代码的汇编语言指令。 程序集语言指令直接映射到处理器执行的指令。 我使用的反汇编程序是来自 http://www.datarescue.com 的 IDA Pro,因为它理解 Microsoft 的调试信息文件,并将信息集成到程序集语言输出中。 在反汇编中,我在 NtQueryInformationProcess 的开头发现了一系列复杂的指令,这些指令采用进程信息类参数,并执行特定于每个类的代码。 由于我知道信息类是新的,因此我可以跳过在 Ntddk PROCESSINFOCLASS
的枚举中看到其定义的类的执行。 这让我的调查范围缩小到自 Windows XP 发布以来引入的大约 3 到 4 个新类。
其中一个类(对应于 ProcessInformationClass
0x22 值)通过代码路径进入名为 MmGetExecuteOptions
的函数,其开头如下所示:
PAGE:0054D7CC ; __stdcall MmGetExecuteOptions(x)
PAGE:0054D7CC _MmGetExecuteOptions@4 proc near ; CODE XREF:
NtQueryInformationPro0063ess(x,x,x,x,x)+251C p
PAGE:0054D7CC
PAGE:0054D7CC arg_4 = dword ptr 8
PAGE:0054D7CC
PAGE:0054D7CC mov edi, edi
PAGE:0054D7CE push ebp
PAGE:0054D7CF mov ebp, esp
PAGE:0054D7D1 mov eax, large fs:124h
PAGE:0054D7D7 mov eax, [eax+44h]
PAGE:0054D7DA mov cl, [eax+6Bh]
PAGE:0054D7DD mov eax, [ebp+arg_4]
PAGE:0054D7E0 and dword ptr [eax], 0
PAGE:0054D7E3 xor edx, edx
PAGE:0054D7E5 inc edx
PAGE:0054D7E6 test dl, cl
PAGE:0054D7E8 jz short loc_54D7EC
PAGE:0054D7EA mov [eax], edx
PAGE:0054D7EC
PAGE:0054D7EC loc_54D7EC: ; CODE XREF:
MmGetExecuteOptions(x)+1C j
PAGE:0054D7EC test cl, 2
PAGE:0054D7EF jz short loc_54D7F4
PAGE:0054D7F1 or dword ptr [eax], 2
PAGE:0054D7F4
PAGE:0054D7F4 loc_54D7F4: ; CODE XREF:
MmGetExecuteOptions(x)+23 j
PAGE:0054D7F4 test cl, 4
PAGE:0054D7F7 jz short loc_54D7FC
PAGE:0054D7F9 or dword ptr [eax], 4
PAGE:0054D7FC
IDA Pro 在上述输出的第一行显示,函数接受一个参数,我怀疑该参数是指向接收 DEP 设置的变量的指针。 我花了足够的时间查看 Windows 内核的反汇编,以将指令序列 mov eax, large fs:124h; mov eax,[eax+44h]
识别为处理器控制区域 (PCR) 结构中当前线程 _KTHREAD
数据结构的读数,然后是 _KTHREAD
结构中偏移 0x44 的 KPROCESS
字段的引用。
遵循这些的指令读取 _KPROCESS
结构中偏移量 0x6B 字节中的各个位。
现在不知道 _KPROCESS
中 0x6B 处是什么,我就在本地内核调试模式下启动了 Windbg,并执行了命令 dt _kprocess
,该命令报告了以下情况:
+0x06b Flags : _KEXECUTE_OPTIONS
Looking at that structure with another dt command showed the bit definitions:
+0x000 ExecuteDisable : Pos 0, 1 Bit
+0x000 ExecuteEnable : Pos 1, 1 Bit
+0x000 DisableThunkEmulation : Pos 2, 1 Bit
+0x000 Permanent : Pos 3, 1 Bit
+0x000 ExecuteDispatchEnable : Pos 4, 1 Bit
+0x000 ImageDispatchEnable : Pos 5, 1 Bit
+0x000 Spare : Pos 6, 2 Bits
果然,这些位与 DEP 相关,似乎 MmGetExecuteOptions
将它们从该结构复制到作为 ProcessInformation
参数 NtQueryInformationProcess
传递的内存位置中的相应位。 因此,我已确定,可以通过使用调用 NtQueryInformationProcess
和 0x22 的 ProcessInformationClass
、DWORD
(4 字节整数)和长度为 4 的地址来查询进程的 DEP 状态。 似乎 MmGetExecuteOptions
只返回当前进程的标志,忽略了 ProcessHandle
参数(进程资源管理器通过 KeAttachProcess
API 将其帮助程序驱动程序切换到其他进程以查询其 DEP 状态)。
因为我获得了 64 位版本的进程资源管理器。我已完成操作,除了 64 位版本的 Windows 上存在一些细微的差异。 64 位 Windows MmGetExecuteOptions
上要求 ProcessHandle
为 -1,如果当前进程是 64 位进程,则返回 STATUS_INVALID_PARAMETER
错误,因为 64 位进程的 DEP 始终处于打开状态。 我使用 Windbg 来反汇编 64 位版本的 Ntoskrnl.exe,但自那时以来,我已获得了支持 AMD64 映像反汇编的 IDA Pro 版本。
内部培训
旧金山的 Windows 连接
我将在 Windows 连接会议发表两个会议环节,该会议由 Windows IT Pro 杂志于 4 月 17-20 日在旧金山举办。 其中一个是名为“了解和对抗恶意软件:病毒、间谍软件和 Rootkit”的常规会议,其中我会介绍恶意软件如何利用漏洞来传播和绕过安全措施,如何使用称为“rootkit”的复杂技术隐藏它们,以及如何检测它们并从系统清除它们。
另一个是“排查 Windows 内存问题”,其中我会展示如何回答老生常谈的“我在任务管理器中看到的值的含义”、“我的内存使用情况”和“我应该将分页文件设为多大”的问题。
下载会议宣传册并注册
http://www.devconnections.com/shows/win/default.asp?s=60#
由 Mark Russinovich 提供的 Windows 内部/Sysinternals 类实践
与新书 Windows Internals 第 4 版的作者 Mark Russinovich 和 David Solomon 共度 5 天,学习高级故障排除技术,同时深入了解 Windows NT/2000/XP/2003 操作系统内核的内部。 如果你是部署和支持 Windows 服务器和工作站的 IT 专业人员,则你需要能够在出现问题时深入挖掘。 了解 Windows 操作系统的内部功能并了解如何使用高级故障排除工具将有助于你更有效地处理此类问题并了解系统性能问题。 了解内部内容可帮助程序员更好地利用 Windows 平台,并提供高级调试技术。 而且在制作课程的过程中,我们可完全访问 Windows 核心源代码,还与开发人员进行完全沟通,所以你看到的故事是真实的。
即将到来的日期包括:
- 6 月 6 日至 10 日,佛罗里达州奥兰多
- 7 月 11 日至 15 日,德国慕尼黑
- 9 月 19 日至 23 日,加利福尼亚州旧金山
- 12 月 5 日至 9 日,得克萨斯州奥斯汀
注意:这是一个实践课堂,每个与会者必须自带笔记本电脑(配置说明将提前发送)。
你将深入了解 Windows NT/2000/XP/2003 的内核体系结构,包括进程、线程计划、内存管理、I/O、服务、安全性、注册表和启动进程的相关内幕。 你还将了解故障排除技术,例如恶意软件消毒、崩溃转储(蓝屏)分析、解决启动问题。 你还可在 www.sysinternals.com 上学习各种高级技巧,了解如何使用关键工具(例如 Filemon、Regmon 和 Process Explorer)来排查各种系统和应用程序问题,例如计算机速度缓慢、病毒检测、DLL 冲突、权限问题和注册表问题等。 Microsoft 产品支持部门每天都在使用这些工具,它们已被有效地用于解决各种桌面和服务器问题,因此熟悉它们的操作和应用程序将帮助你处理 Windows 上的不同问题。 我们将提供实际示例,展示如何成功应用这些工具来解决实际问题。
若要注册,请访问 http://www.sysinternals.com/troubleshoot.shtml
感谢阅读 Sysinternals 新闻稿。
发布于 2005 年 1 月 5 日,星期三,下午 4:36,ottoh