
SHAREMはシェルコード解析フレームワークであり、45,000以上のWinAPIと事実上すべてのWindowsシステムコールをエミュレートできます。また、独自のカスタム逆アセンブラを搭載しており、エンコードされたシェルコードの難読化解除された逆アセンブリ表示や、エミュレーションデータを統合して逆アセンブリを強化するなど、多くの革新的な機能を備えています。
SHAREMへようこそ!
SHAREMは、DEFCON 31の「Game-Changing Advances in Windows Shellcode Analysis」およびBlack Hat USA Arsenalで発表されました。Max Kersten氏の好意により、TrellixからGhidraプラグイン(別途)が提供されています。これにより、必要に応じてSHAREMの機能をGhidraに拡張できます。
SHAREMは、究極のWindowsシェルコードツールを目指して設計されており、45,000以上のWinAPIのエミュレーション、事実上すべてのユーザーモードWindowsシステムコールをサポートし、多数の新機能を提供します。SHAREMには、エミュレータ、逆アセンブラ、タイムレスデバッグ、ブルートフォースによる難読化解除、その他多くの機能が含まれています。SHAREMのエミュレータは、完全な構造体(または構造体内の構造体)を表示することもでき、エンコードされたシェルコードが自身を難読化解除できるようにします。SHAREMは、分析されたすべてのWinAPIおよびWindowsシステムコールからの出力をログに記録し、それぞれを多数のカテゴリとサブカテゴリに分類します。SHAREMの完全なコードカバレッジにより、到達不可能な機能を発見することもできます。
SHAREMの逆アセンブラは、発見された関数を逆アセンブリに統合し、それぞれにラベルを付けることができます。また、SHAREMはエンコードされたシェルコードの復号化された形式を逆アセンブラに表示するため、シェルコードをデバッグする必要はありません。
SHAREMの使用方法に関する説明情報を提供するSHAREM Wikiを作成しましたが、現在文書化されていない部分や機能も多くあります。SHAREMは2年間にわたって複数の人物によって開発されてきました。SHAREMの逆アセンブラは、主要な逆アセンブラよりも大幅に正確です。さらに、SHAREMはエミュレーションデータを逆アセンブラに統合できるため、ほぼ完璧な逆アセンブリを取得できます。
SHAREMはリリースされたばかりであるため、こちらのドキュメントはやや不十分であることにご注意ください。今後数週間で、GitHubにさらに多くの情報を追加する予定です。
SHAREMを初めて使用される方は、その機能の一部を紹介する短いデモビデオをご覧ください。画像をクリックするとデモが表示されます:

2026年3月:SHAREMは起動時に最大61のDLLを読み込みますが、最新のアップデートにより、369のDLLと45538の固有WinAPIをサポートできるようになりました。さらに、DLLは必要に応じてオンデマンドで読み込まれます。Windows内部機能(モジュールリスト、フリンク、ブリンクなど)は、LoadLibraryAなどを介して追加のDLLを読み込む必要がある場合に自動的に更新されます。機能を改善するためのその他の多数のアップデートがあります。インストールの課題に関して報告されたいくつかの問題を合理化するための変更が加えられました。
2026年3月22日:ループ脱出のロジックがより微調整されました。この多くが書き直され、再テストされました。この機能を使用する場合、一般的にはconfig.cfgのデフォルトを変更しないことをお勧めします。
2024/2025:SHAREMはオプションでAIを活用して結果を分析できます(OpenAIキーはユーザー提供)。SHAREMは最近のAIの進歩より前に作られており、AIの使用はSHAREMの初期分析が完了した後にのみ行われます。このオプション機能により、見つかったものを調査し、MITRE ATT&CKフレームワークなどに適用できます。
SHAREMはローカルのPythonパッケージとしてインストールされるため、他のプロジェクトからアクセスできます。これにより、SHAREMの一部をインポートできます。そのため、パッケージとしてインストールする必要があります。注意:いくつかのインストールの問題の報告を聞いています。最近の変更でこの問題が修正されることを願っています。
SHAREMのインストールにはGitが必要です。 https://git-scm.com/download/win からインストールできます。インストール後、コンピュータを再起動してSHAREMのインストールを続行してください。GitはWindows SSDeepのインストールを自動化するためのものです。手動で行い、.batファイルを修正してSSDeepを除外することもできます(自分で行う場合)。手動でインストールすればGitは不要です。Windowsでは、以前のバージョンのインストール問題を修正したBw3llアカウントのSSDeepフォークに移行しています。このバージョンと以前のバージョンはSSDeepのラッパーでした。
.batファイルを実行します。setup.pyファイルを呼び出します。Pythonの呼び出し方によっては、別の.batファイルを呼び出すか、非標準のものを使用している場合は少し修正する必要があるかもしれません。
次のコマンドを実行します:
py -m pip list または python3 -m pip list
SHAREMがローカルパッケージとしてインストールされていることを確認します。動作するにはパッケージとしてインストールされている必要があります。表示されない場合はどうすればよいですか?その場合、パッケージとしてインストールされておらず、SHAREMは動作しません。インストーラディレクトリからWindowsコマンドプロンプトで.batファイルを使用していることを確認してください。うまくいかない場合は、エラーメッセージを探してください。エラーがあれば修正してみてください。数回試しても問題が解決しない場合は、問題を報告し、この情報をすべて含めてください。そうすれば問題を特定できます。通常はこれを行う必要はありませんが、時々必要になることがあります。一度アンインストールして再度インストールする場合は、インストールスクリプトを再度実行する必要があるかもしれません。py -m pip listを実行したときにsharemが表示されれば、ローカルパッケージとして正しくインストールされています。
SHAREMのインストール後、初めてシェルコードを実行するときは、sharem_cliフォルダ内にいる必要があります。例えば、そのディレクトリにいるときにpy main.py -r32 shellcode.binを実行できます。シェルコードがありませんか?問題ありません。私が別のリポジトリでホストしているシェルコードサンプルリポジトリにいくつかのサンプルがあります。
注意:Windowsで初めてシェルコードのエミュレーションを試みると、Windows DLLの収集と展開が自動的に行われます。このプロセスは最初のエミュレーション試行時に自動的に開始されます。DLLをコピーし、コピーした(後に展開された)DLLをSHAREMディレクトリに移動します。追加の手順もありますが、この初期プロセス全体には数分、古いCPUの場合は10〜15分かかることがあります。完了後は、この作業を再度行う必要はありません。この処理は32ビットと64ビットのシェルコードで別々に行う必要があります。sharem/sharem/sharem/sharem/DLLs/x86に移動すると、DLLがゆっくりと表示されるのを確認できます。これらはOSから取得され、OSが行うであろう動作をエミュレートするように変更され、このディレクトリに保存されます。約60個以上あります。その数くらいのDLLが表示され、追加のDLLが保存されていない場合は、スタックしている可能性があります。その場合はEnterキーをもう一度押してください。それでもダメな場合は、再起動してエミュレーションを再度試してください。DLLが保存されれば、再度行う必要はありません。最初の1回だけ、CPU速度によっては時間がかかる場合があります。完了すると、さまざまなWinAPIやWindowsシステムコールの列挙などのエミュレーション結果が表示されるはずです。
ファイルの拡張子が.txtの場合、シェルコードは16進数のASCII表現(純粋な16進数ではなく)であると見なされ、そのように解釈されます。これはオンラインで見つかるものに適しています。16進数のASCII表現を使用する場合、ファイル名の末尾を.txtにすることが必須です。
chmod +x linux_installer.sh インストーラの実行を有効にするsudo ./linux_installer.sh インストーラを実行するWindows DLLファイルを追加する必要があります。現在、Linuxユーザー向けに別途ダウンロードは提供していません。現時点では、ユーザーはWindows経由でインストールして収集する必要があります。(注意:これらのDLLはSHAREMによって展開される必要があります。展開されていないDLLは使用できません。適切な量だけ展開されていない場合、ほとんど(すべてではないにしても)は失敗します。)後日、別途ダウンロードを提供する可能性があります。それまでの間、ユーザーはWindowsの手順に従ってDLLを生成し、Linuxに移動して、sharem\sharem\sharem\DLLs\x64およびsharem\sharem\sharem\DLLs\x86に配置できます。また、foundDLLAddresses32.jsonとFoundDLLAddresses64.jsonも必要です。これらはsharem\sharem\sharemに配置する必要があります。
2024年にSHAREMはOpenAIのサポートを追加しました。これにより、AIを活用していくつかの分析タスクを自動化できます。メインメニューのA - 「leverage AI」から有効化できます。これを行うには、OpenAIキーが必要で、それをsharem/sharem/sharem/sharem/config.cfgにあるconfig.cfgファイルに設定する必要があります。さらに、AIを活用する前にシェルコードをエミュレートする必要があります。現時点ではこれがAIを使用する唯一の方法です(ヘッドレスでは動作しません)。ただし、ヘッドレスでの使用が必要な場合は、問題を報告してください。configから選択できる別のオプションとしてサポートを追加します。すでにSHAREMをインストールしていて更新版を入手した場合は、OpenAIを手動でインストールすることをお勧めします(例:pip install openai)。初期インストールスクリプトを実行するときにアクティブ化されるsetup.pyファイルの要件にも追加しました。
Max Kersten氏の優れたGhidra Script(2023年8月のBlack HatおよびDEFCONで展示)はこちらにあります:https://github.com/advanced-threat-research/GhidraScripts/blob/main/Sharem.java Max氏の説明の一部はこちら:https://github.com/advanced-threat-research/GhidraScripts/ このGhidraプラグインはTrellixから提供されています!SHAREMの使用は依然として必要です。このプラグインはSHAREMが生成したJSON出力を取り込み、Ghidraで使用できる形式に変換します。Max氏自身の詳細はhttps://maxkersten.nl/をご覧ください。
ドキュメントはSHAREM Wikiにあります。SHAREMの使用方法に関する説明情報を提供していますが、現在文書化されていない部分や機能も多くあります。
SHAREMは非常に強力なフレームワークであり、多くの機能を備えています。その一部は十分に文書化されていますが、そうでないものもあります。このセクションでは、それらの機能の一部をご紹介します。
SHAREMはエンコードされたシェルコードをエミュレーションによって難読化解除できます。すべてのWinAPIまたはシステムコール情報をキャプチャするだけでなく、逆アセンブラで表示することを選択すると、シェルコードの復号化された形式が表示されます:

SHAREMは12,000以上のWinAPI関数を列挙できるだけでなく、事実上すべてのユーザーモードWindowsシステムコールも同様に処理できます。さらに、一部の関数では構造体情報を表示します。レジストリを扱う場合、レジストリ情報を抽出してレジストリマネージャに追加します:

SHAREMは、UrldownloadToFileAを介してファイルが存在する場合にダウンロードする機能も備えています。これらはエミュレータのメモリにダウンロードされ、ディスクには保存されません。成功した場合、ハッシュをキャプチャします。また、限定的な擬似ファイルシステムがあり、例えばファイルが別のものとしてダウンロードされ、別の名前に変更されるといった関連性を確認できます。必要なダウンロードが利用できない場合は、単にダウンロード成功としてシミュレーションされます。ライブダウンロードはconfigで有効または無効にできるオプションです。

Dr. Bramwell Brizendine, Austin Babcock, Jake Hince, Shelby VandenHoek, Sascha Walker, Evan Read, Dylan Park, Kade Brost, James Tate Forcella, William Lochte, Hunter Murphy, and Tarek Abdelmotaleb.
本研究および一部の共同著者は、NSA助成金H98230-20-1-0326の支援を受けています。