【问题标题】:Finding undocumented APIs in Windows在 Windows 中查找未记录的 API
【发布时间】:2010-10-29 11:26:08
【问题描述】:

我很好奇如何在 Windows 中找到未记录的 API。

我知道使用它们所涉及的风险,但这个问题的重点是找到它们,而不是是否使用它们。

【问题讨论】:

  • -1 不好的问题:从不使用未记录的 API 是个好主意;它们没有记录是有原因的,风险不在于您,而在于您的操作系统供应商(如果他们关心应用兼容性的话)。
  • +1 不是一个坏问题。在你的操作系统内部或其他任何东西上闲逛都没有错。好奇心是个好东西。只是不要依赖无证行为。

标签: winapi


【解决方案1】:

查看系统 dll 以及它们导出的功能。每个 API 函数,无论是否记录在案,都会在其中一个(用户、内核等)中导出。

【讨论】:

    【解决方案2】:

    对于用户模式 ​​API,您可以打开 Kernel32.dll User32.dll Gdi32.dll,特别是 dependancy walker 中的 ntdll.dll 并找到所有导出的 API。但是你不会有文档偏离课程。

    刚刚在 Native APIS 上找到了 Mark Russinovich 的一篇好文章

    【讨论】:

      【解决方案3】:

      使用工具从共享库(例如 kernel32.dll 等 .dll)中转储导出表。您将看到命名的入口点和/或序号入口点。通常对于窗口,命名的入口点是未损坏的(外部“C”)。您很可能需要查看汇编代码并从堆栈帧(如果有)和寄存器使用情况中派生参数(类型、编号、顺序、调用约定等)。如果没有堆栈帧,它会有点困难,但仍然可行。参考以下链接:

      1. http://www.sf.org.cn/symbian/Tools/symbian_18245.html
      2. http://msdn.microsoft.com/en-us/library/31d242h4.aspx

      查看dumpbin 等工具以调查导出部分。

      还有一些网站和书籍试图保留未记录的 Windows API 的更新列表:

      1. The Undocumented Functions
      2. A Primer of the Windows Architecture
      3. How To Find Undocumented Constants Used by Windows API Functions
      4. Undocumented Windows
      5. Windows API

      编辑: 这些相同的原则适用于多种操作系统,但是,您需要更换用于转储导出表的工具。例如,在 Linux 上,您可以使用 nm 转储目标文件并列出其导出部分(以及其他内容)。您还可以使用gdb 设置断点并逐步检查入口点的汇编代码以确定参数应该是什么。

      【讨论】:

        【解决方案4】:

        IDA Pro 是您最好的选择,但请加倍实际上不要将它们用于任何事情。

        它们是内部的,因为它们会改变;它们甚至可以(并且确实)由于修补程序而发生更改,因此您甚至无法保证您的未记录 API 将适用于您为其编写的特定操作系统版本和 Service Pack 级别。如果你发布这样的产品,你就是靠借来的时间生活。

        【讨论】:

        • 如果你是有影响力的人,微软必须永远维护他们,因为如果他们不这样做,Crap Inc 的软件就会崩溃,被误导的用户会尖叫微软有多糟糕而苹果有多伟大.
        • 你甚至不必那么有影响力 - 有一天打开 AppCompat shim 数据库,我们有像 Disney Timon 和 Puumba Learn to Type 之类的应用程序
        • 是的。我在 windows xp 和 windows 7 上成功使用了未记录的 SetConsoleFont,但在 windows 7 sp1 上失败了。
        【解决方案5】:

        到目前为止,这里的每个人都缺少一些实质性的功能,这些功能包括 Windows 操作系统 RPC 中大量未记录的部分。 RPC(想想 rpcrt4.dll、lsass.exe、csrss.exe 等)操作在所有子系统中非常频繁地发生,通过 LPC 端口或其他接口,它们的功能隐藏在各种类型/子类型的神秘咒语中/struct-typedef 等...由于异步性质或它们注定要通过单步调试或其他方式调试的事实,它们实际上更难以调试,您会发现整个系统由于阻止键盘或其他 I/O 传递而锁定;)

        ReactOS 可能是调查无证 API 的最便捷方式。他们有一个相当成熟的内核和其他高管的建立。 IDA 相当耗时,您不太可能找到 ReactOS 人员尚未发现的任何东西。

        这是来自链接页面的简介;

        ReactOS® 是一款免费的现代操作系统 基于 Windows® 设计的系统 XP/2003。完全写自 从头开始,它旨在遵循 Windows® 架构由 微软从硬件层面 一直到应用程序 等级。这不是基于 Linux 的 系统,并且不共享任何unix 架构。

        主要目标 ReactOS 项目是提供一个 二进制的操作系统 与 Windows 兼容。这会 允许您的 Windows 应用程序和 驱动程序运行,因为他们会在你的 视窗系统。此外,外观 和Windows操作的感觉 系统被使用,这样人们 习惯了熟悉的用户 Windows® 的界面会发现使用 ReactOS 简单明了。终极的 ReactOS 的目标是让你 删除 Windows® 并安装 ReactOS 没有最终用户注意到 改变。

        当我研究一些很少见的 Windows 结构时,ReactOS 通常是唯一可靠的参考。

        【讨论】:

        • 哦,所以如果您确实尝试手动对操作系统进行逆向工程,您应该研究 IDL 的实用程序以及如何定位 IDL 嵌入在 DLL 中,提取实现方法的位置。另外,请参考en.wikipedia.org/wiki/MSRPC 了解一些更体面的起点。
        猜你喜欢
        • 2020-06-24
        • 2010-09-14
        • 2013-09-05
        • 2019-03-06
        • 1970-01-01
        • 1970-01-01
        • 2021-01-17
        • 2016-09-14
        • 2011-07-16
        相关资源
        最近更新 更多