提供: Minecraft Modding Wiki
移動先: 案内検索

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 編集中の文章
1行目: 1行目:
 +
==mod の逆コンパイル Tips==
 
このページでは mod がどのようにして動作しているのかを知るため、Java ソースファイルに変換するための Tips を記述します。<br/>
 
このページでは mod がどのようにして動作しているのかを知るため、Java ソースファイルに変換するための Tips を記述します。<br/>
  
==利用可能なツール==
+
==もっとも簡単な方法==
;Java Decompiler
+
mcp で逆コンパイルを行う前に minecraft.jar に mod の class ファイルをいれておけば、一緒に逆コンパイルしてくれるそうです。<br/>
:http://jd.benow.ca/
+
この方法ですと難読化も解除してくれるので楽に読みやすいソースファイルが手に入ります。<br/>
:GUIとEclipseの両方で使えるデコンパイラ。
 
:動作が軽く、コードエクスプローラ機能もあるため使いやすい。
 
:難読化は解除できないものの、手軽にデコンパイルするには便利。
 
;BON(Bearded Octo Nemesis)
 
:https://github.com/immibis/bearded-octo-nemesis
 
:TubeStuffなどのMODの作者であるimmibis氏によって作られた難読解除器。
 
:難読化されているMOD(コンパイル済み)から難読化解除されたMOD(コンパイル済み)を作れる。
 
:これで難読化を解除してから上記のJava Decompilerを使うと、
 
:難読化解除されたソースが得られる。
 
;BON2
 
:https://github.com/tterrag1098/BON2/releases
 
:tterrag1098氏によるBONの改良版。
 
:上記のBONは2013年で更新が止まっているが、こちらは更新が続いている。
 
;MCPMappingViewer
 
:https://github.com/bspkrs/MCPMappingViewer
 
:難読化名、SRG名、難読化解除名、JavadocがGUIで一覧表示できる。
 
:クラッシュレポート解析などの細かいところで難読化解除したい場合はこちらを使うほうが簡便。
 
<div class="mw-collapsible mw-collapsed">
 
;mcp
 
:http://www.modcoderpack.com/website/releases
 
<div class="mw-collapsible-content">
 
:ご存知、Minecraft.jar のデコンパイラ。
 
:Minecraft.jar に mod を導入しておけば、mod ごとデコンパイルできる。
 
:この方法だと難読化も解除された状態でデコンパイル可能。
 
:ただし既存classの書き換えがある場合、どれを書き換えているのか事前に調べておかないと探すのが困難。
 
:そのままリコンパイルしても動かない事もある。特にリソースの再配置は必須。
 
</div>
 
:'''多くの場合上記のBearded Octo NemesisとJava Decompilerでデコンパイルできるため、MCPを使う理由はあまりない。'''
 
</div>
 
  
<div class="mw-collapsible mw-collapsed">
 
 
==手作業で逆コンパイルをする場合==
 
==手作業で逆コンパイルをする場合==
易読化ツールであるBearded Octo Nemesisなどが存在するため、この方法にメリットはない。
+
mcp での作業後に新たに mod を逆コンパイルする場合、手作業で難読化を解除することになります。<br/>
<div class="mw-collapsible-content">
+
量が多いとかなり大変なので、大型の mod の場合は mcp で再度逆コンパイルすることをおすすめします。<br/>
mcp 以外で逆コンパイルする場合、手作業で難読化を解除することになります。<br/>
 
量が多いとかなり大変なので、大型の mod の場合は mcp で逆コンパイルすることをおすすめします。<br/>
 
 
ここでは小型・単機能の mod を手作業で難読化解除する方法について記述します。<br/>
 
ここでは小型・単機能の mod を手作業で難読化解除する方法について記述します。<br/>
  
;Java Decompiler等で class ファイルをソースファイルに変換する。
+
;jad で class ファイルをソースファイルに変換する。
 
:eclipse で強制的に class ファイルを読ませても逆コンパイルできたような…。
 
:eclipse で強制的に class ファイルを読ませても逆コンパイルできたような…。
;mcp/conf の中にある client.srg を開く。
+
;mcp/conf の中にある client.srg を開きます。今回は mcp62(本体ver1.2.5用)を使います。
:今回は mcp62(本体ver1.2.5用)を使います。
 
 
:mcp は mod の対応バージョンをよく確認して選んでください。
 
:mcp は mod の対応バージョンをよく確認して選んでください。
 
:本体ver1.2.5用の mod なのに、mcp72(ver1.3.2用)を使ったりすると悲惨なことになります。
 
:本体ver1.2.5用の mod なのに、mcp72(ver1.3.2用)を使ったりすると悲惨なことになります。
51行目: 19行目:
 
:この中にクラス、フィールド、メソッドが記述されています。
 
:この中にクラス、フィールド、メソッドが記述されています。
 
:行の先頭が CL ならクラス、FD がフィールド、MD がメソッドになります。
 
:行の先頭が CL ならクラス、FD がフィールド、MD がメソッドになります。
;ソースを開き、クラスと思われる部分を置き換える。
+
;ソースを開き、クラスと思われる部分を置換していきます。
 
:例)aan itemstack = ~~;
 
:例)aan itemstack = ~~;
 
:aan がクラス名になりますので client.srg から検索します("CL: aan" とかね)。
 
:aan がクラス名になりますので client.srg から検索します("CL: aan" とかね)。
57行目: 25行目:
 
:例)if (entity instanceof fq)
 
:例)if (entity instanceof fq)
 
:正規表現「^CL: fq 」で検索します。EntityItem ですね。
 
:正規表現「^CL: fq 」で検索します。EntityItem ですね。
;フィールドを置き換える。
+
;クラス名を解除できたら、次はフィールドです。
 
:例)if(!entity.G)
 
:例)if(!entity.G)
 
:entity は Entity クラスのインスタンスです。
 
:entity は Entity クラスのインスタンスです。
66行目: 34行目:
 
:「field_646_aA」を検索すれば、フィールド名が見つかります。「isDead」です。
 
:「field_646_aA」を検索すれば、フィールド名が見つかります。「isDead」です。
 
:結果)if(!entity.isDead)
 
:結果)if(!entity.isDead)
;メソッド名を置き換える。
+
;同じようにして、メソッド名も methods.csv から探します。
:メソッド名は mcp/conf/methods.csv から探します。
 
 
:メソッド名は場合によって、同一メソッド名が複数存在します。引数が異なることでオーバーロードできるためです。
 
:メソッド名は場合によって、同一メソッド名が複数存在します。引数が異なることでオーバーロードできるためです。
 
:その場合は引数や戻り値の型からどのメソッドかを調べてください。
 
:その場合は引数や戻り値の型からどのメソッドかを調べてください。
96行目: 63行目:
  
 
まれに複数の候補が存在します。そのクラスのソースを見て、どれが正しいか判断しましょう。<br/>
 
まれに複数の候補が存在します。そのクラスのソースを見て、どれが正しいか判断しましょう。<br/>
</div></div>
 

Minecraft Modding Wikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMinecraft Modding Wiki:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)