在Windows中查找未公开的API
我很好奇在Windows中如何find未公开的API。
我知道使用它们所涉及的风险,但是这个问题集中在find它们,而不是是否使用它们。
使用工具从共享库转储导出表(例如,诸如kernel32.dll的.dll)。 您将看到指定的入口点和/或有序的入口点。 通常对于窗口来说,命名的入口点是未被占用的(extern“C”)。 你很可能需要对汇编代码进行一些窥视,并从栈帧(如果有的话)和注册使用情况派生参数(types,数量,顺序,调用约定等)。 如果没有堆栈框架,那么有点困难,但仍然可行。 请参阅以下链接参考:
- http://www.sf.org.cn/symbian/Tools/symbian_18245.html
- http://msdn.microsoft.com/en-us/library/31d242h4.aspx
查看诸如dumpbin之类的工具来调查导出部分。
还有一些网站和书籍试图保留未logging的Windows API的更新列表:
- 无证函数
- Windows体系结构的入门
- 如何查找Windows API函数使用的未logging的常量
- 未logging的Windows
- Windows API
编辑:这些相同的原则适用于多种操作系统,但是,您将需要replace您用于转储导出表的工具。 例如,在Linux上,你可以使用nm转储一个目标文件并列出它的exports部分(等等)。 您也可以使用gdb来设置断点并逐步通过入口点的汇编代码来确定参数应该是什么。
IDA Pro是你最好的select,但请加倍请不要实际使用它们。
他们是内部的,因为他们改变 他们甚至可以修改Hotfix的结果,所以你甚至不能保证你的未公开的API将适用于你为它编写的特定的操作系统版本和服务包级别。 如果你运送这样的产品,你就靠借来的时间来生活。
到目前为止,每个人都缺less一些实质性的function,其中包含Windows操作系统RPC的大量未logging的部分。 通过LPC端口或其他接口,RPC(认为rpcrt4.dll,lsass.exe,csrss.exe等)操作非常频繁地发生在所有子系统中,它们的function被埋在各种types/子types的神秘主义咒语中/ struct-typedef的等等…由于asynchronous性质或者它们是注定要处理的事实,如果你要通过单步debugging或者你有什么,你会发现整个系统由于阻止键盘或其他I / O传递而导致locking)
ReactOS可能是调查无证API的最便捷的方式。 他们有一个相当成熟的内核,并build立了其他高pipe。 国际开发协会相当耗时,不太可能findReactOS人们还没有发现的东西。
以下是链接页面的简介。
ReactOS®是基于Windows®XP / 2003devise的免费的现代化操作系统。 它完全从头开始编写,旨在遵循Microsoft从硬件级别直到应用程序级别devise的Windows®体系结构。 这不是基于Linux的系统,并不共享unix体系结构。
ReactOS项目的主要目标是提供一个与Windows二进制兼容的操作系统。 这将允许您的Windows应用程序和驱动程序像在Windows系统上一样运行。 此外,使用Windows操作系统的外观和感觉,使习惯了Windows®熟悉的用户界面的人可以直接使用ReactOS。 ReactOS的最终目标是允许您删除Windows®并安装ReactOS,而不需要最终用户注意更改。
当我调查一些罕见的Windows构造时,ReactOS通常是唯一可信的参考。
看看系统dll和他们输出的function。 每个API函数,无论是否有文档,都在其中一个(用户,内核,…)中导出。
对于用户模式API,您可以打开Kernel32.dll User32.dll Gdi32.dll,特别是依赖walker中的 ntdll.dll,并find所有导出的API。 但是你不会有文件的偏见。
刚刚在Mark Russinovich的本地APIS上find了一篇很好的文章