web-dev-qa-db-ja.com

Windowsで文書化されていないAPIを見つける

私は、Windowsで文書化されていないAPIを見つける方法について興味がありました。

私はそれらを使用することに伴うリスクを知っていますが、この質問はそれらを見つけることに焦点を当てており、それらを使用するかどうかではありません。

45
Prashast

ツールを使用して、共有ライブラリ(たとえば、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 などのツールを確認してください。

文書化されていないWindowsAPIの更新されたリストを保持しようとするサイトや本もあります。

  1. 文書化されていない機能
  2. Windowsアーキテクチャの入門書
  3. Windows API関数で使用される文書化されていない定数を見つける方法
  4. 文書化されていないWindows
  5. Windows API

編集:これらの同じ原則は、多数のオペレーティングシステムで機能しますが、エクスポートテーブルをダンプするために使用しているツールを置き換える必要があります。たとえば、Linuxでは、 nm を使用してオブジェクトファイルをダンプし、そのエクスポートセクションを(とりわけ)リストすることができます。 gdb を使用してブレークポイントを設定し、エントリポイントのアセンブリコードをステップ実行して、引数を決定することもできます。

38
Adam Markowitz

ここではIDAProが最善の策ですが、2倍にしてください実際には何にも使用しないでください。

それらは変化するため、内部にあります。ホットフィックスの結果として変更される可能性もあります(実際に変更される可能性もあります)。そのため、文書化されていないAPIが、作成した特定のOSバージョンおよびサービスパックレベルで機能することさえ保証されません。あなたがそのような製品を出荷するならば、あなたは借りた時間に生きています。

9
Ana Betts

これまでのところ、Windows OSの文書化されていない部分[〜#〜] rpc [〜#〜]を構成するいくつかの実質的な機能が不足しています。 RPC(rpcrt4.dll、lsass.exe、csrss.exeなど)操作は、LPCポートまたは他のインターフェイスを介して、すべてのサブシステムで非常に頻繁に発生します。それらの機能は、さまざまなタイプ/サブタイプの神秘主義の呪文に埋もれています。/struct-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が唯一の信頼できるリファレンスであることがよくあります。

8

システムdllとそれらがエクスポートする関数を確認してください。文書化されているかどうかに関係なく、すべてのAPI関数はそれらの1つ(ユーザー、カーネルなど)にエクスポートされます。

1
cdonner

ユーザーモードAPIの場合、Kernel32.dll User32.dll Gdi32.dll、特にntdll.dllを dependancy walker で開いて、エクスポートされたすべてのAPIを見つけることができます。ただし、ドキュメントのオフコースはありません。

Native APIS by MarkRussinovichに関する良い記事を見つけました

1
Canopus