アンドロイドゲームに ModMenu を追加する

Uncategorized
1.1k words

今回使うAPKファイルは Unity で自作したものです。一般にリリースされてるスマホゲームでも可能ですが、全て自己責任でお願いいたします。

環境

  • Windows 11 Home 22H2
  • Java v17.0.8
  • APK Easy Tool v1.60
  • Apktool v2.8.1
  • Mod Menu Template v3.2
  • Android Studio Giraffe | 2022.3.1 Patch 1

今回は Dドライブの直下に work フォルダーを作成して、そのフォルダーの中で全て作業します。

必要なもの

APK Easy Tool

https://forum.xda-developers.com/t/discontinued-windows-apk-easy-tool-v1-60-2022-06-23.3333960/

少しスクロールして Download links の Box からダウンロードすることができます。

APK Easy Tool v1.60 Portable.zip を右クリックするとダウンロードボタン表示されるので、work フォルダーにダウンロードします。

ダウンロードできたら展開しておきます。

Apktool

https://apktool.org/

右上の Download から apktool_2.8.1.jar を work フォルダーにダウンロードします。

Mod Menu Template

https://github.com/LGLTeam/Android-Mod-Menu/releases

Android-Mod-Menu-3.2.zip をダウンロードして展開しておきます。

APK Easy Tool を使ってメインアクティビティを探す

メインアクティビティが何なのか必要なため、事前に特定しておきます。

展開しておいた APK Easy Tool v1.60 Portable フォルダー内の apkeasytool.exe を実行します。

PC保護が表示される場合は、プロパティの セキュリティ: 許可する にチェックすると以後表示されなくなります。

Browse をクリックしてAPKファイルを選択すると、Launch activity にメインアクティビティが表示されるので、メモしておきます。

今回のゲームは com.unity3d.player.UnityPlayerActivity でした。

APKファイルを逆コンパイルする

Apktool を使って APKファイル を展開します。

次のコマンドをターミナルにコピペすると、展開することができます。

1
apktool_2.8.1.jar d unity-example.apk

ログ等は出ませんが、APKファイルと同じフォルダーが作られ、その中にデコードされたファイルが入っています。

ModMenu を追加する

UnityPlayerActivity.smali ファイルを修正して ModMenu を追加します。

D:\work\unity-example\smali フォルダーを起点にして、メインアクティビティ smali を開きます。

今回のメインアクティビティは com.unity3d.player.UnityPlayerActivity でしたので、D:\work\unity-example\smali\com\unity3d\player\UnityPlayerActivity.smali を開いて修正していきます。

OnCreate メソッドを検索して、次のコードをコピペします。

1
invoke-static {p0}, Lcom/android/support/Main;->Start(Landroid/content/Context;)V

貼り付け位置は OnCreate メソッド内の invoke-super より前に貼り付けます。

オーバーレイを許可する

AndroidManifest.xml を開き、SYSTEM_ALERT_WINDOW が無い場合、追加します。

1
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

アプリケーションの終了タグの上にサービスを追加します。

1
<service android:name="com.android.support.Launcher" android:enabled="true" android:exported="false" android:stopWithTask="true" />

チート機能を作成する

展開した Android-Mod-Menu-3.2 を Android Studio で開いてチート機能を追加します。

今回は特に触らずビルドします。

Build -> Build Bundle(s)/APK(s) -> Build APK(s) からビルドしてAPKファイルを作成します。

D:\work\Android-Mod-Menu-3.2\app\build\intermediates\apk\debugapp-debug.apk が作成されます。

出来上がった app-debug.apkD:\work\ に移動させて逆コンパイルします。

1
apktool_2.8.1.jar d app-debug.apk

逆コンパイルされた app-debug フォルダー内の smaliD:\work\unity-example\smali にコピーします。

app-debug フォルダー内の ライブラリファイル (.so) を D:\work\unity-example\lib にコピーします。

今回は armeabi-v7a アーキテクチャしか無いので、それだけコピーしました。

APKファイルに戻す

次のコマンドを使って、修正したファイルを再度 APKファイルに戻します。

1
apktool_2.8.1.jar b unity-example -o unity-example_moded.apk

APKファイルに署名する

apksigner ツールを使用して APK に署名します。

1
apksigner sign --ks "C:\Users\*****\.android\debug.keystore" -v --v2-signing-enabled true --ks-key-alias androiddebugkey unity-example_moded.apk
  • apksigner は Android Studio に含まれています。 私の場合は C:\Users\*****\AppData\Local\Android\Sdk\build-tools\34.0.0\apksigner.bat にありました。
  • debug.keystore のパスワードは android です。

動かしてみる

エミュレーターや実機にインストールして動かしてみます。

インストールが出来たらアプリ情報を開いて 他のアプリの上に重ねて描画 を有効にします。

ゲームを起動して左側に ModMenu のアイコンが表示されます。

ModMenu のアイコンをタップして開くと、チートのオンオフが選択できます。今回は作ってないので何も機能しません。

動かない場合は?

  • アンドロイドのバージョンとゲームのバージョンが合ってるか確認する。

終わりに

次回は実際にチート機能を作っていきます。