Unpacking binaries
Last updated
Last updated
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
文字列の不足:パックされたバイナリにはほとんど文字列がないことが一般的です。
未使用の文字列が多い:マルウェアが商業的なパッカーを使用している場合、相互参照のない多くの文字列が見つかることが一般的です。これらの文字列が存在しても、バイナリがパックされていないことを意味するわけではありません。
バイナリをパックするために使用されたパッカーを特定するために、いくつかのツールを使用できます:
IDAでパックされたバイナリを下から上に分析し始める。アンパッカーはアンパックされたコードが終了すると終了するため、アンパッカーが最初にアンパックされたコードに実行を渡すことは考えにくいです。
レジスタやメモリのJMPやCALLを探します。また、引数とアドレスをプッシュしてからretn
を呼び出す関数を探します。なぜなら、その場合、関数の戻りはスタックにプッシュされたアドレスを呼び出す可能性があるからです。
VirtualAlloc
にブレークポイントを設定します。これは、プログラムがアンパックされたコードを書き込むためのメモリ内のスペースを割り当てます。「ユーザーコードまで実行」するか、F8を使用して関数を実行した後にEAX内の値を取得し、「ダンプ内のそのアドレスを追跡」します。アンパックされたコードが保存される領域であるかもしれません。
**VirtualAlloc
に「40」**という値を引数として渡すことは、読み取り+書き込み+実行を意味します(実行が必要なコードがここにコピーされる予定です)。
コードをアンパックしている間、算術演算や**memcopy
やVirtual
Alloc
のような関数への複数の呼び出し**を見つけることが一般的です。もし、算術演算のみを行い、場合によってはmemcopy
を行う関数にいる場合、関数の終わりを見つける(おそらくレジスタへのJMPまたはCALL)か、少なくとも最後の関数への呼び出しを見つけて実行することをお勧めします。なぜなら、そのコードは興味深くないからです。
コードをアンパックしている間、メモリ領域が変更されるたびに注意してください。メモリ領域の変更は、アンパックコードの開始を示す可能性があります。Process Hackerを使用してメモリ領域を簡単にダンプできます(プロセス --> プロパティ --> メモリ)。
コードをアンパックしようとしているとき、アンパックされたコードで作業しているかどうかを知る良い方法(そのため、単にダンプできます)は、バイナリの文字列を確認することです。ある時点でジャンプを行い(おそらくメモリ領域を変更)、多くの文字列が追加されたことに気付いた場合、アンパックされたコードで作業していることがわかります。 ただし、パッカーにすでに多くの文字列が含まれている場合、「http」という単語を含む文字列の数を確認し、この数が増加するかどうかを確認できます。
メモリの領域から実行可能ファイルをダンプすると、PE-bearを使用していくつかのヘッダーを修正できます。
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)