Windows .exeを「逆コンパイル」することは可能ですか?または、少なくともアセンブリを表示しますか?


237

私の友人がFacebookからいくつかのマルウェアをダウンロードしましたが、自分自身に感染することなくそれが何をするのか知りたいです。.exeを実際に逆コンパイルできないことはわかっていますが、少なくともアセンブリで表示したり、デバッガをアタッチしたりできますか?

.NET実行可能ファイルではなく、CLIヘッダーではないことを編集してください。


3
Facebookからマルウェア?それを説明できますか
Aditya Mukherji

非常に遅い返信でごめんなさい...しかし、私がそれが起こったと思う方法は次のとおりでした:彼女はマルウェアを実行し、ある時点であなたを要求した「ビデオ」へのリンクを含むFB(私)のすべての連絡先にスパムを送りました「新しいコーデック」をダウンロードしてください。この意味でワームのように振る舞ったと思います。
swilliams 2008年

回答:


448

では、デバッガあなたはアセンブリ対話形式でプログラムをステップ実行することができます。
では逆アセンブラ、あなたはより詳細にアセンブリプログラムを表示することができます。
では逆コンパイラ、あなたはそれはあなたのような無料ツールを見つけることができた(で書かれていたものを知っていると仮定すると、一部のソースコードにプログラムに背を向けることができPEID -プログラムが満載されている場合には、最初にそれを解凍する必要がありますまたは、PEiDが見つからない場合は、簡単に検出できます。現在、DIEには、githubに強力な開発者コミュニティがあります。

デバッガ:

  • OllyDbg、無料、細かい32ビットデバッガー。ユーザーが作成した多数のプラグインとスクリプトを見つけて、さらに便利にすることができます。
  • WinDbg、無料、Microsoftによる非常に有能なデバッガ。WinDbgは、他のデバッガーよりもデータ構造について多くを知っているので、Windows内部を調べるのに特に役立ちます。
  • SoftICE、友達へのSICE。商用および開発は2006年に終了しました。SoftICEは、オペレーティングシステムの下で実行されるハードウェアツールの一種です(呼び出されるとシステム全体を停止します)。SoftICEは、入手が難しく、一部のハードウェア(またはソフトウェア-つまり、VistaまたはNVIDIA gfxカードでは機能しません)では機能しない可能性がありますが、依然として多くの専門家によって使用されています。

逆アセンブラー:

  • IDA Pro(商用)-最上位の逆アセンブラー/デバッガー。マルウェアアナリストなど、ほとんどの専門家が使用します。ただし、かなりの費用がかかります(無料版はありますが、かなり限定されています)。
  • W32Dasm(無料)-少し古いですが、仕事は完了です。私はW32Dasmが最近放棄されたと思います、そしていくつかの非常に便利な機能を追加するために多くのユーザー作成のハックがあります。最適なバージョンを見つけるには、周りを見回す必要があります。

デコンパイラー:

  • Visual Basic:VB Decompiler(商用)は、ある程度識別可能なバイトコードを生成します。
  • Delphi:DeDeは無料で、高品質のソースコードを生成します。
  • C:HexRays、商用、同じ会社によるIDA Proのプラグイン。素晴らしい結果を生み出しますが、費用は高くつき、誰にも販売されません(またはそう聞いたようです)。
  • .NET(C#):dotPeek、無料、.NET 1.0-4.5アセンブリをC#に逆コンパイルします。.dll、.exe、.zip、.vsix、.nupkg、および.winmdファイルのサポート。

何をしていても便利な関連ツールには、ResourceHacker(無料)などのリソースエディターや、Hex Workshop(商用)などの優れた16進エディターがあります。

さらに、マルウェア分析を行っている(またはSICEを使用している)場合は、仮想マシン、つまりVMware Workstation内ですべてを実行することを心からお勧めします。SICEの場合は実際のシステムをBSODから保護し、マルウェアの場合は実際のシステムをターゲットプログラムから保護します。VMwareによるマルウェア分析については、こちらをご覧ください

個人的には、Olly、WinDbg、W32Dasm、およびいくつかの小さなユーティリティツールを使用しています。

また、他の人のソフトウェアを分解したり、デバッグしたりすることは、通常、少なくともEULAに違反することを忘れないでください:)


16
私は最後の段落の一般性、良いアドバイスに感謝しますが、質問の文脈ではおかしいです:ウイルスはEULAに付属しているとは思えません!;-)
PhiLho 2008年

4
実際、一部のマルウェアや最近のトロイの木馬でさえもEULAが組み込まれています(ああ、ロシア語です)。もちろん、それらは訴訟で無視される可能性があります(そして無視されます)。 ..また、それらは通常、いずれにせよ法廷で何かを意味するにはあまりにもひどく書かれています。
anon6439 2008年

2
IDA Proの以前のバージョンは、非営利目的での使用は無料です。
Simon Buchan

6
最近のほとんどのマルウェア(少なくともコンパイルされたマルウェア)は、VMWare、Virtual PC、WINE、VirtualBoxなどで実行されているかどうかを簡単に検出できることに注意してください
Mick

VMで実行している場合は、Blue Pill攻撃に注意してください。
Siqi Lin、

44

psoulの優れた投稿があなたの質問に答えるので、私は彼の良い仕事を再現しませんが、これが一度に完全に有効であるがひどくばかげた質問である理由を説明するのは助けになると思います。結局、これは学ぶ場所ですよね?

現代のコンピュータープログラムは、一連の変換を通じて生成されます。一連の変換は、人間が読み取れるテキスト命令の本体(「ソースコード」と呼ばれます)の入力から始まり、コンピューターが読み取り可能な命令の本体(「バイナリ」または「マシン」と呼ばれます)で終わります。コード")。

コンピュータが一連の機械コード命令を実行する方法は、最終的には非常に単純です。プロセッサが実行できる各アクション(たとえば、メモリからの読み取り、2つの値の加算)は、数値コードで表されます。1番が悲鳴を意味し、2番がくすくす笑いを意味し、それに応じて1または2のカードを持ち、それに応じて悲鳴またはくすくす笑うことを期待していると私が言った場合、コンピューターが使用するのと基本的に同じシステムを使用します動作します。

バイナリファイルは、これらのコード(通常は「opコード」と呼ばれます)と、opコードが作用する情報(「引数」)のセットです。

現在、アセンブリ言語はコンピュータ言語であり、言語の各コマンドワードは、プロセッサ上の1つのopコードを正確に表します。アセンブリ言語コマンドとプロセッサのオペコードの間には、1対1の直接変換があります。このため、x386プロセッサのコーディングアセンブリは、ARMプロセッサのコーディングアセンブリとは異なります。

逆アセンブルはこれだけです。プログラムはバイナリ(マシンコード)を読み取り、オペコードを同等のアセンブリ言語コマンドで置き換え、結果をテキストファイルとして出力します。これを理解することが重要です。コンピュータがバイナリを読み取れる場合は、手にあるオペコードテーブルを使用して手動で(ick)、または逆アセンブラを介して、バイナリも読み取ることができます。

逆アセンブラにはいくつかの新しいトリックなどがありますが、逆アセンブラは最終的には検索と置換のメカニズムであることを理解することが重要です。これが禁じられているEULAが最終的に熱風を吹き付けている理由です。コンピュータがプログラムデータを読み取ることを同時に許可したり、コンピュータがプログラムデータを読み取ることを禁止したりすることはできません。

(誤解しないでください。そうしようと試みられてきました。曲ファイルのDRMと同様に機能します。)

ただし、分解アプローチには注意点があります。変数名は存在しません。あなたのCPUにはそのようなものは存在しません。ライブラリの呼び出しは地獄のように混乱し、多くの場合、さらにバイナリを分解する必要があります。そして、最高の条件で読むのは地獄のように難しいです。

ほとんどのプロのプログラマーは、頭痛を覚えずに座ってアセンブリ言語を読むことはできません。アマチュアにとってそれは起こりそうもないことです。

とにかく、これはやや光沢のある説明ですが、それが役に立てば幸いです。誰でも私の側の虚偽の記述を自由に修正できます。久しぶりです。;)


1
これは逆アセンブルについて詳しく説明していますが、逆コンパイルについての詳細を聞きたいです。それは同じように無益になる可能性がありますか?それの警告は何ですか?
プロメテウス

@has:ネイティブコードの逆コンパイルはかなり難しい課題であり、多くの場合完全に不可能です。オプティマイザは非常に積極的で、ソースコードをまったく何にも変換しないことがよくあります。何も逆コンパイルできません。
IInspectable 2018


11

適切なデバッガーであれば、これを行うことができます。OllyDbgを試してください。(編集:WinAPI呼び出しのパラメーターをデコードする素晴らしい逆アセンブラーがあります!)




6

マルウェアが何をしているかを理解しようとしているだけなら、ファイルシステム、レジストリ、ポートなどにアクセスしようとするたびに報告する無料のツールProcess Monitorのようなものの下でそれを実行する方がはるかに簡単かもしれません...

また、無料のVMWareサーバーのような仮想マシンを使用すると、この種の作業に非常に役立ちます。「クリーン」なイメージを作成し、マルウェアを実行するたびにそのイメージに戻ることができます。


4

アセンブリでそれを表示するいくつかの情報を取得する可能性がありますが、仮想マシンを起動してそれが何をするかを確認するのが最も簡単なことだと思います。開いている共有がないことを確認してください。


ええ、私はそれについて考えました、しかし私はそれを殺すためだけにVMをセットアップする面倒を経
たく

1
確かに、この1つのケースでは手間がかかりますが、新しいソフトウェアやこのようなものをテストするためにVMを保持しておくと便利だといつも思っています。その後、好きなようにして、最後に状態を保存しないことを選択し、次の実行のためにクリーンなVMに戻ることができます。
Rob Prouse 2008年



3

Immunity Debuggerについて誰も何も言わなかったなんて信じられません。

イミュニティデバッガーは、エクスプロイトの記述、マルウェアの分析、バイナリファイルのリバースエンジニアリングを行う強力なツールです。最初はOllydbg 1.0のソースコードに基づいていましたが、名前に関するバグが修正されました。簡単に拡張できるPython APIが十分にサポートされているため、Pythonスクリプトを記述して分析に役立てることができます。

また、CorelanチームのPeterが書いた、mona.pyという優れたツールがあります。





2

2019年には、ギドラ(https://ghidra-sre.org/)をチェックする価値があります。これはオープンソース(そして無料)であり、かなり読みやすいCコードに逆コンパイルする機能を含め、驚異的なコード分析機能を備えています。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.