0Pricing
Ethical Hacking Academy · レッスン

アンパッキング

難読化を突破します

「アンパッキング」は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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 静的解析
  2. 動的解析
  3. 逆アセンブルの基礎
  4. アンパッキング
← Ethical Hacking Academyに戻る