我很好奇如何在Windows中找到未记录的API。
我知道使用它们所涉及的风险,但这个问题的重点是找到它们而不是是否使用它们。
答案 0 :(得分:36)
使用工具从共享库(例如,诸如kernel32.dll之类的.dll)转储导出表。您将看到命名的入口点和/或序数入口点。通常对于窗口,命名的入口点是非解码的(外部“C”)。您很可能需要对汇编代码进行一些窥视,并从堆栈帧(如果有)和寄存器用法派生参数(类型,编号,顺序,调用约定等)。如果没有堆栈帧,则有点困难,但仍然可行。请参阅以下链接以获取参考:
查看dumpbin等工具,以便调查导出部分。
还有一些网站和书籍试图保留未记录的Windows API的更新列表:
修改强> 这些相同的原则适用于多种操作系统,但是,您需要替换用于转储导出表的工具。例如,在Linux上,您可以使用nm转储目标文件并列出其导出部分(以及其他内容)。您还可以使用gdb设置断点并逐步执行入口点的汇编代码以确定参数应该是什么。
答案 1 :(得分:9)
IDA Pro是您最好的选择,但请请加倍实际上并没有使用它们。
他们是内在的,因为他们改变了;他们可以(并且确实)甚至因为修补程序而更改,因此您甚至不能保证您的未记录的API将适用于您为其编写的特定操作系统版本和Service Pack级别。如果你运送这样的产品,你就是靠借来的时间生活。
答案 2 :(得分:8)
到目前为止,每个人都缺少一些实质性功能,这些功能包含Windows操作系统 RPC 中未记录的大部分内容。 RPC(认为rpcrt4.dll,lsass.exe,csrss.exe等...)操作在所有子系统中非常频繁地发生,通过LPC端口或其他接口,它们的功能被埋没在各种类型/子类型的神秘主义咒语中/ struct-typedef's etc ...由于异步性质或它们注定流程的事实而更难调试,如果你通过单步执行调试或者你有什么,你会找到整个系统由于阻止键盘或其他I / O被传递而导致锁定;)
ReactOS可能是调查未记录的API的最有效方法。他们有一个相当成熟的内核和其他高管建立起来。 IDA是相当耗时的,你不太可能找到任何ReactOS人员尚未发现的东西。
这是链接页面的模糊;
ReactOS®是一种免费的现代化操作 系统基于Windows®的设计 XP / 2003。写完全自 划伤,它的目的是遵循 Windows®架构由设计 微软从硬件层面 直到申请 水平。这不是基于Linux的 系统,并没有共享unix 建筑。
的主要目标 ReactOS项目是提供一个 操作系统是二进制的 与Windows兼容。这将 允许您的Windows应用程序和 司机可以按照你的方式运行 Windows系统。另外,看起来 感觉Windows正在运行 使用系统,这样的人 习惯熟悉的用户 Windows®的界面会找到使用 ReactOS直截了当。终极的 ReactOS的目标是允许你 删除Windows®并安装ReactOS 没有最终用户注意到 变化
当我调查一些很少见的Windows构造时,ReactOS通常是唯一可信的参考。
答案 3 :(得分:1)
查看系统dll以及它们导出的功能。每个API函数,无论是否记录,都会导出其中一个(用户,内核,...)。
答案 4 :(得分:1)
对于用户模式API,您可以在dependancy walker中打开Kernel32.dll User32.dll Gdi32.dll,特别是ntdll.dll,并查找所有导出的API。但是你不会有文件记录。
马克·鲁西诺维奇在Native APIS找到了一篇好文章