hacktricks/reversing/cryptographic-algorithms/unpacking-binaries.md
2023-07-07 23:42:27 +00:00

6.6 KiB
Raw Blame History

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

パックされたバイナリの特定

  • 文字列の不足: パックされたバイナリにはほとんど文字列が存在しないことがよくあります。
  • 多くの未使用の文字列: マルウェアが商用パッカーを使用している場合、クロスリファレンスのない多くの文字列が見つかることがよくあります。ただし、これらの文字列が存在しているからといって、バイナリがパックされていないとは限りません。
  • バイナリのパッカーを特定するために、いくつかのツールを使用することもできます:
  • PEiD
  • Exeinfo PE
  • Language 2000

基本的な推奨事項

  • パックされたバイナリを解析する場合は、IDAで下から上に解析を開始します。アンパッカーは、アンパックされたコードが終了すると終了するため、アンパッカーが最初に実行時にアンパックされたコードに実行を渡すことはまれです。
  • レジスタまたはメモリの領域へのJMPまたはCALL、または引数とアドレスの方向をプッシュし、retnを呼び出す関数を検索します。この場合、関数の戻り値は、呼び出される前にスタックにプッシュされたアドレスを呼び出す可能性があります。
  • VirtualAllocブレークポイントを設定します。これにより、プログラムがアンパックされたコードを書き込むためのメモリ領域を割り当てることができます。関数を実行した後、"run to user code"またはF8を使用してEAX内の値に到達します。そして、そのアドレスをダンプでフォローします。アンパックされたコードが保存される領域であるかどうかはわかりません。
  • 引数として値 "40" を持つ VirtualAlloc は、Read+Write+Execute実行が必要なコードがここにコピーされるを意味します。
  • コードをアンパックする間に、算術演算や**memcopyまたはVirtualAllocのような関数への複数の呼び出しが見つかることが普通です。関数が算術演算のみを実行し、おそらくいくつかのmemcopyを実行するように見える場合、関数の終わり**おそらくレジスタへのJMPまたは呼び出しを見つけるか、少なくとも最後の関数の呼び出しを見つけてから実行してください。なぜなら、そのコードは興味がないからです。
  • コードをアンパックする間に、メモリ領域の変更があるたびにメモしてください。メモリ領域の変更は、アンパックコードの開始を示す可能性があります。プロセスハッカーを使用して簡単にメモリ領域をダンプすることができます(プロセス→プロパティ→メモリ)。
  • コードをアンパックしようとする際に、アンパックされたコードで作業しているかどうかを知るための良い方法(そのままダンプできる)は、バイナリの文字列をチェックすることです。ある時点でジャンプを実行し(おそらくメモリ領域を変更)、追加された文字列が非常に多いことに気付いた場合、アンパックされたコードで作業していることがわかります。
    ただし、パッカーにすでに多くの文字列が含まれている場合は、単語 "http" を含む文字列の数を確認し、この数が増加するかどうかを確認できます。
  • メモリ領域から実行可能ファイルをダンプする際には、PE-bearを使用して一部のヘッダーを修正することができます。
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
  • サイバーセキュリティ会社で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!

  • 独占的な[NFT