• ベストアンサー

「逆コンパイル」ってできるんですか?

自力なり、ツールをつかうなりして逆コンパイルすれば、EXE形式から、Cなどのプログラム言語に変換することができるんですよね。 そうすると、ソフトを作っている会社なんかは、自社が力をそそいで作ったプログラムを簡単に真似されたりすると思うんですけど、それでいいんでしょうか。 それから、 ウィンドウズのEXEから、ソースコードに変換することはできないんですか? すごい労力になるけど、やることは可能な気がするんですが。

質問者が選んだベストアンサー

  • ベストアンサー
  • m-kur
  • ベストアンサー率50% (22/44)
回答No.3

>なぜみんなWindowsのソースコードを手に入れないのでしょう。 技術的、社会的に面倒でメリットが無いからです。 ウイルスについては、確かにバグを利用したものもありますが、 その場合でも、既知のバグに対してウイルスを作成する人がほとんどだと思います。 >LinuxのようなWindowsに対抗している会社が、Windowsを研究するためにソースコードを手に入れることなどなないのですか。 私もそうですが、Linuxや*BSDとその周辺の開発者の多くはボランティアとして趣味でコードを書いています。商売でないのですから、Windowsの研究をする必要もありませんよね。 要は、人のコードを真似をして書いて、何が楽しいのか?と言うことなんです。 >もしくは、将棋ソフトを作っている会社が、他社のソフトの将棋の思考の大事な部分を手に入れるとか。 商売なんですから、解析するための時間と手間を考えたら、自分達で作ったほうがコスト面で有利だと思われます。

gorisuke
質問者

お礼

例えば、ラーメン屋が味の秘密を探るために他店のラーメンを食べるとか、スープを取り寄せて何を調味料に使っているかを調べるとか、そういうことをコンピューターソフト業界がやっているかと思っていたんですが、(ラーメン屋がやっていかは知りませんが) ソフト業界ではやらないようですね。 ありがとうございました。

その他の回答 (2)

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

逆コンパイルとか言われる手法ですね。ある程度は可能です。 しかし、 価格=単価×個数 のような処理をビルドしたものを逆コンパイルしても、変数名の情報などが無いため、 a=b*c のようなソースしか得られません。人間が理解するには厳しいです。 また、通常は処理の最適化などが行われるので、厳密に元のソースを復元するのは不可能です。 関数 価格(単価, 個数){価格=単価×個数} メイン処理 魚の価格=価格(魚の単価, 魚の個数) 肉の価格=価格(肉の単価, 肉の個数) ↓ メイン処理 魚の価格=魚の単価×魚の個数 肉の価格=肉の単価×肉の個数 などとなっていると、関数が見えてこない。 あとは、ライブラリを使ったりしますし。 -- > 簡単に真似されたりすると思うんですけど、 そのために、使用許諾書などにそういう事を行わない場合に限って使用(インストール?)を認めますという旨の記述があります。 法律の条文にあったかはちと不明。 真似していた事がバレて、訴えられて、立証されれば、それによる損害を賠償しなければなりません。 とはいえ、人のソースコードを見るような事も、技術の発展には不可欠という側面もあります。 ソースコードを見なくても、データの並びやふるまいから処理内容が連想できて、設計の参考になる事はあります。 -- > ウィンドウズのEXEから、ソースコードに変換することはできないんですか? 逆アセンブルならば、debugコマンドとかで可能です。 開発環境が入っていると「デバッグしますか?」なんて聞かれて、見たくも無いソースを見せられる場合も…。 > すごい労力になるけど、やることは可能な気がするんですが。 通常は割に合わないので、誰もやりません。 例えば、Windows付属のメモ帳、一人で○○年がかりでとか、○億円かけて人を雇って○年がかりとかで出来るかも知れませんが…。

gorisuke
質問者

お礼

>逆アセンブルならば、debugコマンドとかで可能です。 できるのであれば、なぜみんなWindowsのソースコード を手に入れないのでしょう。それとも、手に入れた人が、バグなんかを見つけて、ウィルスを作ったりしてるんですか? >通常は割に合わないので、誰もやりません。 LinuxのようなWindowsに対抗している会社が、Windowsを研究するためにソースコードを手に入れることなどなないのですか。 もしくは、将棋ソフトを作っている会社が、他社のソフトの将棋の思考の大事な部分を手に入れるとか。

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.1

アセンブリ言語への逆コンパイルであれば出来ますね。 C言語のソースへといった場合は、コンパイルするときのパラメータでそういった指定をしておかないと出来ませんし、またコンパイラのベンダーが違うとかバージョンが違うといったことでうまくいかないこともありますね。 蛇足ですが、Javaはソースレベルまで逆コンパイルできるんですよ。

関連するQ&A