人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

C言語で組んだ実行ファイルについて質問ですが、
逆アセンブラとかいう手法で、ソースファイルが裸状態になるという噂を耳にしましたが、それは本当でしょうか?もしそれが事実ならどのようにして、
解析するのでしょうか?
具体的な方法に必要な道具など教えていただきたく宜しくお願いします。
(Wikiは必要ないです。)

●質問者: harunoharuno
●カテゴリ:コンピュータ インターネット
✍キーワード:Wiki アセンブラ ソース ファイル 事実
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● Mook
●60ポイント

まったくうそというわけではありませんが、元のソースファイルに復元できるわけではありません。


逆アセンブルにより、プログラムのバイナリコードをアセンブルコードに変換することは可能で、これはプログラムにより実現します。


ただし、復元されるのはここまでで元のCソースが復元されるわけではありません。

最適化を行うことでプログラミングの構造も初期の状態から変わることもありますし、if,switch などの分岐や for, while などのループはアセンブラのコードとしては等価なので、元の構文も簡単には判別できません。


変数名や、関数名はラベルとして残ることがありますが、得られる情報はその程度で、コメントはプログラム中には残っていません。

逆アセンブラ

◎質問者からの返答

アセンブラからCに変換するツールなどがあれば、実行ファイルからソースを

作成することも可能そうですね。

もしアセンブラからCソースを作成するツールなどありましたら再度教えていただけるとうれしいです。


2 ● studioes
●60ポイント

逆アセンブルは、Cのソースが出るわけではありません。 アセンブラのソースが出るだけです。

そして、アセンブラの命令と実行命令はほぼ1:1で対応するので、単純に実行コードを読んでいってASMを吐き出すだけです。

Cのレベルまでソースを戻すことはほぼ無理です(目指すツールはありますが、完全にはなりません)

また、吐き出されたソースは、実行に最適化されたソースですので、慣れていなければ読めないと思いますが・・・(int i=0は、xor eax,eaxとかになります)

必要な道具は、逆アセンブラですね。 フリーもありますし、商用ソフトもあります。 IDA Proが高機能で便利ですね。

http://www.datarescue.com/idabase/index.htm

方法は、IDA Proを立ち上げて、実行ファイルを入れて、形式を設定するだけです。

◎質問者からの返答

回答ありがとうございます。

いろいろ便利な道具があるようですね。

興味があるのですが、アセンブラがわからないと検証できないな・・。

>>Cのレベルまでソースを戻すことはほぼ無理です(目指すツールはありますが、完全にはなりません)

そうなんですか、、、だれかに

中を見られるのではないかと思っていましたが、恐怖が薄らぎました。


3 ● noocyte
●100ポイント ベストアンサー

> アセンブラからCに変換するツール

そういうのを「逆コンパイラ (decompiler)」といいます.

(アセンブラからではなく,実行ファイル (機械語) からですが.)


Java は言語仕様上,逆コンパイルされやすいので,

1996(?)年以降,Java の逆コンパイラはすでにたくさん出回っています.

一方,逆コンパイルを困難にするためのツール

(obfuscator,曖昧化ツール,難読化ツールなどという) も出回っています.


これに対し,C/C++ の逆コンパイラははるかに実現困難です.

逆コンパイルのしやすさは,構文要素によって大きく異なると思います.

例えば,式や OS の API (システムコール) の呼び出しなどは比較的簡単に

逆コンパイルできるはずです.逆に共用体や,キャストしたポインタまたは

ポインタ演算を行ったポインタを使ったメモリアクセスなどは非常に

逆コンパイル困難になるのではないかと考えています.


詳しくは↓ (私が日頃,逆コンパイル技術について色々考えていることを書いたものです.)

OKWave QNo.3043962:デコンパイル?について

http://okwave.jp/qa3043962.html


↓これはまだ書きかけですが….

Cの逆コンパイラはどこまで実現可能か,Javaはなぜ逆コンパイルされやすいか?

http://www5d.biglobe.ne.jp/~noocyte/Programming/Decompile.html


Boomerang:オープンソースの逆コンパイラ

http://boomerang.sourceforge.net/

そのスクリーンショット

http://sourceforge.net/project/screenshots.php?group_id=48519&am...


REC 2.1 - Reverse Engineering Compiler

http://www.backerstreet.com/rec/rec.htm


他にもリバースエンジニアリングや逆コンパイル技術の情報サイトなどがありますが,

Wiki は必要ないということなので割愛します.

◎質問者からの返答

noocyteさん。

回答ありがとうございます。

逆コンパイルするためには

開発者が使用したコンパイラを特定し、

アセンブラコードを読みながら、

ソースを推測し修正していくのですね。

また、100%の解読は不可能で

解読出来る場所と出来ない場所が存在することが解りました。

JAVAはキャストや、ポインタなどの表現がない点から

解読しやすいとのことでしたが、

これについても、ソースファイルに戻す作業は人間が

アセンブラコードを読みながら行わないと行けないのですね。

アセンブラの読み方くらいは知っていたほうがいいかなぁ

と考えさせられました。

ちなみにWikiを敬遠したのは、

サーチエンジンでトップにでたリンクをただ

貼り付けるだけの回答をなくすためのものです。

勉強に良いサイトなどあるのでしたら、むしろ

教えてください。宜しくお願いします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ