Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
BugId — Windowsアプリケーションのクラッシュを検出、分析、一意に特定します | Kitploit
ツール/GitHubGitHub/skylined/bugid
脆弱性分析動的コード分析 (DAST)デバッガファジングバイナリ解析
GitHubskylined/bugid

BugId

Windowsアプリケーションのクラッシュを検出、分析、一意に特定します

リポジトリを見る
525861年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
ウェブサイト

BugId

アプリケーションのバグを検出、分析、一意に識別します。

概要

あなたは...

  • アプリケーションをクラッシュさせているバグの種類を知りたいですか?
  • バグがセキュリティ上の脆弱性である可能性があるかどうかを知りたいですか?
  • 2つ以上のクラッシュが同じバグによって引き起こされているかどうかを知りたいですか?
  • バグの分析を含む人間が読めるレポートが欲しいですか?

...ならば、BugIdはあなたにぴったりかもしれません!

クイックセットアップ

BugIdを使用するには、以下のソフトウェアをダウンロードしてインストールしてください:

  • 最新のPython 2.7.14
  • 最新のDebugging Tools for Windows
  • 最新のBugIdリリース

PythonとDebugging Tools for Windowsをデフォルト設定でインストールすれば、BugIdは設定を調整せずに実行できるはずです。BugIdはローカルファイルシステム上の任意の場所に解凍できます。

BugIdを開始する前に、対象アプリケーションでフルページヒープを有効にする必要があります。これは、特定のグローバルフラグを設定することでバイナリ単位で行うことができます。これを行う最も簡単な方法は、BugIdに付属するpageheap.cmdスクリプトを使用することです。たとえば、notepadのフルページヒープを有効にするには、次のコマンドを実行します:

root@kitploit:~
C:\BugId>pageheap notepad.exe ON

(このコマンドは、マシンへの管理者アクセス権を持つ昇格したコマンドプロンプトから実行する必要があることに注意してください)。

さらに簡単にするために、pageheap.cmdには既知のアプリケーションのリストがあります。名前を指定することで、そのいずれかに対してフルページヒープを有効または無効にできます。たとえば、pageheap msie ONはMicrosoft Internet Explorerのフルページヒープを有効にします。コマンドライン引数の詳細については、pageheap /?を使用してください。

この時点で、BugIdが正しく動作するかテストしてみるとよいでしょう。これは、BugIdでアプリケーションを実行してクラッシュさせ、BugIdがバグを正しく報告するかどうかを確認することで行えます。このテストに適したアプリケーションはrundll32.exeです。これは、すべてのWindowsインストールのWindowsフォルダ(%WinDir%)内のsystem32サブフォルダにあります。これを使用すると、ローカルファイルシステム上にある任意のdllをロードし、特定の呼び出し形式でこのdll内のエクスポート関数を呼び出すことができます。system32フォルダには、関数をエクスポートするdllが多数あります。これらのエクスポート関数のほとんどは、rundll32が提供するものとはまったく異なる形式の引数を期待しているため、アプリケーションがクラッシュします。

まず、次のコマンドでrundll32のフルページヒープを有効にする必要があります:

root@kitploit:~
C:\BugId>pageheap rundll32.exe ON

次に、BugIdを起動し、advapi32.dllをロードしてCloseThreadWaitChainSessionを呼び出すように指示する引数でrundll32を起動するように設定します。この記事の執筆時点では、これによりいわゆるNULLポインタアクセス違反が発生しますが、BugIdはこれを検出して報告します。

root@kitploit:~
C:\BugId>BugId.cmd %WinDir%\system32\rundll32.exe -- advapi32 CloseThreadWaitChainSession

rundll32.exeとそれに渡される引数の間に--があることに注意してください。これは、BugId自体とテストしたいアプリケーションの両方に引数を提供したい場合があるためです。これら2つの引数セットは、コマンドライン上で--で区切る必要があります。--より前のすべてはBugIdによって処理され、--より後のすべてはBugIdによって無視されますが、アプリケーションには渡されます。

すべてがうまくいけば、BugIdの出力は次のようになります:

root@kitploit:~
* Command line: C:\WINDOWS\system32\rundll32.exe advapi32 CloseThreadWaitChainSession
+ Main process 8024/0x1F58 (rundll32.exe): Attached; command line = C:\WINDOWS\system32\rundll32.exe advapi32 CloseThreadWaitChainSession.
,-- A bug was detect in the application ----------------------------------------
| Id @ Location:    AVR@NULL a1f.904 @ rundll32.exe!advapi32.dll!WctRemoveEntry
| Description:      Access violation while reading memory at 0x0 using a NULL pointer.
| Security impact:  Denial of Service
| Version:          rundll32.exe 10.0.16299.15 (x64)
|                   advapi32.DLL 10.0.16299.15 (x64)
| Bug report:       AVR@NULL a1f.904 @ rundll32.exe!advapi32.dll!WctRemoveEntry.html (60703 bytes)
'-------------------------------------------------------------------------------

最初の行は、BugIdが起動しようとしているコマンドラインを示しています。2番目の行は、これによりプロセスID 8024を持つ新しいプロセスが作成され、rundll32.exeが実行されていることと、このプロセスのコマンドライン(もちろん最初の行と同じ)が示されていることを表しています。アプリケーションの起動直後に、バグが検出されました。BugIdはこのバグに対して一意のID(AVR@NULL a1f.904)を生成し、その位置がrundll32.exeによってロードされたadvapi32.dll dllのWctRemoveEntry関数にあると報告しました。NULLポインタによるクラッシュは、通常、アプリケーションをクラッシュさせる以外には悪用できないため、このバグのセキュリティへの影響はDenial of Serviceです。BugIdはデフォルトで、検出したすべてのバグについてHTML形式のレポートを生成し、このレポートが保存された場所を通知します。ご覧のとおり、レポートのファイル名はバグIDと場所に基づいています。

BugIdによって生成されるすべてのバグIDは、スペースで区切られた2つの部分で構成されます。最初の部分はバグの種類を表します。上記の例のAVR@NULLは、Access Violation Reading memory at address NULL(アドレスNULLからのメモリ読み取り中のアクセス違反)を意味します。2番目の部分はバグの場所を表し、ドットで区切られた2つの短いハッシュで構成されます。これらのハッシュは、バグに関連すると見なされるスタック上の上位関数から計算されます。この例では、a1f.904はa1f(advapi32.dll!WctRemoveEntryから計算)と904(advapi32.dll!CloseThreadWaitChainSessionから計算)で構成されています。

同じコマンドを再度実行すると、まったく同じコード内でまったく同じバグが発生するはずなので、BugIdはまったく同じBugIdを報告します。

おめでとうございます!これで、BugIdを使用して独自のクラッシュをテストする準備が整いました。ただし、BugIdがサポートする多数のコマンドラインオプションに関する情報を得るには、いずれBugId.cmd --helpを実行するとよいでしょう。

注意事項

BugIdは、ファジング中に多数のアプリケーションを対象に開発・テストされ、数百種類の異なるバグによって引き起こされた数十万件のクラッシュを分析してきました。この役割において、BugIdは誤検出率と検出漏れ率がともに1%未満という非常に低い率でバグを正確に分析できることが実証されています。

もちろん、すべての種類のバグが容易に検出・分析できるわけではありません。現在のところ、発生時に確実に検出できず、その後かなり経ってからまったく無関係なコード内でクラッシュを引き起こし、完全に誤った分析につながるバグもあります。このような場合、同じバグを繰り返し再現すると、アプリケーションが異なるタイミングで異なる方法でクラッシュするため、複数の異なるバグIDが生成されます。このような事態を避けるため、テストケースをBugIdで複数回実行し、バグIDが同じままであることを確認することをお勧めします。

また、別の種類のバグによって引き起こされたように見えるクラッシュを引き起こすバグもあります。これにより、誤った分析やバグIDが生じる可能性があります。特に顕著なのは、C/C++コードの不正なキャストに起因するバグで、現在BugIdでは検出・報告が不可能です。これらはさまざまな種類のクラッシュを引き起こす可能性があります。最も一般的なのは、オブジェクトのプロパティに格納された値がポインタとして誤って使用された場合のアクセス違反です。不正なキャストがクラッシュの原因である可能性がある場合は、BugIdによって行われた分析を再確認して、それが正しいことを確認する必要があります。

BugIdは、多数のヒープ関連バグを検出および分析するために、アプリケーションがフルページヒープを使用していることに大きく依存しています。つまり、標準のWindowsヒープに依存せず、独自の内部ヒープマネージャを使用するアプリケーションでは、バグの検出と分析の効果がはるかに低くなります。

ライセンス

Creative Commons License BugIdには、商用・非商用を問わず、30日間の無料トライアル期間があります。このトライアル期間中、本作品は[クリエイティブ・コモンズ 表示-非営利 4.0 国際ライセンス](http://creativecommons.org/licenses/by-nc/4.0/)の下でライセンスされています。

トライアル期間終了後もBugIdを引き続き使用したい場合は、license.skylined.nlで有料ライセンスを取得する必要があります。

非商用ライセンスは、私の経費を賄うのに十分な程度のごくわずかな料金で利用できます。個人のセキュリティ研究者向けの商用ライセンスも、大幅な割引価格で利用できます。

ライセンスについてご質問がある場合、または数量割引についてご相談したい場合は、[email protected]までご連絡ください。

BugIdには、その有用性を評価していただくためのトライアル期間があります。トライアル期間終了後もBugIdを使用し続けたい場合は、BugIdへの開発作業とライセンス申請の処理に対する対価として、少額の料金を支払っていただくようお願いしています。BugIdを商業的に使用している場合は、BugIdの使用から得ている利益の一部を還元するため、通常のライセンス料を支払っていただくようお願いしています。

ツールをダウンロード