Windowsマルウェアを対象とする。
パックされているかの確認
Detect It Easyで確認
pestudioのfunctionsの部分を確認
functionsの数が少ないとパックされている可能性がある。
pestudioのsectionsの部分を確認
パックされていない場合はraw-sizeとvirtual-sizeはほぼ同じ値になっているはずだが、
上の画像では、raw-sizeの値が0x00000000となっている。
また、UPX0などの見慣れないセクションがあるため、パックされている可能性がある。
アンパックする
自動でアンパック
自動でアンパックしてくれるツールがあるので、それを試してみる価値あり(できないこともある)
手動でアンパック
1. 本来のエントリポイントの特定
UPX1にentry-pointがあるため、ここからアンパックが実行される。
Ghidraで確認してみる。
上の画像は、アンパックのエントリポイントの部分を表示している。
Function Graphの一部を写しているが、jmpの先が書かれていない部分がある。
ここがアンパックの終わり(本来のエントリポイントへのjmp)の可能性がある。
今回は004595e0が元のエントリポイントである。
2. デバッガでメモリダンプ
x64dbgを使う。
まず、004595e0まで実行する。
この状態でScyllaを使う。
何もしないで一旦ダンプする。
その後インポートテーブルを修正してパッチを適応する。
これでアンパックは完了。
before
after
functionsの数が増えていることがわかる。
なお、アンパック後の検体のhash値がアンパック前と変わるため、注意が必要。