2009-05-28 49 views
39

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

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

+0

-1糟糕的问题:这是*从来不是一个好主意,使用未公开的API;他们由于某种原因没有记录,风险不在你身上,而在于你的操作系统供应商(如果他们关心app compat的话)。 – 2009-05-28 17:29:10

+30

+1不是一个坏问题。在操作系统的内部或其他任何东西上拨动都没有错。好奇心是一件好事。只是不要依赖无证行为。 – 2011-02-04 13:05:23

回答

32

使用工具从共享库中转储导出表(例如,一个.dll如KERNEL32.DLL)。您会看到指定的入口点和/或有序入口点。通常对于窗口来说,命名的入口点是未加密的(extern“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来设置断点并逐步通过入口点的汇编代码来确定参数应该是什么。

+0

您也可以将这一个添加到您的列表中:http://www.codeproject.com/KB/system/Win32.aspx – claws 2010-03-22 12:31:08

+0

第2和第4链接是相同的。 – claws 2010-03-22 18:01:00

1

看看系统DLL以及它们输出的功能。每个API函数,无论是否有文档,都会导出其中的一个(用户,内核,...)。

1

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

刚刚发现一个很好的文章Native APIS由Mark Russinovich编写

8

IDA Pro在这里是您最好的选择,但请请加倍请实际上并没有将它们用于任何事情。

他们是内部的,因为他们改变;他们甚至可能因修补程序而发生更改,因此您甚至不能保证您的未公开API将适用于您为其编写的特定操作系统版本和服务包级别。如果你运送这样的产品,你就靠借来的时间生活。

6

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

ReactOS可能是调查未公开API的最便捷方式。他们有一个相当成熟的内核,并建立了其他高管。 IDA相当耗时,并且不太可能会发现ReactOS人员还没有发现任何东西。

下面是链接页面的简介;

ReactOS®是一个免费的,现代操作系统 基于W indows XP/2003的设计系统。从 完全写出,其目的是遵循 Windows®体系结构设计,由 微软从硬件级别 直到应用程序 级别。这不是基于Linux的 系统,并且不共享unix 体系结构。

ReactOS项目的主要目标是提供与Windows兼容的二进制 操作系统 。这将使 允许您的Windows应用程序和 驱动程序像在您的Windows系统上运行一样运行。另外,使用系统的外观 和Windows操作系统 ,使得熟悉Windows®的熟悉的用户界面的人可以直接使用 ReactOS。 ReactOS的终极目标 旨在允许您删除Windows®并安装ReactOS ,而最终用户不会注意到 更改。

当我调查一些罕见的Windows构造时,ReactOS通常是唯一可信的参考。