web-dev-qa-db-ja.com

Windowsの.exeを "逆コンパイル"することは可能ですか?または少なくとも議会を見ますか?

私の友人がFacebookからマルウェアをダウンロードしましたが、自分に感染することなくそれが何をするのか知りたいです。私はあなたが本当に.exeを逆コンパイルすることができないことを知っています、しかし私は少なくともアセンブリでそれを見ることができますか、あるいはデバッガを取り付けることができますか?

.NETの実行ファイルではなく、CLIヘッダーではないと言うように編集します。

208
swilliams

デバッガを使用すると、プログラムAssemblyを対話的に進めることができます。
逆アセンブラを使用すると、プログラムAssemblyをより詳細に表示できます。
デコンパイラーを使用すると、プログラムの記述内容を知っていれば、プログラムを部分的なソースコードに戻すことができます(これは、次のような無料のツールで確認できます)。 as PEiD - プログラムがパックされている場合、最初にそれをアンパックする必要がありますOR Detect-it-Easy あなたがどこにもPEiDが見つからない場合DIEは github について強力な開発者コミュニティを持っています。

デバッガ

  • OllyDbg 、無料の素晴らしい32ビットデバッガ。たくさんのユーザー作成のプラグインやスクリプトを見つけるとさらに便利になります。
  • WinDbg 、無料、Microsoftの非常に有能なデバッガ。 WinDbgは、他のデバッガよりもデータ構造についてよく知っているので、Windowsの内部を見るのに特に便利です。
  • SoftICE 、友達にSICE。 SoftICEは一種のハードコアツールで、オペレーティングシステムの下で動作します(呼び出されるとシステム全体を停止します)。入手が難しく、ハードウェア(またはソフトウェア、つまりVistaやNVIDIA gfxカードでは機能しない)では機能しない場合がありますが、SoftICEは依然として多くの専門家によって使用されています。

逆アセンブラ:

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

デコンパイラ

  • Visual Basic: VBデコンパイラ (市販)は、やや識別可能なバイトコードを生成します。
  • 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 here で読むことができます。

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

また、逆アセンブル、あるいはデバッグさえすることを忘れないでください。 他の人の ソフトウェアは通常最低でもEULAに違反しています:)

396
anon6439

psoulのあなたの質問に対する優れた投稿の答えは私が彼の良い仕事を再現することはしませんが、なぜこれがすぐに完全に有効であるか、ひどくばかげた質問であるかを説明するのに役立つと思います。結局のところ、これは学ぶ場所ですね。

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

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

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

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

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

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

(誤解しないでください。そうしようとする試みがありました。彼らは曲ファイルのDRMと同じように動作します。)

ただし、分解方法には注意点があります。変数名は存在しません。そのようなことはあなたのCPUには存在しません。図書館への電話は地獄のように混乱しやすく、さらにバイナリを分解する必要があります。そして、議会は最高の条件で読むのが地獄として難しいです。

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

とにかく、これはいくぶん詳細に説明されています、しかし私はそれが助けになることを願っています。誰もが私の側の虚偽の記載を訂正することができます。それはしばらく経ちました。 ;)

40
Jason L

良い知らせIDA Proは、現在、旧バージョンでは無料です。 http://www.hex-rays.com/idapro/idadownfreeware.htm

14
Matthew

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

11
utku_karatas

x64dbg は、積極的に管理されている優れたオープンソースのデバッガです。

10
BullyWiiPlaza

確かに、 IDA Pro をご覧ください。あなたはそれを試すことができるように彼らは評価版を提供しています。

6
Douglas Mayle

あなたが欲しいのは "逆アセンブラ"と呼ばれる種類のソフトウェアです。

クイックグーグルはこれを生み出す: http://www.geocities.com/~sangcho/disasm.html

5
Corey Trager

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

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

5
joeld

アセンブリでそれを表示するための情報を入手することができますが、最も簡単な方法は仮想マシンを起動してその動作を確認することです。あなたがオープンシェアを持っていないか、あるいはそれが飛び越えることができるようなものを持っていないことを確認してください;)

4
Rob Prouse

Boomerang もチェックする価値があります。

4
Andru Luvisi

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

Immunity Debuggerは、エクスプロイトを作成し、マルウェアを分析し、バイナリファイルをリバースエンジニアリングするための強力なツールです。当初Ollydbg 1.0のソースコードに基づいていましたが、名前付きのバグが修正されました。拡張性を容易にするためによくサポートされたPython APIを持っているので、解析に役立つPythonスクリプトを書くことができます。

また、CorelanチームのPeterが、 mona.py という優れたツールという優れたツールを作成したという優れた人もいます。

3
jyz

あなたは逆コンパイルexeファイルのために非常に良いdotPeekを使用することができます。これは無料。

https://www.jetbrains.com/decompiler/

2
Do Nhu Vy

時間がない場合は、マルウェアをcwsandboxに送信してください。

http://www.cwsandbox.org/

http://jon.oberheide.org/blog/2008/01/15/detecting-and-evading-cwsandbox/

HTH

2
plan9assembler

あなたのコンピュータを感染させずにそれが何をするのかを見るためにプログラムを実行したい場合は、 VMWare やMicrosoft VPCのような仮想マシン、あるいは SandboxIE のようにプログラムをサンドボックス化できます。

2
Joel Lucsy

Explorerスイート はあなたが望むことをすることができます。

0
FloatFish