逆コンパイラCodeReverseを作る

■ このスレッドは過去ログ倉庫に格納されています
1片山博文MZコスモ ◆T6xkBnTXz7B0
垢版 |
2013/09/24(火) 14:58:48.34
CodeReverseは、片山博文MZが開発している、Windows用の逆アセンブラ兼ダンプツールです。
最終的には「リバーシブルな」逆コンパイラを目指しています。

CodeReverse公式サイト
http://katahiromz.web.fc2.com/codereverse/

GitHubレポジトリはこちら
https://github.com/katahiromz/CodeReverse
2013/09/24(火) 23:06:25.98
できたらよんで。
2013/09/24(火) 23:17:17.38
>>11
> MinGWから頂くかも知れません。ライセンスはどうするか? アイコンのデザイン、洒落てるでしょ?
MinGWのソース使ったら、配布するときのライセンスはGPLになると思う。
一部パブリックドメインらしいけれど。
2013/09/25(水) 00:34:40.81
アムロの親父みたいに俺の親父もボケてしまった。
たしかに昔はある分野で日本一の技能をもってた。俺の目標は親父だった。
今は硬い世界の殻に閉じこもってしまって、もはや日常会話しか通じない。
2013/09/25(水) 02:11:22.19
うーむ、今のところこの世にまともなC/C++の逆コンパイラが
存在しない事を考えても片山程度の技術力で作れるとは思えんが・・・
2013/09/25(水) 05:45:24.18
ま、なんかできたらまた呼んでくれ
2013/09/25(水) 21:15:11.17
ヘッダファイルもプリプロセッサも要るから、単純にMinGWに寄生する形にします。
バージョンアップの度にいちいちでっかいファイルをダウンロードさせるのも不憫だから。
ライセンスはGPLになる予定です。
2013/09/25(水) 21:50:21.91
つーか、片山GUIはどうした?予想通り挫折したのか?

そんなんじゃ逆コンパイラなんてもっと無理だろ
2013/09/25(水) 22:56:47.40
自動車の命はエンジンでしょ。GUIは後で自由に作れるから。
2013/09/26(木) 00:17:10.71
自動車の命は乗り心地だと思う
2013/09/26(木) 01:24:31.25
>>19
そういう問題じゃねーだろw

お前にはモノを最後まで作り上げる能力が無いって事だ
あれだけWin32APIやMFCに代わるGUIを作るって豪語してたろ
多分お前はこの逆コンパイラも作れないし、後になってもGUIも作れんよ
2013/09/26(木) 01:48:56.57
まあ一人で色々作ってたら未完成になることは多い。
そういう未完星人の同類なら、GUI作りくらい協力してやってもいい。
だが残念だがそれは無理だ。なぜなら彼が作っている物は俺よりしょぼい。
もはや彼が俺に「あなたのプロジェクトに協力させて下さい」と頼まなければいけないレベルなのだ。
残念である。世の中は不条理に満ちている。
2013/09/26(木) 01:53:10.86
まあ誰もが出来ないと思ってるよ

グラフィックライブラリもこれを最後に音沙汰なしだしな

975 名前:片山博文MZパンク ◆0lBZNi.Q7evd [sage] 投稿日:2013/03/21(木) 03:21:59.90
MZC2順調に開発中。。。
2013/09/26(木) 01:55:38.06
順調に開発中クソワロタwww

どこが順調なんだよwww
2013/09/26(木) 02:03:09.27
CUIの有り難みがわからない人とは話しが合わないっす。
CUIにパイプラインをつなげてGUIを作るなんてお茶の子さいさいっす。
俺はサイドビジネスで忙しいから、空いた時間で作ってるっす。
CUIの使い方も知らない人はうざいから消えてね。
2013/09/26(木) 02:09:39.70
出来ない人間の言い訳きたwww
2013/09/26(木) 02:13:56.61
ふーむ、CUIのありがたみがわかってる人間がなんでわざわざ
二番煎じのGUIを作ろうと思ったのか。しかもオリジナルより劣化してる。

更には、お茶の子さいさいと言いながら、いまだに何の成果物も出せないのはこれいかに。
>>23のレスからもう半年も経過しているが。
2013/09/26(木) 02:17:11.27
俺は貴様らよりも自由じゃないから。夜遊びはできないし、インターネットに
つなげてもらえないし。パソコンの使用時間は制限されてるし。
この書き込みも見張りに見つからないように携帯から書き込んでいるところ。
2013/09/26(木) 02:17:33.78
典型的な口だけダメ人間の末路だなw
2013/09/26(木) 02:19:58.65
こりゃアカンで。ちょっと期待してたらどうやら>>1の人格・人間性に
相当の問題アリやな。
2013/09/26(木) 02:24:00.61
クロスワードギバーというパズル作成ソフトで結構反響あった。MZ KeyLoggerもわりと人気あるし。
2013/09/26(木) 02:31:14.21
そうそう幅広くニッチなところ狙ってけ。おまえはわけのわからんものを大量に発明して東京都知事選に変態枠で出馬するようなタイプなんだ。
2013/09/26(木) 03:00:48.33
× 大量に発明して
○ 大量に「発明するぞ」というだけ言って
2013/09/26(木) 03:13:24.63
>>32
当選は枠があるけど出馬は出たきゃ出れるんじゃなかったっけ?
2013/09/26(木) 03:21:52.79
エクスポート名の@の右の数字は引数全体のサイズだよね?
2013/09/26(木) 03:33:33.17
で、__stdcallの引数全部のサイズが命令retの第一オペランドの値だよね?
そして、スタックフレームはebpとespの値の増減を調べないとわからないんだよね?
2013/09/26(木) 04:25:32.36
キャバクラでかわいいホステスと夜遊びしたいな
2013/09/26(木) 04:40:58.94
>>9は間違いね。__pascalなんてないし、64ビットに言及がないし、単純ジャンプ関数って何じゃそれ
2013/09/26(木) 04:42:37.87
以下、sage進行でよろしくお願いします。
2013/09/26(木) 04:43:48.36
片山死ねよ
2013/09/26(木) 04:50:14.13
>>35-36
Win32 べったりの話? 何にも知らないんだね。

DEF ファイルを使った DLL からのエクスポート
で検索してご覧、MSDN 内のページが引っかかるから。
悪いけど、主要な(少なくともターゲットとする)コンパイラやアセンブラやリンカのマニュアルを読んでから質問してくれる?
ていうかブログでやってくんない?
2013/09/26(木) 05:19:27.11
ブッブー、defファイルではなく__stdcall,__fastcall関数のmanglingの話でした。

manglingされたシンボル名から元の名前を求めるのは大変みたいですね。
2013/09/26(木) 12:44:34.10
片山にすら馬鹿にされる>>41w
2013/09/26(木) 15:58:38.68
>>43
まぁだがコンパイラ毎ではあるもののマングリングは明確な規則で行われてるわけで…
それを難しいとか言ってるようではC/C++コードへの復元とか夢のまた夢だわな。
呼び出し規約と関数内のレジスタ利用方法の規約ゴッチャにしてる辺りも残念すぎる。
45片山博文MZコスモ ◆T6xkBnTXz7B0
垢版 |
2013/09/26(木) 16:36:10.77
v0.0.1にバージョンアップしました。
関数の切り分けができるようになりました。

課題1:DisAsmメソッドの中で各関数の種類(FUNCTIONTYPE)を確定させる。
また、各関数の引数全部のサイズを求める。関数内関数の対処。
2013/09/26(木) 16:47:55.24
名前修飾(Name mangling) - Wikipedia
http://ja.wikipedia.org/wiki/%E5%90%8D%E5%89%8D%E4%BF%AE%E9%A3%BE

EXEからコンパイラの種類を判定する方法ってありますか?
2013/09/26(木) 17:01:43.67
全パターンぶんデマングルしてみてうまくデマングルできたやつを採用すればいいんじゃない
2013/09/26(木) 17:13:14.26
PEiDでも調べれば?
2013/09/26(木) 17:14:44.75
g++の場合は、プログラムc++filtで解読できるようです。
gccの場合はわからない。
VCの場合はdbghelp.dllのUnDecorateSymbolName関数で。

UnDecorateSymbolName function
http://msdn.microsoft.com/en-us/library/ms681400(v=VS.85).aspx
2013/09/26(木) 17:44:57.55
正直ね、片山さんのその技術力で
逆コンパイラじゃなくて
C#とD言語を上手く改良したような実用できる言語作ってほしい
逆コンパイラの都合のいい言語みたいな感じでもいいから。
そしたら実装も楽になるかもよ。
これ作るついでにやってみてくれないかな?
2013/09/26(木) 17:46:26.52
ネイティブC#みたいな位置づけのさ。
D言語だと正直不安定すぎて使えなさすぎなのよ
2013/09/26(木) 18:02:30.28
マングル返し
2013/09/26(木) 21:07:00.30
Microsoft C は、シリアル番号をオブジェクトファイルに
埋め込んでるってうわさ話があったな...
2013/09/26(木) 21:51:10.45
>>53
そんな速攻で検証できそうなことをわざわざするかなぁ……?
2013/09/27(金) 23:46:08.32
課題2:アドレスからスタック状態集合への写像
課題3:コンパイラの種類を判定するコード
課題4:アセンブリ命令が何を参照し、何を変更するかの情報
課題5:データ型の管理方法

これらに関して知ってることがあれば俺に教えて下さい。
2013/09/27(金) 23:57:00.28
次のリリースは、pimplで読みやすいコードになる予定。
今までの人工知能研究の全てを注ぎ込んで、頑張りますのでご声援を。
2013/10/01(火) 01:51:25.40
いや、そのレベルでいったいなにをつくるきなんだ…
58片山博文MZコスモ ◆T6xkBnTXz7B0
垢版 |
2013/10/01(火) 03:17:28.27
コントロールパスというのがよくわからん。単純にプロファイルするとループで無限長になってしまうよな。
掛け算と割り算のキャリーとオーバーフロー条件の違いもよくわからん。
2013/10/01(火) 11:32:44.36
前途は多難ですね
2013/10/01(火) 20:18:53.42
思った以上にレベル低過ぎてワロタw
2013/10/03(木) 03:08:46.39
ファンクタって関数ポインタより使いやすいな
62片山博文MZコスモ ◆T6xkBnTXz7B0
垢版 |
2013/10/07(月) 13:30:07.20
v0.0.2にバージョンアップ。

コードの整理。insn*.datファイル、mzc2mini.{h,cpp}ファイルの追加。
関数内関数の対処。
2013/10/07(月) 14:16:22.09
insnはinstructionの略でアセンブリの命令のこと。

次は、コントロールパスとスタック状態の取得に挑戦します。
2013/10/11(金) 19:27:45.10
サイドビジネスで疲れてMPがない
妙なバグがまだ取れてない
頑張るしかないか
65片山博文MZコスモ ◆T6xkBnTXz7B0
垢版 |
2013/10/13(日) 13:52:28.76
コントロールパスの組み合わせが無限になるバグが修正できない。
ループは排除したのに。
2013/10/13(日) 14:05:29.47
無限大じゃなかったけど、コントロールパスが768通りって多すぎないか?
2013/10/22(火) 12:20:36.64
スタックについて必死に勉強中です。
2013/10/22(火) 14:04:27.97
一進一退というか一進二退くらいになってるような
2013/10/23(水) 19:37:09.10
三値論理サイコー!!!
2013/10/24(木) 18:56:52.09
コントロールパスよりもCFGの方が重要だとわかった。目標が間違ってた。
71片山博文MZコスモ ◆T6xkBnTXz7B0
垢版 |
2013/10/26(土) 14:30:59.02
v0.0.4 CFGの取得が可能になりました。
72片山博文MZコスモ ◆T6xkBnTXz7B0
垢版 |
2013/10/26(土) 14:58:46.20
型情報がない状態で、レジスタとスタックの使用状況がわからないと、
関数の呼び出し規約や引数は分析できませんね。

insn16.dat/insn32.dat/insn64.datファイルに書かれているような
中間表現によって、アセンブリとC言語ソースをつなげようと
考えています。
2013/10/26(土) 15:41:05.76
定数畳み込み
http://ja.wikipedia.org/wiki/%E5%AE%9A%E6%95%B0%E7%95%B3%E3%81%BF%E8%BE%BC%E3%81%BF

疎な条件分岐を考慮した定数伝播
http://ja.wikipedia.org/wiki/%E7%96%8E%E3%81%AA%E6%9D%A1%E4%BB%B6%E5%88%86%E5%B2%90%E3%82%92%E8%80%83%E6%85%AE%E3%81%97%E3%81%9F%E5%AE%9A%E6%95%B0%E4%BC%9D%E6%92%AD

抽象解釈
http://ja.wikipedia.org/wiki/%E6%8A%BD%E8%B1%A1%E8%A7%A3%E9%87%88

大域値番号付け
http://ja.wikipedia.org/wiki/%E5%A4%A7%E5%9F%9F%E5%80%A4%E7%95%AA%E5%8F%B7%E4%BB%98%E3%81%91

共通部分式除去
http://ja.wikipedia.org/wiki/%E5%85%B1%E9%80%9A%E9%83%A8%E5%88%86%E5%BC%8F%E9%99%A4%E5%8E%BB

Partial redundancy elimination
http://en.wikipedia.org/wiki/Partial_redundancy_elimination

演算子強度低減
http://ja.wikipedia.org/wiki/%E6%BC%94%E7%AE%97%E5%AD%90%E5%BC%B7%E5%BA%A6%E4%BD%8E%E6%B8%9B

C言語の構文解析
http://www.syuhitu.org/other/cparse/cparse.html
2013/10/30(水) 20:24:40.83
逆コンパイラに興味ある人は少ないみたいだな
2013/10/30(水) 21:29:01.31
そりゃそうだ。リバースエンジニアリングってのはどちらかといえば破壊行為だし。
この板の連中はおまえの想像以上に生産的(破壊的の反対)なんだよ。
2013/10/30(水) 21:32:36.77
それ以前に「どうせ無理だろ……」と多勢が思っていることもあるだろうね
2013/10/30(水) 21:54:20.33
コンパイラが多すぎて全部はソースに変換できないって分ってからなぁ・・・
そしてコテ的に>>76
2013/10/30(水) 23:14:18.48
次は中間表現の生成をやります。
2013/10/31(木) 14:41:22.66
実用レベルに足るものは不可能とわかっているから
2013/10/31(木) 16:34:19.29
彼でも1〜2年で限定用途なら可能だろうし
5〜10年も頑張れば実用レベルのが出来るんじゃないかな?ただそれだけ頑張った見返りがあるか疑問だが。
2013/10/31(木) 22:56:48.52
MFCの劣化ライブラリも腐っているしな
2013/11/01(金) 02:38:40.90
>>80
何一つ完成させたことが無いのに?
2013/11/03(日) 11:21:11.34
>>74
興味ありますよ頑張ってください応援してます
84デフォルトの名無しさん
垢版 |
2013/11/05(火) 00:26:28.24
え、まずはコンパイラ作ってみたら?
2013/11/06(水) 05:20:59.14
しばらくスクリーンセーバーの開発に時間を割くことにします。GUIはwxを採用します。
2013/11/06(水) 09:52:43.11
MZC使えよバカ、作った人にも使われないなんてよっぽどだな(笑)
2013/11/07(木) 02:36:02.70
馬鹿がまた飽きたのかwww

こいつ本当に何一つ最後まで作れないなw
2013/11/07(木) 02:51:13.49
最後まで作らないうえに86とかどうしようもねぇな
2013/11/07(木) 03:16:18.11
仕事の合間にLinuxのスクリーンセーバーをWindowsに移植したら、海外から何件か要望が来た。
要望の多い方を優先する方針。すまない。何ならGitHubで開発に参加してくれると助かるのだが…。
2013/11/07(木) 05:56:33.83
まあ簡単な方から片付けていくのが効率的人生の鉄則ではある。
2013/11/07(木) 08:18:28.62
また偽装請負か・・・
2013/11/07(木) 09:58:06.11
解散
2013/11/09(土) 13:24:53.90
クッソワロス、やっぱり最初に言った通り途中で挫折したw

ちなみに、こいつが途中で他のを優先すると言って
また開発に戻った例は無いぞw
2013/11/13(水) 12:33:23.15
まだだ、まだ俺のスタック領域は溢れちゃいねェ
2013/11/17(日) 20:32:31.71
保守
2013/11/25(月) 22:33:11.84
catcher
2013/11/30(土) 01:37:10.38
>>50-51
Salamander
98片山博文MZコスモ ◆T6xkBnTXz7B0
垢版 |
2013/12/03(火) 11:45:36.02
スクリーンセーバーの移植が終わったので、CodeReverseの開発を再開します。
2013/12/05(木) 23:14:57.22
また仕事が入った
2013/12/13(金) 23:20:47.44
catcher
101デフォルトの名無しさん
垢版 |
2013/12/19(木) 04:29:33.68
Windows 系の .exe .dll を逆コンパイルするので分りやすいコードを吐いてくれるのは
今って何が高性能?
C#ぐらいの言語っぽいのだと分りやすいんだけど
2013/12/19(木) 18:50:48.68
機械語からの逆コンパイルは大抵ろくなコードが出てこない。
マトモなコードになるのは中間言語からの逆コンパイルくらいだな。
.NETやJavaやActionScriptやHSPの中間言語は結構普通の逆コンパイル結果が得られる。
103101
垢版 |
2013/12/21(土) 05:43:16.03
逆コンパイルで出てきたコードを書き換えてコンパイルしようという訳じゃないんだ。
機器のログを表示するソフトのデータ読み込みにバグがあるみたいで
自分で表示用データを出せるプログラム作ろうとしたら一部計算式が分らない
三角関数だろうけど
2013/12/21(土) 06:25:42.35
>>103
だから中間言語使った実行ファイルなら逆コンパイルも実用になるけど、
機械語使った実行ファイルの逆コンパイラはなかなか実用にならんよ。
たぶん逆アセンブラがなんだかんだ一番実用的だと思うぞ。

その.exeや.dllが中間言語使ってる実行ファイルかどうかは知らん。
.NETあたりだと逆コンパイルも楽だから.NETだといいね。
2013/12/21(土) 09:06:13.91
>>103
その機器のメーカーに直してもらえよ
106デフォルトの名無しさん
垢版 |
2013/12/21(土) 10:17:26.47
アセンブラは機械語と一対一に対応しているとよく言われるけど、
実際は対応していない。
同じアセンブリでも配置によって複数の機械語から特定のコードを選択
しなければならないプロセッサはよくありがち。
いろいろ面倒だよ。
2013/12/21(土) 13:06:51.16
>>103
ログ読み取りに不透明要素を持ちこむな 本末転倒にもほどがある
2013/12/31(火) 23:55:12.69
catcher
109デフォルトの名無しさん
垢版 |
2014/01/01(水) 03:35:02.64
>575 名前:片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/12/31(火) 22:44:07.54
>2013年の実績:
>クロスワードギバーを完成。
>XScreenSaverの200個以上のスクリーンセーバーをWindowsに移植。
>逆アセンブラを途中まで作成。

いつのまにか逆アセンブラにグレードダウン(笑)
なんというか、「〜をダウンロードした」とか「〜を勉強中」など
どうでもいいことは大声で宣伝するが、重要なことは何も言わないとか・・・
2014/01/02(木) 04:25:05.69
ネタギレです…しばらく保守になります。

この停滞状態が我慢できなければGitHubでPull requestしてね
2014/01/02(木) 18:37:25.91
都合が悪くなると名無しで発言するんだな、発言の内容からして本人であることは明白なんだが
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況