アンパッキング
難読化を突破します
「アンパッキング」はCoddyKit上の無料Ethical Hacking Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはEthical Hacking Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ethical Hacking Academyコースには全4レッスンが含まれています。
パッキングとは
パッキングは、プログラム本来のコードを圧縮または暗号化し、小さなスタブで包む処理です。実行時にスタブが元のコードをメモリ上にアンパックして実行します。
マルウェア作成者は、シグネチャ検出を回避し、静的解析を困難にするためにパッキングを使用します。
なぜアンパックするのか
パックされたバイナリでは、文字列やインポートが少なく、エントロピーが高くなります。意味のあるコードは、スタブが実行されるまで隠されています。
アンパックによって元のコードを復元すれば、静的解析を行い、実際の IOC を抽出できます。
パッカーの検出
Detect It Easy(DIE)やPEiDなどのツールは、シグネチャによって既知のパッカーを特定します。高いエントロピーや小さなインポートテーブルも有力な手がかりです。
一般的なパッカーにはUPX、ASPack、Themida があります。
die sample.exe
# Packer: UPX(3.96)UPX のアンパック
UPXは一般的で悪意のないパッカーであり、専用のツールを使ってリバースできます。-dフラグを指定すると、バイナリを元の形式に戻せます。
実際のサンプルの多くは UPX または少し改変された UPX を使用しているため、最初に試す方法になることがよくあります。
upx -d sample.exe手動アンパックの考え方
カスタムパッカーはツールで元に戻せません。その代わり、スタブ自身にメモリ上でアンパックさせ、その結果を取得します。
手順は、デバッガ上でサンプルを実行し、アンパックが完了した直後に停止して、明らかになったコードをダンプすることです。
OEP の特定
Original Entry Point(OEP)は、アンパックが完了した後に実行が移る場所です。OEP に到達したということは、本来のコードがメモリ上に展開されたことを意味します。
特定方法には、スタブから外部へ向かう遠距離ジャンプを監視する方法や、スタブが書き込んだ後に実行するメモリにブレークポイントを設定する方法があります。
アンパック用のブレークポイント
よく使われる方法は、スタックにハードウェアブレークポイントを設定することです(スタブは OEP にジャンプする直前にレジスタを復元することが多いためです)。また、アンパック後のコードが使用する一般的な API 呼び出しにブレークポイントを設定する方法もあります。
OEP でブレークポイントに到達すると、元のコードは完全に復号されています。
プロセスのダンプ
OEP でプロセスのメモリを新しいファイルにダンプします。Scylla(x64dbg に組み込まれています)やPE-sieveなどのツールで、アンパック後のイメージを取得できます。
このダンプには本来の命令が含まれていますが、まだ単独では実行できない場合があります。
インポートの再構築
パッカーが実行時にインポートを解決するため、ダンプ後はImport Address Tableが壊れていることがよくあります。Scyllaを使えば IAT を再構築し、ダンプしたファイルを解析可能にできます。
インポートを修正したら、クリーンなダンプを Ghidra または IDA に読み込めます。
その他の難読化
マルウェアはパッキング以外にも、実行時に復号する暗号化文字列、ジャンク命令、制御フローの平坦化、アンチデバッグチェックなど、さまざまな難読化を使用します。
これらはそれぞれ個別に対処します。多くの場合、動的トレースと、根気強く静的にコードを読む作業を組み合わせます。
アンパック済みサンプルの確認
ダンプとインポートの再構築が完了したら、静的解析を再実行して成功を確認します。これで、より多くの文字列と、値が入ったインポートテーブルが表示されるはずです。
エントロピーが通常の範囲に戻り、API が確認できれば、アンパックは成功しており、本来のコードを解析できる状態です。
クイックチェック
手動アンパックにおいて OEP が何を示すのか思い出してください。
まとめ
これでアンパックについて理解できました。
- パッキングは本来のコードを隠します。DIE/PEiD、高いエントロピー、少ないインポートを使って検出できます。
- UPXのような既知のパッカーは、ツール(
upx -d)でアンパックできます。 - カスタムパッカーでは、デバッガ上で実行し、OEPを特定して Scylla でダンプし、インポートを再構築します。
- その他の難読化(暗号化文字列やアンチデバッグなど)には、個別に対処します。
これで「Reverse Engineering Malware」コースを修了しました。
よくある質問
「アンパッキング」レッスンは無料ですか?
はい。「アンパッキング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ethical Hacking Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ethical Hacking Academyコースには全4レッスンが含まれています。
「アンパッキング」で何を学びますか?
難読化を突破します ブラウザで直接実行するハンズオンコードでEthical Hacking Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Ethical Hacking Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのEthical Hacking Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「アンパッキング」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このEthical Hacking Academyレッスンでコードを書いて実行できますか?
はい。すべてのEthical Hacking Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。