在Windows中查找未记录的API

Pra*_*ast 46 winapi

我很好奇如何在Windows中查找未记录的API.

我知道使用它们所涉及的风险,但这个问题主要集中在寻找它们而不是是否使用它们.

Ada*_*itz 39

使用工具从共享库(例如,诸如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. 未记载的函数
  2. Windows体系结构的入门者
  3. 如何查找Windows API函数使用的未记录的常量
  4. 未记载的Windows
  5. Windows API

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


Ana*_*tts 9

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

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

  • 你甚至不必那么有影响力 - 有一天破解AppCompat shim数据库,我们有像迪士尼Timon和Puumba这样的应用程序学习输入那里 (8认同)
  • 如果你是有影响力的人,微软必须永远维护它们,因为如果他们不这样做,Crap Inc的软件就会崩溃,被误导的用户会尖叫微软糟透了,苹果公司很棒. (5认同)

Ran*_*e42 8

到目前为止,这里的每个人都缺少一些实质性的功能,这些功能包含了大量未记录的Windows OS RPC部分.RPC(认为Rpcrt4.dll中,LSASS.EXE,CSRSS.EXE等)发生的操作非常频繁地在所有的子系统,通过LPC端口或其它接口,其功能是埋在各类型/子类型的神秘咒语/结构-的typedef的等等......这些都是调试大幅更加困难,由于异步特性,或者如果你是通过单步执行或者你有什么调试该事实,他们是注定的过程的,你会发现整个系统由于阻止键盘或其他I/O被传递而导致锁定;)

ReactOS可能是调查未记录的API的最有效方法.他们有一个相当成熟的内核和其他高管.IDA是相当耗时的,你不太可能找到任何ReactOS人员尚未找到的东西.

这是链接页面的模糊;

ReactOS®是一款基于Windows®XP/ 2003设计的免费现代操作系统.它完全从头开始编写,旨在遵循Microsoft设计的Windows®体系结构,从硬件级别到应用程序级别.这不是基于Linux的系统,并且不共享任何unix架构.

ReactOS项目的主要目标是提供与Windows二进制兼容的操作系统.这将允许您的Windows应用程序和驱动程序在Windows系统上运行.此外,还使用了Windows操作系统的外观,使习惯熟悉Windows®用户界面的人会发现使用ReactOS非常简单.ReactOS的最终目标是允许您删除Windows®并安装ReactOS,而最终用户不会注意到更改.

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

  • 哦,所以如果你确实尝试手动对操作系统进行逆向工程,你应该研究 IDL 的实用性以及如何定位嵌入在 DLL 中的 IDL,提取实现方法的位置。另外,请参阅 http://en.wikipedia.org/wiki/MSRPC 了解一些更合适的起点。 (2认同)