今回使う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
右上の 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\debug
に app-debug.apk
が作成されます。
出来上がった app-debug.apk
を D:\work\
に移動させて逆コンパイルします。
1 | apktool_2.8.1.jar d app-debug.apk |
逆コンパイルされた app-debug
フォルダー内の smali
を D:\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 のアイコンをタップして開くと、チートのオンオフが選択できます。今回は作ってないので何も機能しません。
動かない場合は?
- アンドロイドのバージョンとゲームのバージョンが合ってるか確認する。
終わりに
次回は実際にチート機能を作っていきます。