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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
DbgShell — Windowsデバッガエンジン用のPowerShellフロントエンド。 | Kitploit
ツール/GitHubGitHub/microsoft/dbgshell
リバースエンジニアリングスクリプトと自動化デバッガユーティリティとフレームワークバイナリ解析
GitHubmicrosoft/dbgshell

DbgShell

Windowsデバッガエンジン用のPowerShellフロントエンド。

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

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有

DbgShell

Windowsデバッガエンジン向けのPowerShellフロントエンド。

タブ補完を使って快適に操作してみませんか? 早速始めるには、はじめに をご覧ください。

Build status

免責事項

  1. このプロジェクトは、Windowsデバッガチームによって制作、承認、監視されたものではありません。デバッガチームはAPIやフロントエンド(windbg、kdなど)に関するフィードバックを歓迎していますが、このプロジェクトとは一切関係がありません。このプロジェクトに関するバグやフィードバックをデバッガチームに報告しないでください。

  2. これは資金提供を受けたプロジェクトではありません。公式に割り当てられたリソースはなく、ボランティアによってのみ開発されています。自分自身で完全にサポートする意思がない限り、このプロジェクトにプロダクション依存関係を持たせないでください。Issueの報告やPull Requestの提出は自由ですが、ボランティアリソースが限られているため、対応には時間がかかる場合があることを理解してください。

  3. これは実験的なプロジェクトです。完全に完成しておらず、破壊的な変更が頻繁に行われることを想定してください。

上記免責事項の帰結:私はDbgShellを高価値のライブターゲットにアタッチすることを避けるべきです。

バイナリ

https://aka.ms/dbgshell-latest

動機

デバッガ(cdb/ntsd/kd/windbg)で何かを自動化しようとしたことはありますか? うまくいきましたか?

DbgShellの主な動機は、デバッガでの自動化がとにかく難しすぎるということです。もちろん、現在でもデバッガの自動化を支援する機能は存在します。しかし、私の意見では、それらは人々のニーズを満たしていません。

  • 組み込みスクリプト言語は難解で、制限が多く、正しく扱うのが難しく、ヘルプを得るのも困難です。
  • 本格的なデバッガ拡張DLLを作成するのは非常に強力ですが、多大な投資が必要です。ランダムな現実世界の問題をデバッグする際の簡単な「一回限り」の問題を解決するにはコストが高すぎます。コストにもかかわらず、多くのデバッガ拡張が存在します。私はこれほど多くあるべきではないと思います。これほど多い唯一の理由は、実行可能な代替手段がないからだと思います。
  • より良いインターフェースを提供しようとする既存の試み(例:PowerDbg)は、「スクレイピング」とテキスト解析に基づいており、非常に限定的で(思想的にも厄介)、真により良いインターフェースの約束を果たせません(せいぜいわずかに改善されるだけです)。
  • デバッガ拡張をより簡単に書く方法を提供する既存の試みは、デバッガ拡張開発の苦痛に対処するだけの一時しのぎに過ぎません。より大きな問題を実際に解決するわけではありません。(例えば、2つの大きな欠点は、依然として低レベルすぎる(dbgeng COM APIを扱わなければならない)ことと、REPLがないことです。)
  • デバッガチームは最近、Javascriptスクリプティングを導入しました。Javascriptは古いwindbgスクリプト言語よりもはるかに優れた(そして明確に定義された)言語ですが、PowerShellにはいくつかの利点があると思います。その最大のものは、実際には誰もJavascriptシェルをあまり使わないことです。PowerShellはシェルとスクリプト言語を兼ねたものとしてはるかに優れています。

DbgShellプロジェクトの目標は、オブジェクトベースのPowerShellの世界の良さをデバッグの世界に持ち込むことです。 'dt'で'オブジェクト'をダンプするとき、実際のオブジェクトを取得できるべきです。スクリプト作成はPowerShellスクリプトを書くのと同じくらい簡単であるべきです。

DbgShellプロジェクトは、以下を含むdbgeng.dll用のPowerShellフロントエンドを提供します:

  • 管理された「オブジェクトモデル」(必要に応じてC#からも使用可能)。これはdbgeng COM APIよりも高レベルです。
  • PowerShellの「ナビゲーションプロバイダ」。デバッグターゲットの側面を階層的な名前空間として公開します(特定のスレッドに「cd」したり、「dir」と入力してスタックを表示したり、フレームに「cd」して、さらに「dir」を実行してローカル変数やレジスタなどを表示したりできます)。
  • ターゲットを操作するためのコマンドレット
  • カスタムPowerShellホスト。デバッガCLIエクスペリエンスをより細かく制御できるとともに、標準のpowershell.exeホストでは利用できない機能(具体的には、ANSIエスケープコードを使用したテキストの色付け(ISO/IEC 6429形式))を提供します。

カスタムホストは依然としてコマンドラインプログラム(conhost.exeベース)です(ntsd/cdb/kdに類似)。ただし、windbgから(!DbgShell)起動することもできます。

自動化をはるかに簡単で強力にするだけでなく、他の懸念事項にも対応します。例えば、デバッガを頻繁に使用する必要がない人の使いやすさなどです。(聞いた不満の一つは、「windbgを使わざるを得なくなったとき、.CHMで時間をすべて費やしてしまう」というものです。)

一方、熟練したwindbgユーザーにとっては、移行を可能な限りシームレスにするという別の目標もあります。例えば、名前空間プロバイダだけがデータにアクセスする唯一の方法ではなく、"~3 s"や"k"などの従来のコマンドも引き続き使用できます。

「自動化」と「スクリプト」とはどういう意味ですか?

私が言っているのは、テキストエディタを開いて複雑なことをする大きなスクリプトを書くというだけでなく、比較的簡単なことをコマンドラインで直接素早く作成できることも含まれます。少しのロジックを使いたいが、保存したいほど大きくも再利用可能でもない状況はたくさんあります。「開かれているファイルがユーザーのデスクトップ上にあり、関数Blahがスタック上にある場合にCreateFileでブレークする」といった「ワンライナー」を簡単に作れるべきです。

なぜPowerShellなのか?

はっきり言っておきます:PowerShellに「慣れる」のに約4年かかりました。扱いにくい部分、単純に難しい面、設計と実装の両方に多くのバグがあると感じています。時々本当にイライラします。しかしながら、 PowerShellの利点は魅力的であり、このプロジェクトに最適だと確信させてくれました。

  • スクリプト環境とCLI環境の両方を兼ねています。両方をこなさなければならないという事実は、学習曲線が急になるなどのネガティブな面もありますが、結局のところ非常に便利です。コマンドラインREPLで素早く作業を行い、同時に本格的な堅牢なスクリプトを書くことができるからです。
  • 非常に発見しやすいです。Get-Command、タブ補完、ファイルシステムのような階層データを公開する機能、ヘルプの提供と統合の機能などは非常に優れています。
  • タブ補完。前の箇条書きで触れましたが、それだけで独立した箇条書きに値するほど素晴らしいです。
  • オブジェクトパイプライン:PowerShellパイプラインのオブジェクト指向の性質は、文字列解析ベースのスクリプトの悪しき過去と比べて、比べ物にならないほど強力で使いやすいです。"dt"で"オブジェクト"を"ダンプ"して、実際にオブジェクトを取得することを想像してみてください。DbgShellはそれを実現します。
  • 多くの人が知っている:PowerShellやC#を知っている人の数は、windbgスクリプト技術を知っている人よりも少なくとも数桁は多いと推定します。つまり、より多くの人がPowerShellベースのデバッガを簡単に「使いこなせる」ようになり、助けが必要なときにも(少なくともスクリプト関連の問題については)潜在的な助っ人のプールがはるかに大きくなります。
  • PowerShellは依然として汎用シェルです。DbgShellを使用するとき、デバッガコマンドだけでなく、ファイルシステム、レジストリ、ADなどに"cd"して移動できます。Send-MailMessage、Get-WmiObject、Invoke-WebRequest、Invoke-RestMethodを実行したり、任意のプログラムを実行したりすることもできます。

現在のステータス

DbgShellは長い間「プロトタイピングモード」にあります。何かをどのように、またはどのように行うべきか考えることに多くの時間を費やしてきましたが、必ずしもすべてを「完成」させたわけではありません。現在のコードには膨大な数のTODOがあります。そのため、実際に役立つようになってきましたが、プロジェクトはまだかなり未熟です。しかし、どのようなものになるかの良い味わいを提供するのに十分なデモンストレーションができます。

以下にいくつかのスクリーンショットを示します。表示されているものはすべてdbgengのテキスト出力ではないことに注意してください。出力の中には見慣れたものもあるかもしれませんが、それはPowerShellの書式設定と出力機能を使用して特定のオブジェクトの表示をカスタマイズしているからです。表示される出力はすべて、実際の完全な.NETオブジェクトに対応しています。例えば、それらのModLoadメッセージはそれぞれMS.Dbg.ModuleLoadedEventArgsオブジェクトに対応しており、Out-Defaultに送信されたときに表示されるよりも多くのプロパティを持っています。dbgengからの文字列解析は一切行われていません。(いや、ほとんど。情報を得る他の方法がない場合、いくつかの妥協をしました。例えば、逆アセンブルや、アジャスタサンク関数のシンボル名を解析してオフセットを見つけるなどです。)

これは一種の「Hello World」シナリオです。cmd.exeのインスタンスにアタッチします。最初にPowerShellの組み込みコマンドStart-Processを使用し、その出力をDbgShellコマンドConnect-Processにパイプし、その後名前空間を探索します:

Hello DbgShell

ここではテストプログラムにアタッチし、スタックを表示し、特定のスタックフレームに切り替え、ローカル変数をダンプし、ローカルstd::mapの値を検査し、ローカルenum値の型情報を検査しました。列挙値の表示に注目してください。DbgShellは単一の列挙子のシンボル名の検索を処理するだけでなく、複数の列挙子がORで結合されている場合も処理します。スクリーンショットからはわかりませんが、これらすべてにタブ補完が利用できます。

tbd

注目すべき機能

  • Color:ANSIエスケープコードを使用したテキストの色付けのサポート(ISO/IEC 6429形式)
  • カスタム書式設定エンジン:.ps1xmlが嫌いですか? 私もです。標準のテーブル、リスト、カスタムビューに加えて、シンボル値の表示をカスタマイズするのに非常に便利な「単一行」ビューを定義できます。
  • カスタムシンボル値変換:ほとんどの変数では、デフォルトの変換と表示で十分です。しかし、デバッガにもう少し作業を任せたい場合もあります。シンボル値変換機能により、例えばSTLコレクションオブジェクトを、はるかに扱いやすい.NETコレクションオブジェクトに変換できます。
  • 派生型検出:変数がIFooだが、実際のオブジェクトがFooImplである場合に使用します。
  • リッチな型情報:プログラムで利用できるように公開されています。
  • Q: WinDbgで動作しますか? 私はWinDbgしか使いません。 A: はい。DbgShellExt.dll拡張DLLを読み込み、"!dbgshell"を実行するとDbgShellコンソールが開きます。

現在の欠点

  • 現在の最大の欠点は、カーネルモードを十分にサポートしていないことです(適切なコンテキストにすでにいる場合は値を表示できますが、DbgShell内部からコンテキストを変更できず、名前空間も接続されていません)。
  • 従来のデバッガ拡張を通常の方法でロードして実行できますが、まだ多くのwindbgコマンドが欠けています。
  • リモートはサポートされていません:dbgeng APIはリモートデバッガへの接続をサポートしています。残念ながら、dbgeng APIが公開するシンボルと型情報はDbgShellのニーズには決定的に不十分であるため、DbgShellはdbghelp APIを使用しています。残念ながら、リモートdbghelpというものはありません。この問題を解決するには、デバッガチームと協力する必要があります。

ライセンス

MITライセンスの下で提供されています。

コントリビューション

このプロジェクトはコントリビューションと提案を歓迎します。ほとんどのコントリビューションには、あなたのコントリビューションを使用する権利を私たちに与える権利があること、そして実際に与えることを宣言するContributor License Agreement(CLA)に同意する必要があります。詳細については、https://cla.microsoft.comをご覧ください。

プルリクエストを送信すると、CLA-botが自動的にCLAを提供する必要があるかどうかを判断し、PRに適切にラベルやコメントを付けます。ボットの指示に従ってください。この操作は、当社のCLAを使用するすべてのリポジトリで一度だけ必要です。

プロジェクトへのコントリビューションの詳細については、Contributingを参照してください。

行動規範

このプロジェクトは、Microsoft Open Source Code of Conductを採用しています。

詳細については、Code of Conduct FAQを参照するか、追加の質問やコメントがある場合は[email protected]までお問い合わせください。

その他のトピック

  • DbgShellをはじめよう

  • Color

  • カスタム書式設定エンジン

  • カスタムシンボル値変換

  • 派生型検出

  • リッチな型情報

  • DbgShellのハッキング

  • DbgEngWrapper

短い(3分)ビデオ紹介はこちら:https://youtu.be/ynbg2zZ1Igc

ツールをダウンロード