はじめに
Modを改造したい、そう思ったときにソースコードが公開されていないことはよくあります。
Modをパクリたいとき、改造したいとき、パッチを作りたいとき色々ありますが、
常に難読化の壁に阻まれることになります。
Forgeの難読化を解除する方法はありますが、Fabricの難読化を解除する方法についての情報がなかったので記事を書きます。
0. 2022/11/15追記: もっと簡単な方法がありました
ぶっちゃけGradleで一行書くだけでできました。
以下の手順で難読化解除可能です。
- IDEAのMinecraft Developmentを使ってFabricプロジェクトを作成する。
プロジェクトのFabricバージョンは、難読化解除したいModのFabricバージョンと合わせるとよい。 - プロジェクト直下に
libs
フォルダを作成して難読化解除したいModを入れる。 -
build.gradle
に以下の記述を追加する。build.gradledependencies { // ~(略)~ // Fabric API. This is technically optional, but you probably want it anyway. modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" // ↓ 以下を記述するだけ modImplementation(fileTree("libs/難読化解除したいMod.jar")) }
- IDEA内の
Reload All Gradle Projects
を押して読み込めば、Modが難読化解除された状態でExternal Libraries
に追加されます。
この方法ができたら以下の記事は読まなくて大丈夫です。
1. 前提知識
2. Modを準備する
デコンパイルするFabricで製作されたModを用意します。
今回は例として OAuth-Fabric を使用します。
(GitHubにソースコードが配布されているためデコンパイルする必要ないですが説明のため使用します)
今回はC:\example\oauth-fabric-1.0.jar
に配置しました。
3. tiny-remapperを準備する
tiny-remapperはFabric Loom(FabricのMod環境を構築するツール)に使われている難読化解除ツールです。
Fabricのmavenリポジトリよりダウンロードできます。
-fat
とついているjarファイルをダウンロードしてください。(必要なライブラリがすべて含まれています)
今回はtiny-remapper-0.6.0-fat.jarをダウンロードしました。
今回はC:\example\tiny-remapper-0.6.0-fat.jar
に配置しました。
4. 難読化マッピング名を確認する
使用しているFabric Mod開発環境のマッピングを確認します。
build.gradleの中にマッピングが書かれている場所があります。
今回は1.17.1+build.61
であることが分かりました。
dependencies {
// To change the versions see the gradle.properties file
minecraft "com.mojang:minecraft:${project.minecraft_version}"
mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" // ← ここがマッピング名です。gradle.propertiesを参照しているようです。
// ~(略)~
}
minecraft_version=1.17.1
yarn_mappings=1.17.1+build.61
# ↑ ありました。これがマッピング名です。
5. 難読化マッピングを準備する
Gradleのキャッシュディレクトリにtinyファイルがあります。
今回の1.17.1+build.61
用のtinyファイルは以下の場所にありました。
C:\Users\<名前>\.gradle\caches\fabric-loom\1.17.1\net.fabricmc.yarn.1_17_1.1.17.1+build.61-v2
今回はC:\example\mappings.tiny
に配置しました。
6. Fabric用のマインクラフトのjarを入手する
これがなくても一部の場所は書き換わってくれるのですが、オーバーライドした関数名など一部がそのままになってしまいます。
クラスパスを適切に指定してあげることでオーバーライドした関数名なども適切に難読化解除することができます。
Gradleのキャッシュディレクトリにminecraft-intermediary.jar
ファイルがあります。
今回の1.17.1+build.61
用のminecraft-intermediary.jar
ファイルは以下の場所にありました。
C:\Users\<名前>\.gradle\caches\fabric-loom\1.17.1\net.fabricmc.yarn.1_17_1.1.17.1+build.61-v2
今回はC:\example\minecraft-intermediary.jar
に配置しました。
2022/11/15 追記:
1.19.2+build.28
では以下のファイルを使ったところうまくできました。
C:\Users\<名前>\.gradle\caches\fabric-loom\1.19.2\minecraft-merged-intermediary.jar
7. 難読化解除する
必要なファイルが整いました。
必要なファイルは以下の3つです。
C:\example>tree C:\example /f
C:\EXAMPLE
mappings.tiny ← 手順5で用意したマッピングファイル
minecraft-intermediary.jar ← 手順6で用意したマインクラフトのファイル
oauth-fabric-1.0.jar ← 手順2で用意したModファイル
tiny-remapper-0.6.0-fat.jar ← 手順3で用意したtiny-remapper
ファイルがあるディレクトリでコマンドプロンプトを開き以下のコマンドを打ちます。
C:\example>java -jar tiny-remapper-0.6.0-fat.jar oauth-fabric-1.0.jar oauth-fabric-1.0.dev.jar mappings.tiny intermediary named minecraft-intermediary.jar
Finished after 645.38 ms.
難読化解除されたjarファイル oauth-fabric-1.0.dev.jar
が生成されます。
これをIntellij IDEAや、JD-GUIで開くことでソースコードを読むことができるようになります。
お疲れさまでした。
補足: tiny-remapperのコマンドについて
先程のコマンドは
java -jar tiny-remapper-0.6.0-fat.jar oauth-fabric-1.0.jar oauth-fabric-1.0.dev.jar mappings.tiny intermediary named
java -jar tiny-remapper-0.6.0-fat.jar <入力ファイル名.jar> <出力ファイル名.jar> <マッピングファイル.tiny> <変換前マッピングタイプ> <変換後マッピングタイプ> [クラスパス]...
java -jar tiny-remapper-0.6.0-fat.jar でヘルプが見れます。追加オプションがいくつかあります。
変換マッピングタイプはintermediary
(難読化状態)とnamed
(解除状態)があります。