11/23  2019/11版 APKファイルの改竄手順について



11/23  2019/11版 APKファイルの改竄手順について

俗に言うAPKファイルのリバースエンジニアリングみたいな話です。
ちょっと興味が湧いてやってみようと思ったんですが、ググってみても1発でそのものズバリっていうページが見つからず、書くことにしました。
最初に言っておきますと、わたしはAndroidアプリの開発はしたことないので、本日説明する事柄以外の質問をされても答えられませんのであしからず。

事前にインストールが必要なもの
  • JavaSDK
    これについては書くと長くなるので「JAVA SDK インストール」とかでググって下さい。
  • Android Studio
    これについてもググってもらったほうが詳細がわかりますが、平たく言うと下記2点を行えばOK。
    1.ここからandroid studioのダウンロードを行う。
    2.インストーラーにしたがってインストールを行う

他に事前にインストールが必要なものはない、と思います。
あったらわたしの環境だといつの間にか入ってた系のものになるので、エラーが発生次第、各自で解決法をググってね!

それでは本題に入りたいと思います。
Androidアプリ(.apkファイル)の改竄手順について。

おおまかに実施手順は5つ。
1.APKファイルの解凍
2.改竄
3.APKファイルの再作成
4.APKファイルへの署名情報の追加
5.zipalignコマンドの実行


ここではCドライブの直下にtmpフォルダを作って、そこに使用ツールの配置や、諸々の作業をします。

1.APKファイルの解凍
APKファイルの解凍だけならば拡張子をzipに変えても出来るのですが、解凍したものを使って再作成する時は下記手順を踏まないといけません。
ここで必要なものはこれ。
apktool

まぁ英語ページなんですが翻訳するなりフィーリングでやるなりしてやってみてください。
ようはapktoolの最新版をダウンロードしてきて、apktool.jarにリネームして下さいってことです。

apktoolの保存先パス(実行フォルダ)に日本語フォルダ名が挟まってると上手く動かないので注意。
今回はCドライブの直下に作ったtmpフォルダへapktool.jarを配置します。

んで、apktoolはJARファイルなのでインストールとかはなく、コマンドプロンプトでJavaコマンドで実行するか、環境変数PATHにapktoolを配置したフォルダを追加したあとにapktoolコマンドを実行するかでOKです。

■実行コマンド(例)
java -jar apktool.jar -r d test.apk
実行結果


ここで大事なのはオプションの-rです。
コマンドの意味は「-r, --no-res リソース(resources.arsc,諸々のxml等)をデコードしない。」です。
自分がテストに使ったAPKファイルの場合、-rを指定しないと再圧縮時にエラーが発生して先に進めませんでした。APKファイルによるのかもしれません。

以上でAPKファイルの解凍は完了です。

参考用
apktoolでリバースエンジニアリング
brut.common.BrutException: could not exec (exit code = 1): #1880

その2.改竄。
これは特段説明する必要のないことですね。ここはやりたいことをやって下さい。

その3.APKファイルの再作成
改竄が完了したら今度はそれを使ってAPKファイルを再作成します。
これもapktoolを使ってサクッとやりたいところですが、再作成には「framework-res.apk」というファイルが必要になります。
それをここからダウンロードします。
ダウンロードしてきた「framework-res.apk」をapktool.jarと同じフォルダに「framework」というフォルダを作って、その直下に配置します。

apktool.jar
framework
  |
  -framework-res.apk

■実行コマンド(例)
java -jar apktool.jar b test -o test2.apk
実行結果


これで改竄後のAPKファイルが作成できました。

その4.APKファイルへの署名情報の追加
これは正規の手順の場合、apksignerのコマンドを使って署名情報を追加するらしいのですが、どうにも上手くやることができなかったのでツールを使うことにしました。

ダウンロードするツールはこれです。
AdvancedApkTool
上記ページの「Download :」の「Advanced ApkTool v4.2.0 By BDFreak.rar」からはダウンロードできないので、その下にあるリンク(https://forum.xda-developers.com/showpost.php?p=69215130&postcount=682)からダウンロードします。

ダウンロード後、Cドライブ直下tmpフォルダに解凍します。

AdvancedApkToolの使用手順(署名情報の追加のみ)
1.「4-Done」フォルダへ、「その3.APKファイルの再作成」で作成したAPKファイルを移動させる。
2.Advanced ApkTool.exeを実行する。
3.「4」(4 - Sign Files)を入力
4.「1」(対象のAPKファイル)を入力
5.「y」を入力
6.エラーが出なければ完了

正規の手順の参考用
Androidのapkファイルの中身を書き換えして、インストールしたいです。
上記ページの下記部分
>最後に署名を与えます。
>JDKのあるパスをターミナルで開いて
>keytool -genkey -v -keystore key.jks -alias 任意の文字列(B) -keyalg RSA -validity 10000
>次に任意の文字列のキーストアのパスワード(C)を入力します。
>次は姓名〜国コードまでは聞かれますがなにも入力せずにEnterを押します。
>最後に「宜しいですか?」のように聞かれるので「y」と入力してenter
>最後にまたパスワードを聞かれますがこれは何も入れずにEnterを押します。
>AndroidSDKのbuild-toolsをカレントディレクトリとしてターミナルを開いて
>zipalign -v -p 4 任意の文字列(A).apkのあるパス 任意の文字列(D).apk
>apksigner sign --ks key.jksのあるパス --ks-key-alias 任意の文字列(B) --out 任意の文字列(E).apk 任意の文字列(D).apk
>
>これで署名済みのapkが作成されるのでインストールできます。

Advanced ApkToolの使用方法の参考用
【追記あり】アプリを最低Androidバージョンより古いAndroidで起動する方法(AdvancedApkTool編)

その5.zipalignコマンドの実行
最後はzipalignコマンドです。
zipalignコマンドの実行ファイルは事前にインストールしたandroid studioによって作成されたフォルダにあります。
Windows7の場合は下記。それ以外のOSの場合はわからないのでググるべし。

C:\Users\(ユーザ名)\AppData\Local\Android\Sdk\build-tools\(バージョン)
コマンドプロンプトで上記フォルダへ移動し、下記コマンドを実行――するまえに、「その4.APKファイルへの署名情報の追加」で作成したtest2.apkをCドライブ直下tmpの直下に持っていきます。
移動させたあと、下記コマンドを実行。
zipalign -v -p 4 C:\tmp\test2.apk C:\tmp\test3.apk
これも最後に「Verification succesful」と出てエラーがなければOKです。


zipalignコマンド参考用
Androidにおいてなぜzipalignをやる必要があるのか



「その5.zipalignコマンドの実行」で作成したAPKファイルをandroidへ持っていきインストールを実行すれば全行程が完了となります。
お疲れさまでした。