tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

パックされたバイナリの識別

  • 文字列の欠如: パックされたバイナリにはほとんど文字列がないことが一般的です。
  • 未使用の文字列: また、マルウェアが商業用パッカーを使用している場合、相互参照のない多くの文字列が見つかることが一般的です。これらの文字列が存在しても、バイナリがパックされていないことを意味するわけではありません。
  • バイナリをパックするために使用されたパッカーを特定するために、いくつかのツールを使用することもできます:
  • PEiD
  • Exeinfo PE
  • Language 2000

基本的な推奨事項

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

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする