回答:
私が考えることができるいくつかの方法があります:
反射。ここで、オブジェクトを取得し、メソッド、プロパティなど、それ自体に関する情報を表示するように要求します。適切なオプション(言語に応じて)を使用すると、「パブリック」ではない情報を表示できます。
逆コンパイル。これにより、バイナリの作成に使用されたソースのバージョン(バージョン)が再生成されます。この場合も、APIの非公開部分が明らかになる可能性があります。
リストに「偶然」を追加することもできます。機能するスペルミスの呼び出し/コマンド、または情報が多すぎるヘルプ画面。
ソフトウェアの開発に使用する通常のツール:)
通常、文書化されていないAPI関数は、文書化されていないAPI であり、実際には慎重に隠された秘密ではありません。
将来を保証するAPIの設計は困難です。APIに簡単に追加できますが、(一部のクライアントを壊すことなく)何も削除することは本当に困難です。そのため、APIに何かを追加するときは非常に慎重になります。そのため、APIにはいくつかの追加機能(テスト、開発、クイックハックなど)がありますが、これらは文書化されておらず、次のバージョンでの動作や動作の保証はありません。
これらの文書化されていない関数は、コンパイラー、リンカー、ライブラリー、およびデバッガーの仕組み(システムプログラミングなど)を知っていれば、多少簡単に見つけることができます。ターゲットアーキテクチャのアセンブリ言語を知っていても害はありません。IDE /コンパイラが実行可能な実行可能ファイルをビルドできる場合は、「手動」でも実行できます。そのパスに目を向けておくと、いくつかの隠れた機能が見つかります:)
Unix環境の例:printf関数のみのドキュメントがあり、他のprintfのような関数があるかどうかを知りたいシナリオ。思考の流れは次のようになります。
1.ヘッダーファイルを確認する
$ grep printf /usr/include/stdio.h | head -5
extern int fprintf (FILE *__restrict __stream,
extern int printf (__const char *__restrict __format, ...);
extern int sprintf (char *__restrict __s,
extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
extern int vprintf (__const char *__restrict __format, _G_va_list __arg);
2.ライブラリを確認する
$ nm /usr/lib/libc.a | grep printf | head -5
U __asprintf
U __fwprintf
U __asprintf
U __fwprintf
U __printf_fp
3.ライブラリ関数の逆アセンブル
$ objdump -S /usr/lib/libc.a | grep -A 10 '_fwprintf' | head
00000000 <__fwprintf>:
0: 55 push %ebp
1: 89 e5 mov %esp,%ebp
3: 8d 45 10 lea 0x10(%ebp),%eax
6: 83 ec 0c sub $0xc,%esp
9: 89 44 24 08 mov %eax,0x8(%esp)
d: 8b 45 0c mov 0xc(%ebp),%eax
10: 89 44 24 04 mov %eax,0x4(%esp)
14: 8b 45 08 mov 0x8(%ebp),%eax
17: 89 04 24 mov %eax,(%esp)
またはそのようなもの...
免責事項:私はChrisFの答えが好きです。いくつかのアプローチを除外していると思います。それらがどのようにカバーされているかを答えるコメントに配置されている場合、私の答えを削除します。
これは、逆コンパイルに陥る可能性があります。
ドキュメント化されていない他のAPIを見つけるには、ベンダーが提供するツールをデバッグし、必要な処理を行い、ライブラリ間呼び出しを追跡することもできます。これにより、どのタイプのデータがどこに送信されるかを把握できます。
次に、他の「カスタム」ツールを記述して、PythonとCTYPESを使用してこれらのドキュメント化されていないAPIを使用したり、同様のバージョンのrubyを使用して、クラッシュの正確な動作やファジングを確認します。このトピックは、Aaron Portnoyが最小限の深さでカバーしています:http : //pentest.cryptocity.net/reverse-engineering/およびカンファレンスでの彼の他の講演のいくつか(彼はブラジルでの講演でそれについて直接話していることを覚えているようです)。それはREに関連していますが、私はそれがちょうど一般的なREだとは思いません。注:pentest.cryptocity.netのビデオは、このトピックだけではありません。それらは他の領域をより深くカバーしていますが、これについては触れました。多くの場合、テスターが「正確な手順は私たちの秘密を明かすことだ」とガードするものだからだと思います。
フィードバックをお読みいただきありがとうございます。
編集:窓の側で、このために有用であると証明できるもののツールは、最小限ここに覆われている:http://breakingcode.wordpress.com/2010/08/24/winappdbg-1-4-is-out/
厚手のJavaのコールハイジャックカスタムネットワークサービスをファジングするクライアントについては、http:
//www.securitytube.net/JavaSnoop-How-to-hack-anything-written-in-Java-video.aspxで説明しています。
最後の1つは最小限の関連性しかありませんが、質問者が最終的にどこに行くのかに関係があることを証明できます。自分が所有していないAPIを使用して...何でも。