TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
TypeScript(MS) VS Swift(Apple)
簡単なプログラム言語って何?
SQLなら俺に訊け
35歳、発達障害のB型作業所通いですが 6
C++相談室 part146
シェルスクリプト総合 その33
DarkGDK Part.4
【消しゴム】MONOを使ってみるスレ4【じゃない】
Visual Studio IDE環境
2ちゃんねる互換P2P匿名掲示板の実装を考える 1

逆コンパイラCodeReverseを作る


1 :2013/09/24 〜 最終レス :2016/10/01
CodeReverseは、片山博文MZが開発している、Windows用の逆アセンブラ兼ダンプツールです。
最終的には「リバーシブルな」逆コンパイラを目指しています。
CodeReverse公式サイト
http://katahiromz.web.fc2.com/codereverse/
GitHubレポジトリはこちら
https://github.com/katahiromz/CodeReverse

2 :
【実行可能ファイル(PE形式)関連】
The Portable Executable File Format
http://www.csn.ul.ie/~caolan/publink/winresdump/winresdump/doc/pefile2.html
Windows EXEファイル形式
http://home.a00.itscom.net/hatada/mcc/doc/win32exe.html
インポート情報
http://hp.vector.co.jp/authors/VA050396/tech_07.html
A Tour of the Win32 Portable Executable File Format
http://msdn.microsoft.com/en-us/library/ms809762.aspx
【アセンブラ関連】
X86アセンブラ (WikiBooks)
http://ja.wikibooks.org/wiki/X86%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%A9/16%E3%80%8132%E3%80%8164%E3%83%93%E3%83%83%E3%83%88
x64 アセンブリ言語プログラミング
http://homepage1.nifty.com/herumi/prog/x64.html
x64 アセンブリーの概要
http://www.isus.jp/article/introduction-to-x64-assembly/
x64 の入門書
http://msdn.microsoft.com/ja-jp/magazine/ee230241.aspx
インテル日本語技術資料のダウンロード
http://www.intel.co.jp/content/www/jp/ja/developer/download.html

3 :
【遅延読み込み関連】
DLLの遅延読み込み(delay loading)
http://www.glamenv-septzen.net/view/671
UNDER THE HOOD (delayload)
http://www.microsoft.com/msj/1298/hood/hood1298.aspx
DLL遅延ロード情報をPythonで
http://www.glamenv-septzen.net/view/677
【スタックフレームなど】
スタックフレーム
http://www.c-tipsref.com/words/stackframe.html
Unprototyped Functions
http://msdn.microsoft.com/en-us/library/6yy8aw4d.aspx
Varargs
http://msdn.microsoft.com/en-us/library/dd2wa36c.aspx
呼出規約
http://ja.wikipedia.org/wiki/%E5%91%BC%E5%87%BA%E8%A6%8F%E7%B4%84
Caller/Callee Saved Registers
http://msdn.microsoft.com/en-us/library/6t169e9c.aspx
Return Values (C++)
http://msdn.microsoft.com/en-us/library/7572ztz4.aspx
Prolog and Epilog
http://msdn.microsoft.com/en-us/library/tawsa7cb.aspx
Parameter Passing
http://msdn.microsoft.com/en-us/library/zthk2dkh.aspx
Overview of x64 Calling Conventions
http://msdn.microsoft.com/en-us/library/ms235286.aspx

4 :
【逆アセンブル・逆コンパイル技術に関して】
Cの逆コンパイラはどこまで実現可能か
http://www5d.biglobe.ne.jp/~noocyte/Programming/Decompile.html
逆コンパイラ - Wikipedia
http://ja.wikipedia.org/wiki/%E9%80%86%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9
逆アセンブラ - Wikipedia
http://ja.wikipedia.org/wiki/%E9%80%86%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%A9
エイリアス解析 - Wikipedia
http://ja.wikipedia.org/wiki/%E3%82%A8%E3%82%A4%E3%83%AA%E3%82%A2%E3%82%B9%E8%A7%A3%E6%9E%90
エスケープ解析 - Wikipedia
http://ja.wikipedia.org/wiki/%E3%82%A8%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%97%E8%A7%A3%E6%9E%90
コールグラフ - Wikipedia
http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%BC%E3%83%AB%E3%82%B0%E3%83%A9%E3%83%95
シェープ解析 - Wikipedia
http://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%A7%E3%83%BC%E3%83%97%E8%A7%A3%E6%9E%90
データフロー解析 - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%95%E3%83%AD%E3%83%BC%E8%A7%A3%E6%9E%90
ポインタ解析 - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E8%A7%A3%E6%9E%90
制御フローグラフ - Wikipedia
http://ja.wikipedia.org/wiki/%E5%88%B6%E5%BE%A1%E3%83%95%E3%83%AD%E3%83%BC%E3%82%B0%E3%83%A9%E3%83%95
制御構造 - Wikipedia
http://ja.wikipedia.org/wiki/%E5%88%B6%E5%BE%A1%E6%A7%8B%E9%80%A0
静的単一代入 - Wikipedia
http://ja.wikipedia.org/wiki/%E9%9D%99%E7%9A%84%E5%8D%98%E4%B8%80%E4%BB%A3%E5%85%A5

5 :
パッと思いつくのは
・アドレスにラベルを割り付ける
・関数を切り分ける
・スタックフレームから関数引数・ローカル変数・戻り値を切り出す
・if/for/switchを抽出して構文化する
・DLLからロードされるシンボルを置き換える
解説しているサイトとかあるかは調べてないので知らん
どうせ defineされた定数をマクロ名に戻せないとか
構造体復元が難しいとかあるから大したことはできん

6 :
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
                  京都大学霊長類研究所

7 :
ネタスレはマ板でやれよ。
> Cの逆コンパイラはどこまで実現可能か
アフィサイト晒してんじゃねーよ。 内容もちょい微妙だし。
まず、アセンブリから C/C++ へのトランスレータは簡単だろ?
そっからどの程度 C/C++ らしい表現にするかが問題なんだろ?
何から手を付けてどういう順番でやるつもりなの。

8 :
まずは関数の切り分け(手元では入り口を解析する形でほぼ完了)。次は関数情報とスタックフレームの解析。
そして中間表現の定義と中間表現への変換。さらに構文解析と型情報の処理。
トランスレータって言ってもそんなに簡単じゃない。
リソースのダンプでいいのないか(オープンなの)?

9 :
関数には__cdecl、__stdcall、__pascal、__fastcall、単純ジャンプ関数の五種類あるんだけど、これをどうやって判別するかという問題がある。
遅延ロード情報の取り込みもしたい。ソース希望。

10 :
OllyDbgじゃダメなんか
分かってる人には充分だろ

11 :
ネタスレではありません。私は本気です。明日、OllyDbgのソースをDLしてみます。
CodeReverseは、NASMのコードを一部拝借しています。
多分、構文解析用のインクルードファイルが必要になると思います。
MinGWから頂くかも知れません。ライセンスはどうするか? アイコンのデザイン、洒落てるでしょ?

12 :
できたらよんで。

13 :
>>11
> MinGWから頂くかも知れません。ライセンスはどうするか? アイコンのデザイン、洒落てるでしょ?
MinGWのソース使ったら、配布するときのライセンスはGPLになると思う。
一部パブリックドメインらしいけれど。

14 :
アムロの親父みたいに俺の親父もボケてしまった。
たしかに昔はある分野で日本一の技能をもってた。俺の目標は親父だった。
今は硬い世界の殻に閉じこもってしまって、もはや日常会話しか通じない。

15 :
うーむ、今のところこの世にまともなC/C++の逆コンパイラが
存在しない事を考えても片山程度の技術力で作れるとは思えんが・・・

16 :
ま、なんかできたらまた呼んでくれ

17 :
ヘッダファイルもプリプロセッサも要るから、単純にMinGWに寄生する形にします。
バージョンアップの度にいちいちでっかいファイルをダウンロードさせるのも不憫だから。
ライセンスはGPLになる予定です。

18 :
つーか、片山GUIはどうした?予想通り挫折したのか?
そんなんじゃ逆コンパイラなんてもっと無理だろ

19 :
自動車の命はエンジンでしょ。GUIは後で自由に作れるから。

20 :
自動車の命は乗り心地だと思う

21 :
>>19
そういう問題じゃねーだろw
お前にはモノを最後まで作り上げる能力が無いって事だ
あれだけWin32APIやMFCに代わるGUIを作るって豪語してたろ
多分お前はこの逆コンパイラも作れないし、後になってもGUIも作れんよ

22 :
まあ一人で色々作ってたら未完成になることは多い。
そういう未完星人の同類なら、GUI作りくらい協力してやってもいい。
だが残念だがそれは無理だ。なぜなら彼が作っている物は俺よりしょぼい。
もはや彼が俺に「あなたのプロジェクトに協力させて下さい」と頼まなければいけないレベルなのだ。
残念である。世の中は不条理に満ちている。

23 :
まあ誰もが出来ないと思ってるよ
グラフィックライブラリもこれを最後に音沙汰なしだしな
975 名前:片山博文MZパンク ◆0lBZNi.Q7evd [sage] 投稿日:2013/03/21(木) 03:21:59.90
MZC2順調に開発中。。。

24 :
順調に開発中クソワロタwww
どこが順調なんだよwww

25 :
CUIの有り難みがわからない人とは話しが合わないっす。
CUIにパイプラインをつなげてGUIを作るなんてお茶の子さいさいっす。
俺はサイドビジネスで忙しいから、空いた時間で作ってるっす。
CUIの使い方も知らない人はうざいから消えてね。

26 :
出来ない人間の言い訳きたwww

27 :
ふーむ、CUIのありがたみがわかってる人間がなんでわざわざ
二番煎じのGUIを作ろうと思ったのか。しかもオリジナルより劣化してる。
更には、お茶の子さいさいと言いながら、いまだに何の成果物も出せないのはこれいかに。
>>23のレスからもう半年も経過しているが。

28 :
俺は貴様らよりも自由じゃないから。夜遊びはできないし、インターネットに
つなげてもらえないし。パソコンの使用時間は制限されてるし。
この書き込みも見張りに見つからないように携帯から書き込んでいるところ。

29 :
典型的な口だけダメ人間の末路だなw

30 :
こりゃアカンで。ちょっと期待してたらどうやら>>1の人格・人間性に
相当の問題アリやな。

31 :
クロスワードギバーというパズル作成ソフトで結構反響あった。MZ KeyLoggerもわりと人気あるし。

32 :
そうそう幅広くニッチなところ狙ってけ。おまえはわけのわからんものを大量に発明して東京都知事選に変態枠で出馬するようなタイプなんだ。

33 :
× 大量に発明して
○ 大量に「発明するぞ」というだけ言って

34 :
>>32
当選は枠があるけど出馬は出たきゃ出れるんじゃなかったっけ?

35 :
エクスポート名の@の右の数字は引数全体のサイズだよね?

36 :
で、__stdcallの引数全部のサイズが命令retの第一オペランドの値だよね?
そして、スタックフレームはebpとespの値の増減を調べないとわからないんだよね?

37 :
キャバクラでかわいいホステスと夜遊びしたいな

38 :
>>9は間違いね。__pascalなんてないし、64ビットに言及がないし、単純ジャンプ関数って何じゃそれ

39 :
以下、sage進行でよろしくお願いします。

40 :
片山Rよ

41 :
>>35-36
Win32 べったりの話? 何にも知らないんだね。
DEF ファイルを使った DLL からのエクスポート
で検索してご覧、MSDN 内のページが引っかかるから。
悪いけど、主要な(少なくともターゲットとする)コンパイラやアセンブラやリンカのマニュアルを読んでから質問してくれる?
ていうかブログでやってくんない?

42 :
ブッブー、defファイルではなく__stdcall,__fastcall関数のmanglingの話でした。
manglingされたシンボル名から元の名前を求めるのは大変みたいですね。

43 :
片山にすら馬鹿にされる>>41w

44 :
>>43
まぁだがコンパイラ毎ではあるもののマングリングは明確な規則で行われてるわけで…
それを難しいとか言ってるようではC/C++コードへの復元とか夢のまた夢だわな。
呼び出し規約と関数内のレジスタ利用方法の規約ゴッチャにしてる辺りも残念すぎる。

45 :
v0.0.1にバージョンアップしました。
関数の切り分けができるようになりました。
課題1:DisAsmメソッドの中で各関数の種類(FUNCTIONTYPE)を確定させる。
また、各関数の引数全部のサイズを求める。関数内関数の対処。

46 :
名前修飾(Name mangling) - Wikipedia
http://ja.wikipedia.org/wiki/%E5%90%8D%E5%89%8D%E4%BF%AE%E9%A3%BE
EXEからコンパイラの種類を判定する方法ってありますか?

47 :
全パターンぶんデマングルしてみてうまくデマングルできたやつを採用すればいいんじゃない

48 :
PEiDでも調べれば?

49 :
g++の場合は、プログラムc++filtで解読できるようです。
gccの場合はわからない。
VCの場合はdbghelp.dllのUnDecorateSymbolName関数で。
UnDecorateSymbolName function
http://msdn.microsoft.com/en-us/library/ms681400(v=VS.85).aspx

50 :
正直ね、片山さんのその技術力で
逆コンパイラじゃなくて
C#とD言語を上手く改良したような実用できる言語作ってほしい
逆コンパイラの都合のいい言語みたいな感じでもいいから。
そしたら実装も楽になるかもよ。
これ作るついでにやってみてくれないかな?

51 :
ネイティブC#みたいな位置づけのさ。
D言語だと正直不安定すぎて使えなさすぎなのよ

52 :
マングル返し

53 :
Microsoft C は、シリアル番号をオブジェクトファイルに
埋め込んでるってうわさ話があったな...

54 :
>>53
そんな速攻で検証できそうなことをわざわざするかなぁ……?

55 :
課題2:アドレスからスタック状態集合への写像
課題3:コンパイラの種類を判定するコード
課題4:アセンブリ命令が何を参照し、何を変更するかの情報
課題5:データ型の管理方法
これらに関して知ってることがあれば俺に教えて下さい。

56 :
次のリリースは、pimplで読みやすいコードになる予定。
今までの人工知能研究の全てを注ぎ込んで、頑張りますのでご声援を。

57 :
いや、そのレベルでいったいなにをつくるきなんだ…

58 :
コントロールパスというのがよくわからん。単純にプロファイルするとループで無限長になってしまうよな。
掛け算と割り算のキャリーとオーバーフロー条件の違いもよくわからん。

59 :
前途は多難ですね

60 :
思った以上にレベル低過ぎてワロタw

61 :
ファンクタって関数ポインタより使いやすいな

62 :
v0.0.2にバージョンアップ。
コードの整理。insn*.datファイル、mzc2mini.{h,cpp}ファイルの追加。
関数内関数の対処。

63 :
insnはinstructionの略でアセンブリの命令のこと。
次は、コントロールパスとスタック状態の取得に挑戦します。

64 :
サイドビジネスで疲れてMPがない
妙なバグがまだ取れてない
頑張るしかないか

65 :
コントロールパスの組み合わせが無限になるバグが修正できない。
ループは排除したのに。

66 :
無限大じゃなかったけど、コントロールパスが768通りって多すぎないか?

67 :
スタックについて必死に勉強中です。

68 :
一進一退というか一進二退くらいになってるような

69 :
三値論理サイコー!!!

70 :
コントロールパスよりもCFGの方が重要だとわかった。目標が間違ってた。

71 :
v0.0.4 CFGの取得が可能になりました。

72 :
型情報がない状態で、レジスタとスタックの使用状況がわからないと、
関数の呼び出し規約や引数は分析できませんね。
insn16.dat/insn32.dat/insn64.datファイルに書かれているような
中間表現によって、アセンブリとC言語ソースをつなげようと
考えています。

73 :
定数畳み込み
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

74 :
逆コンパイラに興味ある人は少ないみたいだな

75 :
そりゃそうだ。リバースエンジニアリングってのはどちらかといえば破壊行為だし。
この板の連中はおまえの想像以上に生産的(破壊的の反対)なんだよ。

76 :
それ以前に「どうせ無理だろ……」と多勢が思っていることもあるだろうね

77 :
コンパイラが多すぎて全部はソースに変換できないって分ってからなぁ・・・
そしてコテ的に>>76

78 :
次は中間表現の生成をやります。

79 :
実用レベルに足るものは不可能とわかっているから

80 :
彼でも1〜2年で限定用途なら可能だろうし
5〜10年も頑張れば実用レベルのが出来るんじゃないかな?ただそれだけ頑張った見返りがあるか疑問だが。

81 :
MFCの劣化ライブラリも腐っているしな

82 :
>>80
何一つ完成させたことが無いのに?

83 :
>>74
興味ありますよ頑張ってください応援してます

84 :
え、まずはコンパイラ作ってみたら?

85 :
しばらくスクリーンセーバーの開発に時間を割くことにします。GUIはwxを採用します。

86 :
MZC使えよバカ、作った人にも使われないなんてよっぽどだな(笑)

87 :
馬鹿がまた飽きたのかwww
こいつ本当に何一つ最後まで作れないなw

88 :
最後まで作らないうえに86とかどうしようもねぇな

89 :
仕事の合間にLinuxのスクリーンセーバーをWindowsに移植したら、海外から何件か要望が来た。
要望の多い方を優先する方針。すまない。何ならGitHubで開発に参加してくれると助かるのだが…。

90 :
まあ簡単な方から片付けていくのが効率的人生の鉄則ではある。

91 :
また偽装請負か・・・

92 :
解散

93 :
クッソワロス、やっぱり最初に言った通り途中で挫折したw
ちなみに、こいつが途中で他のを優先すると言って
また開発に戻った例は無いぞw

94 :
まだだ、まだ俺のスタック領域は溢れちゃいねェ

95 :
保守

96 :
catcher

97 :
>>50-51
Salamander

98 :
スクリーンセーバーの移植が終わったので、CodeReverseの開発を再開します。

99 :
また仕事が入った

100 :
catcher


100〜のスレッドの続きを読む
Regular Expression(正規表現) Part14
C言語なら俺に聞け 151
くだすれPython(超初心者用) その37
自然言語処理スレッド その5
Pythonのお勉強 Part57
【.NET】WCF〜Windows通信基盤技術【通信】
サウンドプログラミング5
【C++】マイナーGUIツールキット
【信者】C++の問題点【アンチ】
Jenkins
--------------------
【ストック】PIXTA Part.19【フォト】
▼▼▼産経新聞社リストラ情報交換スレ▼▼▼10
関西生コン逮捕と北朝鮮と辻元2
【ホモ】銀魂なんでもあり雑談130【ノマ百合】
ジャンバリ Part.5
世界の甲冑武器術・柔術
自転車板強制ワッチョイ及び県名表示導入投票スレ
【乞食豚が発狂生配信!】ブチかましアンチスレPart63【火病芸人】
【おっせ〜】堂免沙弥 Part2【アチャーム】
【かるかん】鹿児島&宮崎の奥様 29【チーズ饅頭】
続続・朝霞駐屯地 Part.2
【腕がない】おいチラ見するな!【脚がない】2本
××××長谷川櫂××××
【Lidnm】げんじのスレPart35【○○こヘアー】
テイケイワークス&トレード Part85
公認心理師受験者の集い その4
足立区と葛飾区 どの街がういぃ?
【COMSA】コムサ総合パート13【CMS】
アラフォーの女の子はモテモテ
【三角形】指揮法総合スレ【四角形】
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼