タイトル: android-apk の解凍とパッキング
カテゴリ: Android
タグ: [アンドロイド, パッキング]
日付: 2022-09-28 10:29:51
コメント: false
mathjax: true
toc: true
android-apk は解凍とパックを行います。以下のすべての操作は、構成された Java 環境で実行する必要があります。
前編
- Android APK の解凍とパッケージ化 - https://blog.csdn.net/u011435933/article/details/89555328
- APK の解凍 + ソース コードの変更 + Android アプリの再パッケージ化と変更のチュートリアル APK ファイルの変更のチュートリアル - https://blog.51cto.com/u_15328720/3384769
- APK を解凍して変更した後の再パッケージ化 (良い記事) - https://blog.csdn.net/qq_16692517/article/details/107220707
- Android APK の逆コンパイル、smali ファイルの変更、再パッケージ化 - https://blog.csdn.net/q610098308/article/details/105336399
- Java の逆コンパイル、smali の変更、および再パッケージ化 (良い記事) - https://blog.csdn.net/weixin_28947723/article/details/115075813
- いくつかの Android 難読化およびリバース ツールの紹介 - https://blog.51cto.com/u_15060511/4080326
- Android 逆コンパイル ツール apktool、dex2jar、jd-gui、jadx の比較と使用 - https://zhuanlan.zhihu.com/p/389584833
- https://developer.aliyun.com/article/534391
- 関連ツールをダウンロードする
- jd-guiのダウンロード - https://github.com/java-decompiler/jd-gui/releases
- dex2jar - https://github.com/pxb1988/dex2jar
- smali および baksmali のダウンロード - https://bitbucket.org/JesusFreke/smali/downloads/?tab=downloads
- jadx - https://github.com/skylot/jadx/releases
- apktool - https://bitbucket.org/iBotPeaches/apktool/downloads/
- バンドルツール - https://github.com/google/bundletool/releases
- 使用説明書 - https://developer.android.com/studio/command-line/bundletool
- AXMLPrinter2.jar - https://code.google.com/archive/p/android4me/downloads
逆コンパイルのフローチャート
apktoolを使用する
-
APKを解凍する
$ java -jar -Duser.language=en -Dfile.encoding=UTF8 apktool.jar d [test_hi.apk] -o [test_hi]
test_hi.apk をtest_hiディレクトリに解凍します
-
パッケージapk
$ java -jar -Duser.language=en -Dfile.encoding=UTF8 apktool.jar b [test_hi]
test_hiディレクトリをパッケージ化し、test_hi/distディレクトリにtest_hi.apk を生成します。
-
パッケージ化後は4バイトのアライメントが必要です
$ zipalign -p -f -v 4 [test_hi.apk] [test_hi_align.apk]
- 位置がずれている場合、Android 11 以降 (R+、SDK 30 以降) マシンに APK をインストールするときにエラーが報告されます。
Failure [-124: Failed parse during installPackageLI: Targeting R+ (version 30 and above) requires the resources.arsc of installed APKs to be stored uncompressed and aligned on a 4-byte boundary]
- 位置がずれている場合、Android 11 以降 (R+、SDK 30 以降) マシンに APK をインストールするときにエラーが報告されます。
-
現時点では、生成された APK は署名される必要があります。署名されていない場合は、エラーが報告されます。
adb: failed to install test_hi.apk: Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Failed to collect certificates from /data/app/vmdl2044401184.tmp/base.apk: Attempt to get length of null array]
署名リファレンス[署名 apk パッケージ](#署名 apk パッケージ)
-
ピットを踏む
APK フォルダーが APK をコンパイルし、リソース エラーを報告する
間違い:Error: Resource is not public
解決策: APK を逆コンパイルするときに、-r
resc 逆コンパイルを回避するためにパラメーターを渡すことができます。以下の図を参照してください。この方法では、xml を含むパッケージ化時に resc ファイルが再コンパイルされなくなります。
参考: 逆コンパイルツール apktool の使用に関する問題 - https://www.jianshu.com/p/47a5511e17bf
jadx ツールを使用して APK を表示する (推奨)
-
GitHub - https://github.com/skylot/jadx/releases
-
使用するには、apk、jarをツールに直接ドラッグします
smali ツールを使用する
baksmali-2.2.2.jarおよびsmali-2.2.2.jarの使用
-
デックスはスマリを開梱します
$ java -jar baksmali-2.2.2.jar d [classes.dex] -o [myout]
class.dexを解決するsmali がmyoutディレクトリに生成されます
-
smali を dex にパッケージ化
java -jar smali-2.2.2.jar assemble [myout] -o [my_classes.dex]
myoutディレクトリをmy_classes.dexファイルにパッケージ化します。
署名済みの APK パッケージ
-
注文
$ java -jar apksigner.jar sign -verbose --v1-signing-enabled false --v2-signing-enabled true --ks [证书文件.jks] --ks-key-alias [证书别名] --ks-pass pass:[证书密码] --key-pass pass:[别名密码] --out [out_sign.apk] --in [in_unsign.apk]
-
次のコマンドを使用してパッケージ化することはできません
$ jarsigner -verbose -keystore [证书文件.jks] -storepass [证书密码] -signedjar [签名后输出文件.apk] [需要签名的文件.apk] [证书别名]
Android 11 以降のマシンにインストールすると、エラーが報告されます。
ERROR: Target SDK version 32 requires a minimum of signature scheme v2; the APK is not signed with this or a later signature scheme
-
瓶へのデックス
dex2jar と jd-gui はソースコードを表示するための単なるツールです
-
dex2jarツールを使用する
$ d2j-dex2jar.bat [classes3.dex] --force -o [aaa.jar] dex2jar classes3.dex -> aaa.jar
jarにインストールされたdex
-
まず Android SDK ビルド ツール ディレクトリに cd します。実際のテストは 30 です。その後、次のコマンドを使用できます。
$ cd android_sdk\build-tools\30.0.3 $ dx.bat --dex --output=C:\AndroidLib02.dex C:\JavaLab.main.jar
Javaをsmaliに変換する
- Android Studio 構成の非常に実用的な Java から smali プラグインへ - https://blog.csdn.net/u011426115/article/details/112855820
java2smaliプラグインは、Android Studio の非常に便利なプラグインです。このプラグインを通じて、Java または Kotlin ソース ファイルを smali ファイルに変換できます。このプラグインを使用すると、次のことが可能になります。
-
Java ソース ファイルを比較して smali 構文を学習する
-
APK の再パッケージ化中の Smali インストルメンテーション
プラグインを使用する
-
pluginsでjava2smali インストールを検索し、次のように再起動します。
-
Javaコードを開き、「ビルド」→「smariにコンパイル」します。
jd-gui を使用して jar コードを表示します (非推奨)
-
class3-dex2jar.jarをjd-guiに直接ドラッグするだけです
[jadx ツールを使用して apk を表示](#jadx ツールを使用して apk を表示) を使用し、逆コンパイルしてからソース コードに近づける方が良いでしょう。
Dex、Smali、Class、Java、Jar間の相互変換
道具
道具 | 効果 |
---|---|
ジャバック | java------>クラス |
ddx | クラス------>デックス |
バクスマリ語 | デックス------>スマリ |
羊飼い | スマリ------>デックス |
dex2jar | dex------>jar (クラスの圧縮パッケージ) |
apktool | apk------>smali |
Android ソースコードのコンパイルから動作まで
-
Javaからクラスへ
javac Test.java
-
クラスからデックスまで
ddx --dex --output=Test.dex Test.class
-
スマリへのデックス
java -jar baksmali.jar -o [输出文件夹] dex文件
-
スマリからデックスへ
java -jar smali.jar -o 目标dex文件 [smali文件夹]
-
瓶へのデックス
d2j-dex2jar.bat dex文件
aabとapkの変換
- Android APK と AAB を相互に変換 - https://blog.51cto.com/u_12300179/5267430
aabからapkへ
- ある
apkをaabに変換する
- aab への APK - https://juejin.cn/post/6982111395621896229
- GitHub - https://github.com/37sy/build_aab_tool
- APK2AAB - https://github.com/先生-z/APK2AAB
37 モバイルゲーム構築ツールの使用
- aab への APK - https://juejin.cn/post/6982111395621896229
測定:
-
強化された APK は aab をビルドします
-
aab を直接インストールするには、次のコマンドを実行します。
java -jar E:/bundletool-all-1.12.1.jar install-apks --apks=I:\base.apks
フラッシュバック、エラー:
Didn't find class "androidx.core.app.CoreComponentFactory"
-
aabから解凍されたapkは正常に動作します
-
-
強化されていない APK ビルド aab
libmain.so
aab を直接インストールすると、ダイナミック ライブラリが見つからないというエラーが報告されます。- aabから解凍されたapkは正常に動作します
解決:
- apks ファイルをエクスポートするコマンドにパラメーターを追加して
--mode=universal
、強化されているかどうかに関係なく、エクスポートされた apk が通常どおり実行できるようにします。
aab 署名
-
37 モバイル ゲーム Android チーム - APK を AAB 形式に変換 - https://juejin.cn/post/6982111395621896229
- GitHub - https://github.com/37sy/build_aab_tool
-
jarsigner
Aab はを使用して署名できます。aab に署名する場合、v2 署名を使用する必要はなく、JDK の通常の署名を使用するだけです。jarsigner -digestalg SHA1 -sigalg SHA1withRSA \ -keystore luojian37.jks \ -storepass ****** \ -keypass ****** \ base.aab \ ******
AndroidManifest.xml のデコードとエンコード
-
AndroidManifest.xml を平文に復元する方法 - https://blog.csdn.net/wwt831208/article/details/54692561
-
AXMLPrinter2.jar をダウンロード - https://code.google.com/archive/p/android4me/downloads
-
xml2axml (優れた変換ツール) - https://github.com/codyi96/xml2axml
-
xmlからaxmlへ
java -jar xml2axml-2.1.0.jar e [AndroidManifest-readable-in.xml] [AndroidManifest-bin-out.xml]
-
axmlからxmlへ
java -jar xml2axml-2.1.0.jar d [AndroidManifest-bin-in.xml] [AndroidManifest-readable-out.xml]
-
コマンドラインからアプリをビルドする
- コマンドラインからアプリをビルドします - https://developer.android.com/studio/build/building-cmdline#bundletool-build