文書化されていない機能はどのように発見されますか?[閉まっている]


11


文書化されていない/プライベート APIを どのように見つけるのでしょうか?

Appleが文書化されていない/プライベートAPIを、駅再生Windowsの電話7Win32のカーネルWindowsのAPI隠されたコールバックなど、...

ハッカーは、プライベートおよびドキュメント化されていない機能について調べるためにどのツールを使用しますか?

APIドキュメントで通常説明されている秘密を明らかにするプライベートAPIとリバースエンジニアリング技術を掘り下げた人々の経験についてどこで読むことができますか?

ありがとう、
A

回答:


7

私が考えることができるいくつかの方法があります:

  1. 反射。ここで、オブジェクトを取得し、メソッド、プロパティなど、それ自体に関する情報を表示するように要求します。適切なオプション(言語に応じて)を使用すると、「パブリック」ではない情報を表示できます。

  2. 逆コンパイル。これにより、バイナリの作成に使用されたソースのバージョン(バージョン)が再生成されます。この場合も、APIの非公開部分が明らかになる可能性があります。

リストに「偶然」を追加することもできます。機能するスペルミスの呼び出し/コマンド、または情報が多すぎるヘルプ画面。


2
偶然リストに追加できます。はい、それはそれほど頻繁ではありませんが、それは起こります;)特にAPI所有者が事故を引き起こしたとき。

1
@ピエール-良い点。
ChrisF

また、共有ライブラリの署名。これは、逆コンパイルに関連しますが、.dllファイル/は.dylib /の.soファイル内の関数をエクスポートしているが、公式のツール(Visual Studioでの依存エクスプローラ、のUnixでNM)で閲覧可能です
クリス・ドーラン

4

ソフトウェアの開発に使用する通常のツール:)

通常、文書化されていない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)

またはそのようなもの...


2

免責事項:私は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を使用して...何でも。


より多くの/異なる情報を提供するよりも独自の答えを追加することは良いことです-それはStack Exchangeのすべてです。
ChrisF

@ChrisFは説明をありがとう。それは反転によってカバーされているように見えた。私はそれが別の可能な方法のより具体的な表記/逆転のより具体的なサブセットを担うかもしれないと考えました(逆転はMSDNで参照されていないシンボルの検索などもカバーできます)。
RobotHumans

-2

ハッキングは非常にロマンチックに聞こえますが、産業スパイ、漏洩、賄bes、盗難、幸運はありません。私はそれらを数えません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.