トップページ⇒tech
83コメント22KB

EXEファイルをプログラムに戻す方法

■ このスレッドは過去ログ倉庫に格納されています
0001勉強家NGNG
私、プログラムをの勉強しているのですが、本を見てもわかりません。
それで、フリーゲームやフリーソフト(EXEファイル)の中身を見たくて、C言語やVBに変換するとうまくいきません。
どなたか、戻す方法を教えてください。それともできないのでしょうか。
0002デフォルトの名無しさんNGNG
ネタUzeeeeeeeeeeeeeeeeeeeeeeeeeeeeee!
0003デフォルトの名無しさんNGNG
マジレス。
プログラミングが分からないやつが他人のソースを見ても意味がない。
逆に混乱するだろう。
おとなしく、他人が作ったゲームで遊びたまえ。

それでも見たいんならヨローパのウェブサイト見れ。
0004デフォルトの名無しさんNGNG
??v??????????ホ????.???????????????ヘ???g???????w?????
0005デフォルトの名無しさんNGNG
メモ帳にドラッグ&ドロップ
ちなみにサル並の脳だと、文字化けするそうです
よく能力テストに使われてます
0006デフォルトの名無しさん NGNG
802様に聞いてください。
0007デフォルトの名無しさんNGNG
アセンブラになら戻せます。
デバッガでトレースしてみてください。
ただしラベルは見えません。
あとデータとコードの区別も自分でやってください。
0008デフォルトの名無しさんNGNG
水野朋子さんという人に聞いてください。
VB のエキスパートです。
0009 NGNG
EXEにソースとつけておけばだいじょうV。
0010デフォルトの名無しさんNGNG
> フリーソフト(EXEファイル)の中身を見たくて、
> C言語やVBに変換するとうまくいきません。

全くもって意味不明
"見たくて"は理解できる。
"VBに変換すると"って、変換方法を知ってるけど失敗してるって事か?
それとも、お前の言語マトリックスに障害が発生しているのか?
00119NGNG
>10
ごめんなさい。 9は、
EXEにソース"を"つけておけばだいじょうV。
でした。
0012デフォルトの名無しさんNGNG
ていうか、EXEファイルは既にプログラムなのでそれ以上戻しようがないと思われ
0013デフォルトの名無しさんNGNG
中身を見るならバイナリエディタを使えば楽勝!(・∀・b
0014デフォルトの名無しさんNGNG
何故か>>11で>>9が>>10にレスしていてwarata
0015デフォルトの名無しさんNGNG
簡単です。拡張子.exeを.cや.basや.cppにするだけです。
パスカルで見たければ.pです。
0016デフォルトの名無しさんNGNG
お湯をかける。これ定説。
0017デフォルトの名無しさんNGNG
コンパイラとは何か。プログラミング言語とは何か。コンピュータはどうやって動いているか。
実行形式とは何か。

この辺を調べてみよ〜。
0018デフォルトの名無しさんNGNG
1ではないですが
でも、理論的に考えると復元が不可能なはずはないよね。

蝶々簡単なプログラムなら変換可能になったりしないのでしょうか?

機械語<- ->アセ<- ->高級言語

そういう実例を扱ったページってどこかにないですか?
0019デフォルトの名無しさんNGNG
その前に
EXEファイル、プログラム
題名に使ったこの二つの単語の意味を知れ
0020デフォルトの名無しさんNGNG
僕は最近プログラムを勉強しはじめた者ですが
一度コンパイルされたものは決して復元しえないと
口をすっぱくして教えられました。ええ。それだけです。。
0021デフォルトの名無しさんNGNG
>最近プログラムを勉強しはじめた者
はそう思っておいてよいでしょうん。

自分でコンパイラを作れる人もいるのだから
モノによっては復元可能かと思うが・・・
0022デフォルトの名無しさんNGNG
復元は無理だね

再度コンパイルすれば似たような動きをするアセンブラのソースに
逆コンパイルすることは可能だろうけど
0023デフォルトの名無しさんNGNG
逆コンパイルして適当にあたりつけながらCに置き換えってのはどうよ。
0024デフォルトの名無しさんNGNG
アセンブラみたいなCには置き換え可能だわな(w
0025デフォルトの名無しさんNGNG
アセンブラソースから手作業で復元は理屈上できるはず
まぁシュレッダー掛けた書類を手作業で元に戻すのと同じようなもん
0026デフォルトの名無しさんNGNG
絶対に元には戻せません。
おなじEXEを吐き出す全く違うソースを作ることは出来るかもしれないけど。
でも変数名やラベルなどが全く復元されないため解読はかなり難しいでしょう。
0027ではここで、わかりやすく説明しよう。NGNG
例えば6x6という式に対する解は36しかないが、
36という解に対する式は無限にある。
0028もう少し詳しく。NGNG
>>27で9×4 等の適当な式を求めることはできるじゃないか、
と思った人は、例えば
 1 1 2 3 5 8 13 21
という数列に対する式を考えてるべし。
これをコンピュータに自動的に解かせるには、
単純な逆変換では無理。

#解答:
 X(n) = X(n-1) + X(n-2)  …(n>2)
    = 1          …(n=0,1)
0029デフォルトの名無しさんNGNG
復元は無理でも、読みやすくすることはできる。
そういうツールもあった。
dis.xとか。
0030デフォルトの名無しさんNGNG
>>27 が言うような論理的な側面も勿論あるが、別の面もある。

ソースの読みやすさに劇的に貢献しているものの1つとして、
変数や関数(やクラス…などなど)の「名前」が、ある。
適切な名前が使われてるソースは、そうでないものよりずっと読みやすい。
そこにこそ作者の「意図」が込められているからね。
機械が読むならどうでもいいんだが、人間が読むならこの差は大きい。

というわけで、変数名とかの情報が捨てられると、極端に読みにくくなるよ。

とあるJavaの逆コンパイルを「困難化」するツールでは
その手を使って、object(つまり.class)ファイルの中に書かれてる
変数名とかの情報を「読みにくい」ものに変えるという処理を
しているそうだ。
それだけで「実用的な」判読性はだいぶ失われるものらしい。

Java以外の多くのコンパイラ言語でも、事情は同じようなもの。
0031デフォルトの名無しさんNGNG
>28
4*9==27
わからん・・・
0032デフォルトの名無しさんNGNG
あと、↓の「PK LITE」みたいに、
http://www.pkware.com/products/pklite.html
EXEを実行可能状態のまま圧縮すると、解析は非常に困難になる。
この種のツールは、EXEの実体を圧縮し、これにメモリ上で実体を解凍して自動的に実行
させるルーチンを付加しているというしくみだから、当然変数名のデータはわからなくなる
し、場合によってはリソースデータもわからなくなる。
0033デフォルトの名無しさんNGNG
>31
おまえのほうがわからん。
0034デフォルトの名無しさんNGNG
コンパイラはある種の1方向ハッシュ関数と言い切って良いですか?
 http://cybozu.co.jp/products/md5/md5.html

あと逆アセンブルと逆コンパイルを混同してる人がいますが、
指摘して良いですか?
0035デフォルトの名無しさんNGNG
逆コンパイルは制御構造などを高級言語化する。
「アセンブリ言語みたいなC言語にする」とかではない。
テーブルジャンプの復元など課題は多い。
変数名だの関数名だのの情報はたいてい実行ファイルに
エミットされたときに消えてる。
使用されたコンパイラが既知であればかなり精度の高い逆コンパイルが
すでに実現されている。
0036デフォルトの名無しさんNGNG
最適化された部分をどう逆コンパイルするのか興味深いな
0037デフォルトの名無しさんNGNG
>>36
ニモニックを中間表現に直してからソースレベルで最適化すると
最適化された部分の制御構造を復元できる、という研究がなされてる。
最適化されたものを、いったん冗長にして、それを別の立場から
最適化する、ということだね。

lha書庫をzip書庫に変換する場合、一旦伸張して再圧縮すれば簡単みたいな。
0038デフォルトの名無しさんNGNG
思わぬ方向へ。良スレの予感・・・
0039デフォルトの名無しさんNGNG
オープンソースな逆アセンブルライブラリって有りますか?
0040警告屋さんNGNG
>>1-
<><><>警告<><><>
リバースエンジニアリング行為は、
一部の商用パケージでは禁止されています!
#つってもな・・・
0041デフォルトの名無しさんNGNG
パケージマンセー
0042デフォルトの名無しさんNGNG
いままでに逆コンパイルスレがいくつもあったのに、
このスレは妙に話が続いて良スレになってるな(w
0043デフォルトの名無しさんNGNG
>>29
.xを挙げるか(w
懐かしいな・・・
0044デフォルトの名無しさんNGNG
全てのループを末尾再帰関数に復元するとか。
0045デフォルトの名無しさんNGNG
>>39
逆アセンブラではなくて、ライブラリが欲しいの? ライブラリに何を期待しているのか
謎だが、いちおう GNU binutils 挙げとく。
0046デフォルトの名無しさんNGNG
>>45
objdumpだね。便利だ。
0047デフォルトの名無しさんNGNG
>>45
nasmについてる
さがしてみそ
0048デフォルトの名無しさんNGNG
なんか、難しく書いてるけど、VBのプログラムなら、
exe2vb 使えば簡単に戻るのでは?
Cのプログラムは無理だけどNE!
0049デフォルトの名無しさんNGNG
そんなものどこにあるんだ〜?
0050pppppppNGNG
http://www.google.com/search?sourceid=navclient&q=exe2vb
0051デフォルトの名無しさんNGNG
なにこれおとせん。
が、P-CODEでなきゃ戻せないとかのオチだろドーセ。
いまどきネイティブじゃないEXEなんか配布されてるかよ。
0052デフォルトの名無しさんNGNG
>>29
dis.x 随分世話になったよ
0053デフォルトの名無しさんNGNG
>>51
ていうか、vb scriptって書いてあるぞ
0054デフォルトの名無しさんNGNG
goto
とか乱発されたソースがでてきそうだな。
>逆コンパイラ。


実際どうなのか知らんけど。
0055デフォルトの名無しさんNGNG
スレ違いかもしれませんが、C言語の元から入ってる関数(printf、とかscanf)の
中身って見れるんですか?よく本には「最終的にはWRITEなどを呼んでいる」と書いていますが。
0056ドキュソ学生NGNG
>>55
マクロ展開やらさらなる関数呼び出しやらの様子ならヘッダファイル開いてみればわかると思うけど。
(ブラックボックス的に使ってる方が幸せな気がする)
0057デフォルトの名無しさんNGNG
>>56
getc() ならともかく printf(), scanf() は普通はそれ自身ライブラリ関数だろ。

>>55
ライブラリのソースコードが提供されている処理系を使っている場合には、参照できる。
VC6 なら C:/Program Files/Microsoft Visual Studio/VC98/CRT/SRC (標準のディレ
クトリにインストールした場合)、*BSD なら /usr/src/lib/libc 以下を参照。

他の環境は良く知らんので、環境を明示して聞きなおし。
0058デフォルトの名無しさんNGNG
printfはvsprintfを呼んで一文字ずつwriteしてるだけじゃん?
vsprintfはソースを見れば簡単に内容わかるよ。
システム関数が最終的になにになってるかはディスアセンブル
しないとわかんないよ。システムコールの方法はOSによって違う。

>>54
goto乱発ソースを吐く逆コンパイラには価値ありません。
そういう部分を意味解析して高級化するのが逆コンパイラの肝の部分。
学生の頃そういう研究してたんだけどね。昔の資料ひっかきまわしてみるわ。
005955NGNG
>>57
僕はフリーのBorland C++ 5.5.1です。
>>58
そのソースがどこにあるのか分からないです。
bccをインストールしてあるディレクトリを見てもそれらしきファイルが無かったので。
0060デフォルトの名無しさんNGNG
>>58

54ですが、研究していたというのは
まだ実用ではないということですか?

だとしたら、結局乱発すると思われ。(;´Д`)
0061≠58NGNG
>>59

*.libとかそういうファイルになっていると思うよ。
少なくとも根幹となる関数が毎回コンパイルされているとは考えがたい。
0062=58NGNG
>>59
あー、Borlandは知らないわ。
フリーのBCならソースはインストールされないかもね

>>60
ま、学生の頃だから。今はどうなんだろね。
世の中にいろんなツールがあるように
goto乱発な「価値のない」逆コンパイラもあれば
頑張って高級化してるものもあるってこと。
俺は逆コンパイラを作る研究をしてたわけじゃないけどね。
0063デフォルトの名無しさんNGNG
goto乱発でもいいから、移植可能なソースを吐いてくれるツールってないですかね。
機種依存の部分を重点的に抽象化してくれればというか、なんというか、、、
0064デフォルトの名無しさんNGNG
ぐぐる/search?q=decompiler とかして見たけど、昔見てたページは載ってないなあ。
0065デフォルトの名無しさんNGNG
>>8
久々にその名前を見てわらた。
最近 ML とかで見ないよね、日本中の技術系 ML から除名されたか?
0066デフォルトの名無しさんNGNG
最適化コンパイルされた実行ファイルを高級言語に書き戻せるとしたら、
言い換えるところのフルアセンブルで書かれた実行ファイルでさえ
高級言語に"変換"出来るという事なんですかね〜。
もう原型留めてなくてもいいし、再コンパイルして同じ形になる必要も
ないから、誰か作ってお願い。
0067デフォルトの名無しさんNGNG
これまともに作った奴、大金持ちになれると思う。
もちろん原型留めてないのはダメ。
オリジナルソースよりも綺麗なソースを生成するぐらいじゃないと。
0068デフォルトの名無しさんNGNG
英独の翻訳で成功した systrans のアプローチは
ひたすら膨大な数の単語、慣用句を登録することだった(その数、数十万)。
逆コンパイラも同じアプローチで作れるんじゃない?
systrans は20年かかったけど。
0069デフォルトの名無しさんNGNG
逆コンパイル・・・興味あるな。
関数レベルに分割してその部分だけでもgoto乱発ソースに変換してくれるなら
かなり便利だと思うが。
後は特定のAPIとか標準関数を戻してくれれば。
10万ぐらいなら買うな。
0070デフォルトの名無しさんNGNG
>>68

自然言語は、仕様の変化が少ないからなぁ...。20年もかかったら、目標とする言
語自体がなくなっているかも...。
0071デフォルトの名無しさんNGNG
インタプリタの言語ならソース=実行・・・いや、なんでもないです。
0072デフォルトの名無しさんNGNG
逆オプティマイズ逆コンパイラ
言ってみただけ
0073デフォルトの名無しさんNGNG
>>70
「チョベリグ」の発生から消滅までの時間を考えるとそうとも言えないぞ、と。
0074デフォルトの名無しさんNGNG
ところで逆コンパイラって実在するの?
JavaのJADは有名だが、CのEXEは聞いたことがない。
URLキボンヌ。
0075デフォルトの名無しさんNGNG
シマンテックとかはウィルスを逆アセンブラ等で解析するのでしょうか?
でないとどう動作するのか分かりませんよね・・・。
0076デフォルトの名無しさんNGNG
>>75
実はな、奴らはウィルスを駆除してるんではなく、
*作っている*のだ。ウィルスの発生源を辿ると判る。
作り方が判れば、駆除も簡単にできる。
そもそも生みの親なのだから。
0077仕様書無しさんNGNG
てゆうかトロイ仕込まれてるようなものじゃん。
0078デフォルトの名無しさんNGNG
ウィルス作った奴がワクチンメーカにソースを売って・・・という話も
0079デフォルトの名無しさんNGNG

どこの何ていうバカソフトだったっけ?
某ExSTANDのREADME.TXTに誤報だしたソフトは?
0080デフォルトの名無しさんNGNG
昔、Unixのカーネルを逆アセンブルして
さらに逆コンパイルした勇者の話を
聞いたことがあるような…。
まだCコンパイラがヘバヘバで
ろくすっぽ最適化されてなかったから楽勝だったとか。

手作業ならなんとでもなるか。
0081デフォルトの名無しさんNGNG
このスレみて「朋子様」思い出したのは漏れだけ?
VBで書いた変な代物を公開した挙げ句バイナリみてアルゴリズム(?)を
悟れとおっしゃったあの「朋子様」
0082デフォルトの名無しさんNGNG
>>81
>>8
0083デフォルトの名無しさんNGNG
最近 diswin にお世話になりました
知りたいことがわかったので
作者さんに感謝します...
■ このスレッドは過去ログ倉庫に格納されています