Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What are the problem?

posted at

updated at

Organization

Fabricのソースコード非公開Modの難読化を解除する方法

はじめに

Modを改造したい、そう思ったときにソースコードが公開されていないことはよくあります。
Modをパクリたいとき、改造したいとき、パッチを作りたいとき色々ありますが、
常に難読化の壁に阻まれることになります。

Forgeの難読化を解除する方法はありますが、Fabricの難読化を解除する方法についての情報がなかったので記事を書きます。

1. 前提知識

2. Modを準備する

デコンパイルするFabricで製作されたModを用意します。

今回は例として OAuth-Fabric を使用します。
(GitHubにソースコードが配布されているためデコンパイルする必要ないですが説明のため使用します)

今回はC:\example\oauth-fabric-1.0.jarに配置しました。

3. tiny-remapperを準備する

tiny-remapperFabric 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であることが分かりました。

build.gradle
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を参照しているようです。
    // ~~~
}
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に配置しました。

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(解除状態)があります。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?