7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-10-09

はじめに

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

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

0. 2022/11/15追記: もっと簡単な方法がありました

ぶっちゃけGradleで一行書くだけでできました。
以下の手順で難読化解除可能です。

  1. IDEAのMinecraft Developmentを使ってFabricプロジェクトを作成する。
    プロジェクトのFabricバージョンは、難読化解除したいModのFabricバージョンと合わせるとよい。
  2. プロジェクト直下にlibsフォルダを作成して難読化解除したいModを入れる。
  3. build.gradleに以下の記述を追加する。
    build.gradle
    dependencies {
        // ~(略)~
        // 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"))
    }
    
  4. 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-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に配置しました。

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

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?