5.4 案例研究:NTDLL.DLL中的Generic Table API
现在我们就进入我们的第一个逆向工程任务吧!在这个任务中我们将以一组未公开的Windows API函数为例进行分析,直到我们能够在自己的代码中使用这些APIs。实际上,为了证明这一想法是确实可行的,我还特意写了一个使用这些APIs的小程序。当然,我写这一章的目的不是教大家怎样使用这些特定的API,而是向大家生动地演示如何对真实的代码实施逆向工程。
这一章我们选择generic table API函数进行逆向。这组API是Windows本地API(Native API)的一部分。(至于什么是Windows本地API,请参见第3章)。
在系统本地API中有很多冠以不同前缀的API函数组。在本例中,我们选择RTL组中的一个函数集合。这组运行库函数不是用来与操作系统通信的而是作为提供操作系统最常见服务的一个工具包而存在的,这些最常见的服务包括字符串处理、数据管理,等等。
一旦你锁定generic table API,下一步就该通览一下NTDLL.DLL的导出表(generic table API是在NTDLL.DLL中实现的)以便找到所有可能的相关函数。在本例中任何以Rtl开头并涉及generic table的函数都是我们可能感兴趣的。在用DUMPBIN(见第4章关于DUMPBIN一节的内容)转储了NTDLL.DLL的导出表之后,根据上面的要求,我们得到了如下的函数列表:
![]() |
如果你自己做一下,并观察NTDLL.DLL的导出表,你可能会注意到上面绝大多数API函数还有一个带Avl后缀的版本,所以实际的generic table API函数组比上面列出来的还要大,我们只是为了方便讨论而有意忽略了一些基本重复的函数。
译注:“generic table”指的是一种通用数据类型的数据结构,本章大部分的篇幅都是在研究这是一种什么样的数据结构,是链表?还是二叉树?还是……还是留给你去寻找答案吧。鉴于此,译者保留了原文中出现“generic table”和“table”,未作翻译。
我们根据函数名做一点基本的猜测:显然这是一组用于管理某种通用链表的函数(通用就是意味着链表中的每一个成员可以是任何一种类型的数据)。有一些API是用来进行插入、删除及查找一个链表中的成员的。RtlNumberGenericTableElements API可能是用于返回链表中成员总数的。而RtlGetElementGenericTable则很可能是用来按索引来访问链表中特定成员的。在你开始使用这个通用表单之前,很可能要用RtlInitializeGenericTable来初始化某种根数据结构。
一般来说,逆向工程都是从数据开始的——你必须找到代码管理的关键数据结构。有鉴于此,我们从RtlInitializeGenericTable开始是个不错的主意。我们希望从中找到破译通用表单的数据结构的线索。
就像我已经解释过的,我们下面会仅对代码进行逐行分析,而不是动态调试它。如果你还是想要在一个调试器中分析generic table的代码,你可以使用我自己根据对generic table API的逆向工程结果写的名为GenericTable.EXE的小程序。如果你没有这个小程序,那么你可能只有依靠静态分析来进行分析了,当然你还是可以试着找一找其他使用这组API的代码。我大致搜索了一把,我发现使用这组API的代码只出现在Windows内核模式的代码中,而在用户态运行的代码中我还没有找到类似符合条件的代码。(generic table也是在Windows内核中的一个内核态的实现)GenericTable.EXE可以在本书的网站www.wiley. com/go/eeilam上下载。
下面几节里我们分别深入研究generic table API中的每一个重要的函数,并展示每个函数的内部实现细节。你也许会注意到,我会钻研得比较深,比破解必要的实现细节更深入一些。这主要是为了向大家展示高级的逆向工程技巧的威力,如果这是一个真实的为了使用generic table API而进行的逆向工程,你可能在获得必要的信息后,就会停止有关逆向工程的工作。但这次,为了展示高级逆向工程技巧,我们要搞清楚generic table数据结构的细节。
| 回书目 上一节 下一节 |
|
· Linux笔试面试题选摘测.. · 08年5月软考网管上午真.. · 性能测试从零开始 目录 · 08年5月软考网工上午真.. · 上周拒绝服务攻击(DDo.. · 08年5月各大网上书店及.. |
· 2008年5月24日软考试题.. · 软件设计师专家临考模.. · 上周网络管理员专家自.. · 网络工程师自测获奖名.. · 08年4月各大网上书店及.. · 系统分析师自测获奖名.. |
|
||||
| · ASP.NET开发教程 · 专题:ASP.NET 2.0基础.. · LAMP技术精解 · 服务器节能与绿色IT · ARP攻击防范与解决方案 · Linux 集群技术专题 · Windows集群服务应用 · CISSP认证成长之路 |
· SQL Server 2008/2005.. · SQL Server入门到精通 · 网络工程师职业规划与.. · 浏览器的战国时代 · 运营商封堵ADSL共享 中.. · 微软出价446亿美元收购.. · 技术人求职简历完备手册 · 开源虚拟化技术Xen |
|||
|
||||
| · SOA 面向服务架构 · SQL Server 2008/2005.. · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 · Apache技术专题 · Windows集群服务应用 · 国际文档格式标准开战 |
· 路由器设置与口令恢复 · Linux 集群技术专题 · PHP开发应用手册 · SOA 面向服务架构 · 企业数据恢复指南 · 了解统一威胁管理(UTM).. · 专题:AIX操作系统管理.. · 访问控制列表(ACL)介绍 |
|||
|
||||
| · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · 三层交换技术专题 · Apache技术专题 · 企业数据恢复指南 · Windows集群服务应用 |
· 路由器设置与口令恢复 · Linux 集群技术专题 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 反垃圾邮件技术应用 · 访问控制列表(ACL)介绍 · ASP.NET开发教程 · PHP开发应用手册 |
|||