Длинная статья в 10 000 слов поможет вамAPKДекомпилировать&Подать в отставку&aab&apksКонвертировать
Длинная статья в 10 000 слов поможет вамAPKДекомпилировать&Подать в отставку&aab&apksКонвертировать

Этот официальный аккаунт также имеет функцию сообщений! Каждый может оставить сообщение на память!

Декомпиляция Android

Декомпиляция — это процесс преобразования скомпилированной программы (например, двоичного кода) обратно в код языка программирования более высокого уровня. Обычно это используется для понимания того, как работает программа, проведения аудита программного обеспечения, восстановления утерянного исходного кода или проведения обучающих исследований. Сложность и эффективность декомпиляции зависят от того, сколько информации (например, имен переменных, комментариев и т. д.) теряется при компиляции исходной программы.

Приложения для Android обычно пишутся на Java или Kotlin и упаковываются в APK-файлы. Из-за этой характеристики приложений Android декомпиляция приложений Android обычно включает в себя несколько этапов, включая декомпиляцию файла APK для получения файла DEX (Dalvik Executable), а затем преобразование файла DEX в исходный код Java.

Обычно используемое программное обеспечение для декомпиляции выглядит следующим образом:

  • Apktool
    • скачатьадрес: https://apktool.org/docs/install Нажмитеlatest versionВыберите то, что вам нужно Версияруководитьскачать。
    • Функция:используется для ДекомпилироватьAndroid APKдокумент,Документ ресурса можно декодировать для просмотра его исходной формы.,и сновакомпилироватьмодифицированныйдокументразAPK。
    • Сценарии использования:ПроверятьиредактироватьAndroidРесурсы приложениядокумент,нравитьсяXMLмакети Строковый ресурс。
  • jadx
    • Установить Сумкаадрес:https://github.com/skylot/jadx/releases
    • Функция:командная строкаи Приложение с графическим интерфейсом,Может ВоляDEXдокументпрямой ДекомпилироватьстановитьсяJavaисходный код,Не нужно сначала КонвертироватьдляJAR。
    • Сценарии использования:快速ПроверятьAPKдокументизисходный код,Также поддерживаетверноAPKдокументруководитьредактироватьиотлаживать。

Развертывание среды Java

Справочный блог:

Загрузки JDK: Загрузки Java |

Установить

нуждатьсясуществовать Создайте новый на своем компьютередокументпапка,Уведомление,Путь не может содержать китайские символы.

Например, мой:

Язык кода:javascript
копировать
 
D:
 |- Z_Enviroment
  |-- Java
   |--- jdk1.8.0_251
   |--- jre1.8.0_251

Установить Перейдите в это место и выберите переход в наш новый каталог jdk1.8.0_251 (Уведомление здесь даjdk).

Установить Перейдите в это место и выберите переход в наш новый каталог jre1.8.0_251 (Уведомление здесь даjre).

Затем нажмите «Далее» до завершения.

Настройте переменную среды JAVA_HOME

1. Откройте настройки -> система -> Расширенные настройки системы -> переменные среды - > системапеременная(S) -> Нажмите «Новый» -> Новое содержание следующее:

Язык кода:javascript
копировать
 
Имя переменной (N): JAVA_HOME
Значение переменной (V): D:\Z_Enviroment\Java\jdk1.8.0_251

2. После нажатия кнопки «Подтвердить» на предыдущем шаге,существоватьсистемапеременная(S)найден вpath,Дважды щелкните, чтобы открыть,Продолжайте добавлять новые переменные.

Язык кода:javascript
копировать
 
%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin

Проверьте среду Java

Откройте окно командной строки cmd и для проверки используйте следующие две команды.

Язык кода:javascript
копировать
 
java
javac

Как показано на рисунке ниже, конфигурация переменных средыстановиться功。

  • java
  • avac

Использование инструмента декомпиляции jadx-gui

1. Загрузите инструмент jadx-gui.

скачатьадрес:https://apktool.org/docs/install Нажмитеlatest versionВыберите то, что вам нужно Версияруководитьскачать。

2. Используйте инструмент jadx-gui.

Дважды щелкните, чтобы запуститьjadx-gui-1.4.7.exe

3. Откройте документ или перетащите пакет apk или aab прямо в интерфейс приложения. Вы сможете просмотреть соответствующую информацию после завершения декомпиляции.

Это программное обеспечение автоматически скомпилирует пакет apk, который мы открываем. Вы можете просмотреть содержимое этого файла различными способами ниже, например: Code, Samli, Simple, Fallback.

Вообще говоря, SDK, к которому подключено наше программное обеспечение, будет находиться в пакете com, и вам нужно найти его уровень за уровнем.

Использование командной строки jadx

Адрес: https://github.com/skylot/jadx

параметр:

Язык кода:javascript
копировать
 
jadx[-gui] [options] <input files> (.apk, .dex, .jar, .class, .smali, .zip, .aar, .arsc, .aab)  
Параметры:  
  -d, --output-dir                    - Выходной каталог  
  -ds, --output-dir-src               - источник Выходной каталог  
  -dr, --output-dir-res               - ресурс Выходной каталог  
  -r, --no-res                        - Не расшифровывать ресурсы  
  -s, --no-src                        - Нет Декомпилироватьисходный код  
  --single-class                      - Декомпилировать один класс, полное имя, оригинальное имя или псевдоним.  
  --single-class-output               - Если вы хотите декомпилировать один класс, запишите его в файл или каталог.  
  --output-format                     - Может быть «java» или «json», по умолчанию: java.  
  -e, --export-gradle                 - сохранить как android gradle проект  
  -j, --threads-count                 - Количество потоков обработки, по умолчанию: 4  
  -m, --decompilation-mode            - Режим вывода кода:  
                                         'auto' - Попробуйте лучший вариант (по умолчанию).  
                                         'restructure' - Восстановить структуру кода (нормальная java код)  
                                         'simple' - Упрощенные инструкции (линейные, с goto )  
                                         'fallback' - Немодифицированная оригинальная инструкция  
  --show-bad-code                     - Отображение противоречивого кода (неверно Декомпилировать)  
  --no-imports                        - Запрещено использовать импорт. Всегда пишите название всего пакета.  
  --no-debug-info                     - Отключить отладочную информацию  
  --add-debug-lines                   - Добавьте комментарий с номером строки отладки, если он доступен.  
  --no-inline-anonymous               - Отключить встроенные анонимные классы  
  --no-inline-methods                 - Отключить встроенные методы  
  --no-finally                        - Не вынимайте последний кусок  
  --no-replace-consts                 - Не заменяйте константные значения совпадающими константными полями.  
  --escape-unicode                    - Экранировать нелатинские символы в строке (использовать \u)  
  --respect-bytecode-access-modifiers - Не меняйте исходный модификатор доступа  
  --deobf                             - Активировать деобфускацию Функция  
  --deobf-min                         - Минимальная длина имени, переименуйте, если короче, по умолчанию: 3  
  --deobf-max                         - Максимальная длина имени, переименуйте, если длиннее, по умолчанию: 64.  
  --deobf-cfg-file                    - Файл сопоставления защиты от обфускации, по умолчанию: тот же каталог и имя, что и у входного файла, с расширением «.jobf».  
  --deobf-cfg-file-mode               - Дескриптор деобфускации режима настройки файла сопоставления:  
                                         'read' - Прочитать, если найдено, не сохранять (по умолчанию)  
                                         'read-or-save' - Прочитайте, если найдете, в противном случае сохраните (не перезаписывайте)  
                                         'overwrite' - Не читать, сохранить навсегда  
                                         'ignore' - Не читать и не сохранять  
  --deobf-use-sourcename              - Использовать имя исходного файла в качестве псевдонима имени класса  
  --deobf-parse-kotlin-metadata       - Воля kotlin Метаданные преобразуются в имена классов и пакетов.  
  --deobf-res-name-source             - Лучшие источники названий ресурсов:  
                                         'auto' - Автоматически выбирать лучшее имя (по умолчанию)  
                                         'resources' - Использовать имя ресурса  
                                         'code' - использовать R Имя поля класса  
  --use-kotlin-methods-for-var-names  - использовать kotlin Внутренний метод переименовывает переменные, значения: отключить, применить, применить и скрыть, по умолчанию: применить.  
  --rename-flags                      - Варианты ремонта (список через запятую):  
                                         'case' - Исправить проблему с чувствительностью к регистру (согласно --fs-case-sensitive параметры),  
                                         'valid' - Переименовать java идентификатор, чтобы сделать его действительным,  
                                         'printable' - Удалить непечатаемые символы из идентификаторов,  
                                        или одинокий 'none' - Отключить все  
                                        или одинокий 'all' - Включить все (по умолчанию)  
  --fs-case-sensitive                 - Волядокументсистема视для区分大小写,по умолчаниюдля false  
  --cfg                               - Блок-схема управления методом «Воля», сохраненная в указанном документе  
  --raw-cfg                           - Схема управления методом сохранения (использовать оригинальную инструкцию)  
  -f, --fallback                      - Воля“--decompilation-mode”установлен на "резервный вариант" (устарело)  
  --use-dx                            - использовать dx/d8 Конвертировать java байт-код  
  --comments-level                    - Установите уровень комментариев к коду, значения: ошибка, предупреждение, информация, отладка, только для пользователя, нет, по умолчанию: информация.  
  --log-level                         - Установите уровень журнала, значения: тихо, прогресс, ошибка, предупреждение, информация, отладка, по умолчанию: прогресс.  
  -v, --verbose                       - Подробный вывод (Воля --log-level установлен на DEBUG)  
  -q, --quiet                         - Выключить выход (Воля --log-level установлен на QUIET)  
  --version                           - Распечатать jadx Версия  
  -h, --help                          - Распечатать Эта помощь  
  
Plugin Параметры (-P<name>=<value>):  
 1) dex-input: нагрузка .dex и .apk документ  
    - dex-input.verify-checksum       - Проверка перед нагрузкой dex документпроверятьи,ценить:[yes, нет], значение по умолчанию: да  
 2) java-convert: Конвертировать .class, .jar и .aar документприезжать dex  
    - java-convert.mode               - Конвертироватьмодель,ценить:[dx, d8, оба], значение по умолчанию: оба  
    - java-convert.d8-desugar         - существовать d8 серединаиспользовать десахар, значение: [да, нет], значение по умолчанию: нет  
  
Пример:  
  jadx -d out classes.dex  
  jadx --rename-flags "none" classes.dex  
  jadx --rename-flags "valid, printable" classes.dex  
  jadx --log-level ERROR app.apk  
  jadx -Pdex-input.verify-checksum=no app.apk
Язык кода:javascript
копировать
 
jadx -d "aaa" "aaa/www.apk"
# -d выражать Выходной каталог,Подключен сзади"aaa"выражатьиjadxв корневом каталогеaaaОглавление,позже"aaa/www.apk"выражать解析издаодинимя字дляwww.apkупаковкадокументпуть。

Результат следующий:

Язык кода:javascript
копировать
 
D:\D_Working\jadx-1.4.7-cli\bin>jadx -d "aaa" "aaa/www.apk"
INFO  - loading ...
ERROR - Zip bomb attack detected, invalid sizes: compressed 350, uncompressed 36968, name assets/bin/Data/974b5eb934ce17c42aecb0d547be8a8e
ERROR - Zip bomb attack detected, invalid sizes: compressed 350, uncompressed 36968, name assets/bin/Data/974b5eb934ce17c42aecb0d547be8a8e
ERROR - Zip bomb attack detected, invalid sizes: compressed 350, uncompressed 36968, name assets/bin/Data/974b5eb934ce17c42aecb0d547be8a8e
INFO  - processing ...
ERROR - finished with errors, count: 197

После декомпиляции будет две папки

Язык кода:javascript
копировать
 
aaa
	- resources
	- sources
		- этотдокументпапка Вниз就Может找приезжать我们接入изSDKинформация
		- Например, проверьте, подключено ли да к vungle-ads: aaa\sources\com\vungle\ads

То, что отображается здесь, соответствует тому, что отображается в jadx-gui.

Декомпиляция AndroidStudio

Android Studio сама по себе представляет собой интегрированную среду разработки (IDE) для разработки приложений Android. Ее основная цель — написание, отладка и публикация приложений Android. Хотя Android Studio не предоставляет напрямую функцию декомпиляции приложений Android, она предоставляет некоторые инструменты и поддержку плагинов, которые могут помочь разработчикам понять и в определенной степени проанализировать APK-файлы.

AndroidStudioскачать Установить

скачать

Официальный сайт загрузки: Download Android Studio & App Tools - Android Developers

После завершения загрузки дважды щелкните «Установить».

Установить

1. Нажмите Далее до конца.,Когда вам нужно выбрать каталог установки,Пожалуйста, выберитеДиск без CЧистый английский盘符Оглавлениеруководить Установить。

2. Так как JDK мы установили ранее,Таким образом, Android Studio поможет вам выбрать предыдущий каталог по умолчанию.,Просто нажмите «Далее» до конца.

3. Если Android не установлен на этом компьютере SDK , подскажет вам Установить,Помните ещедавыбиратьДиск без CЧистый английский盘符Оглавлениеруководить Установить。

4. Терпеливо дождитесь завершения автоматического обновления.

Просто создайте пустой файловый проект

Как просмотреть декомпилированный контент

На предыдущем шаге мы создали пустой проект. На данный момент мы просто перетаскиваем наш apk прямо в черное пространство в правой части проекта.

1. Файл dex в красном поле — это файл, который мы скомпилировали соответствующим образом.

2. Щелкните левой кнопкой мыши соответствующий файл dex, чтобы просмотреть конкретное содержимое внутри.

3、нуждаться Уведомлениеизда,Шрифт выделен курсивом,не настоящий контент,нуждаться找正正из字体издокументталантда正确из

4、当你找приезжать Понятноверно应издокументназад,右键单击выбиратьShow BytecodeМожет Проверять该документиз内容,этотдокументпо умолчаниюдаSmailназад缀。

Почему мне следует использовать AndroidStudio для просмотра инструментов?

Хотя инструмент jadx-gui также может просматривать содержимое файлов Smail и более удобен, чем AndroidStudio, если мы напрямую анализируем и декомпилируем код Java, нам следует использовать AndroidStudio, чтобы быть ближе к обработке формата нашего кода.

Конечно, это варьируется от человека к человеку.

использование основной команды apktool

Apktool — это инструмент обратного проектирования, который в основном используется для декомпиляции и перекомпиляции приложений Android. Он позволяет просматривать файлы ресурсов и исходный код приложения.

Декомпилировать APK

ДекомпилироватьAPKдокумент

Язык кода:javascript
копировать
 
apktool d [apkдокументпуть]

Эта команда будет ВоляAPKдокумент Декомпилироватьприезжатьодин Оглавлениесередина,Оглавлениеимяпо умолчаниюдляAPKдокументиздокументимя。你Может通过-oПараметрыобозначение Выходной каталог:

Язык кода:javascript
копировать
 
apktool d [apkдокументпуть] -o [Выходной каталог]

Перекомпилировать APK

Скомпилировать еще разуже Декомпилироватьиз Оглавление

Язык кода:javascript
копировать
 
apktool b [путь к каталогу]

Эта команда будет Воляобозначениеиз Оглавление重新компилироватьстановитьсяAPKдокумент。по умолчанию情况Вниз,输出изAPKроды[путь к каталогу]/dist/Вниз。你也Может通过-oПараметрыобозначение输出APKизпуть:

Язык кода:javascript
копировать
 
apktool b [путь к каталогу] -o [apkдокументпуть]

Установитьрамкаресурс

Установитьрамкаресурс

Язык кода:javascript
копировать
 
apktool if [путь к apk ресурса рамки]

некоторыйAPKсуществовать Декомпилироватьчаснуждаться特定израмкаресурсдокумент。этот条Заказ Может Волярамкаресурс УстановитьприезжатьApktoolиз工作Оглавлениесередина,так чтосуществовать Декомпилироватьили Скомпилировать еще разчасиспользовать。этотсуществоватьпозжеизизвлечение и замена framework-res.apk расскажет об этом.

На что следует обратить внимание

  • использоватьApktoolчас,Может потребоваться среда Java. Убедитесь, что система установлена. Установить Java.,иJAVA_HOMEпеременные среда уже установлена.
  • Декомпилироватьи Скомпилировать еще разизAPKнуждаться签имяталант能существоватьна устройстве Установить。МожетиспользоватьjarsignerинструментверноAPKруководить签имя,Поговорим об этом позже.

генерация ключей keytool

Пока на компьютере установлена ​​среда Java и настроены переменные среды,就Можетпрямойсуществоватьконсольный вводkeytoolПроверять

Язык кода:javascript
копировать
 
D:\Z_Enviroment\Java\jdk1.8.0_251\bin\keytool.exe
D:\Z_Enviroment\Java\jdk1.8.0_251\jre\bin\keytool.exe
Язык кода:javascript
копировать
 
C:\Users\xiaozai>keytool
Инструмент управления ключами и сертификатами

Заказ:

 -certreq            Создать запрос сертификата
 -changealias        Изменить псевдоним записи
 -delete             Удалить запись
 -exportcert         Экспортный сертификат
 -genkeypair         Сгенерировать ключ верно
 -genseckey          Сгенерировать ключ
 -gencert            Создать сертификат на основе запроса сертификата
 -importcert         Импорт сертификата или цепочки сертификатов
 -importpass         Импортировать пароль
 -importkeystore     Импортируйте одну или все записи из других хранилищ ключей.
 -keypasswd          Изменить ключевой пароль записи
 -list               Список записей в хранилище ключей
 -printcert          Распечатать содержание сертификата
 -printcertreq       Распечатать证书请求из内容
 -printcrl           Распечатать CRL документиз内容
 -storepasswd        Измените пароль хранилища ключей

использовать "keytool -command_name -help" получать command_name Использование

Общие команды

Язык кода:javascript
копировать
 
# Создайте хранилище ключей с именем PrivateKeys.keystore.
keytool -genkeypair -keysize 1024 -validity 7 -alias "privateKey" -keystore "privateKeys.keystore" -storepass "123456" -keypass "123456" -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN"
 
# команда экспорта
keytool -exportcert -alias "privateKey" -keystore "privateKeys.keystore" -storepass "123456" -file "certfile.cer"
 
# команда импорта
keytool -importcert -alias "publicCert" -file "certfile.cer" -keystore "publicCerts.keystore" -storepass "123456"

Подробное объяснение параметров:

Язык кода:javascript
копировать
 
размер ключа: укажите размер
Срок действия: укажите срок действия в днях.
псевдоним: псевдоним
keystore: указанное имя секретного хранилища 
storepass: укажите пароль хранилища ключей.
keypass: укажите ключевой пароль
dname: уникальное отличительное имя, cn имя владельца, ты Название организационного подразделения, o Название организации, л Название города или региона, ул. Название штата или провинции, c Двухбуквенный код страны

Просмотр информации о сертификате в файле сертификата

Язык кода:javascript
копировать
 
keytool -printcert -file certfile.cer

Посмотреть список:

Язык кода:javascript
копировать
 
владелец: CN=Example, OU=Example Unit, O=Example Organization, L=City, ST=State, C=Country
Автор: CN=Example CA, OU=Example CA Unit, O=Example CA Organization, L=City, ST=State, C=Country
Серийный номер: 123456789abcdef
Дата начала действия: Thu Jan 01 12:00:00 GMT 2020
Дата окончания срока: Fri Jan 01 12:00:00 GMT 2030
Отпечаток сертификата:
     MD5:  FA:FB:FC:FD:FE:FF:00:01:02:03:04:05:06:07:08:09
     SHA1: DA:DB:DC:DD:DE:DF:10:11:12:13:14:15:16:17:18:19
     SHA256: 1A:1B:1C:1D:1E:1F:20:21:22:23:24:25:26:27:28:29:2A:2B:2C:2D:2E:2F:30:31:32:33
Имя алгоритма подписи: SHA256withRSA
Версия: 3

Инструменты подписи apksigner и jarsigner

apksignerиjarsignerВседаиспользуется дляверноAndroid APKдокументруководить签имяизинструмент,但это们来自Нет同изпроект,исуществовать一些细节上иметь Место Нет同。签имяверно ВAndroid应用из Установитьключевой,Потому что Androidсистема требует, чтобы все приложения «Установить» проходили знак.

apksigner

apksignerдаAndroid Часть SDK, специально разработанная для подписи и проверки пакетов приложений Android (APK-файлов). Он поддерживает все новейшие требования и функции для подписи APK, включая поддержку схем подписи V2 и V3.

Подписанный APK

Язык кода:javascript
копировать
 
apksigner sign --ks [keystoreдокумент] --ks-key-alias [псевдоним] [apkдокумент]

Эта команда подписывает APK-файл, используя указанное хранилище ключей и псевдоним.

Проверьте подпись APK

Язык кода:javascript
копировать
 
apksigner verify [apkдокумент]

Эта команда используется для проверки правильности подписи APK.

apksigner提供Понятно更多из Параметры,нравитьсянастраивать签имя算法、обозначение签имя方案Версияждать,具体Может通过apksigner --helpПроверять。

jarsigner

jarsignerдаодин更通用изинструмент,主хотетьиспользуется дляверноJavaАрхивдокумент(JAR)руководить签имя,但也可используется дляAPKдокумент。相较Вapksigner,jarsignerвозможный Нет支持一些针верноAndroid Характеристики и требования к подписи, специфичные для APK.

Подписанный APK

Язык кода:javascript
копировать
 
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore [keystoreдокумент] [apkдокумент] [псевдоним]

этот条Заказиспользоватьобозначениеиз密钥库и别имяверноAPKдокументруководитьзнак.-sigalgи-digestalgПараметрыобозначение Понятно签имяисводный алгоритм。

Проверьте подпись APK

Язык кода:javascript
копировать
 
jarsigner -verify -verbose -certs [apkдокумент]

Эта команда используется для проверки подписи файла APK.

Какой выбрать?

  • нравиться果你существоватьруководитьAndroidразработка приложенийивыпускать,рекомендоватьиспользоватьapksigner,因дляэто支持Android Новейшие стандарты и требования для подписания APK.
  • нравиться果你существоватьразобраться с чем-то, связанным сJava密切相关из任务,Или вам нужен более универсальный инструмент для подписи.,jarsignerвозможныйдаодин Нет错извыбирать。

Уведомление

apksignerиjarsigner主хотетьиспользуется дляверноуже经存существоватьизAPKдокументруководить签имя,而Нет涉及从.aabприезжать.apksиз Конвертироватьпроцесс。

bundletool

bundletool да Android Studio、Android Gradle плагины и Google Play используется для строительства Android App Bundle из底层инструмент。bundletool может быть app bundle Преобразовано для различных развертываний на устройствах. APK。

На что следует обратить внимание:Нет能использовать apksigner верно App Bundle Чтобы подписать, вам нужно верно App Bundle Для подписи используйте jarsigner。

Официальная документация: https://developer.android.com/tools/bundletool?hl=zh-cn.

1. Требуемые ресурсы

  • bundletool.jar :скачатьадрес - https://github.com/google/bundletool/releases, сопутствующие документы: https://developer.android.com/tools/bundletool
  • пакет apk для подписи
  • 签имядокумент&секретный ключ

2. Отображение команд

Язык кода:javascript
копировать
 
bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
--ks=/MyApp/keystore.jks
--ks-pass=file:/MyApp/keystore.pwd
--ks-key-alias=MyKeyAlias
--key-pass=file:/MyApp/key.pwd

Уведомление:нравиться果хотетьпрямойиспользоватьbundletool,нуждаться自建одинbundletool.batдокумент,и把это加приезжатьпеременные средыв。bundletool.bat内容填写нравиться Вниз:

Язык кода:javascript
копировать
 
java -jar yourPath\bundletool.jar %*

Последний %* Указывает на получение любого количества параметров

3、bundletool build-apks Параметры команды

Язык кода:javascript
копировать
**(необходимый)**обозначение您использовать Android Studio построен app bundle изпуть。нравиться需Понятно解详情,请参阅构建您изпроект
。

4. Перейдите к назначенному устройству.

Если требуется от APK Чтобы развернуть приложение в наборе, используйте install-apks командовать и использовать --apks=/path/to/apks Обозначение флага APK Путь к набору, как показано в следующей команде. Если у вас подключено несколько устройств, добавьте --device-id=serial-id флаг, чтобы указать целевое устройство.

Язык кода:javascript
копировать
 
bundletool install-apks --apks=/MyApp/my_app.apks

Конвертируйте aab в apks и установите на устройство.

Официальный пример:

Язык кода:javascript
копировать
 
bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

aab для apks переподписан

Если вы хотите использовать эти APK 部署приезжатьоборудование,Вам также необходимо добавить информацию о подписи вашего приложения.,Как показано в следующей команде. Если вы не укажете данные подписи,bundletool попытаюсь использовать ключ отладки как APK знак.

Язык кода:javascript
копировать
 
bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
--ks=/MyApp/keystore.jks
--ks-pass=file:/MyApp/keystore.pwd
--ks-key-alias=MyKeyAlias
--key-pass=file:/MyApp/key.pwd

Пример:

Язык кода:javascript
копировать
 
java -jar bundletool.jar build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks 
--ks=yourapp.keystore 
--ks-pass=pass:123456 
--ks-key-alias=trojan 
--key-pass=pass:123456
--overwrite --mode=universal

УстановитьapksСумка

Язык кода:javascript
копировать
 
java -jar bundletool.jar install-apks --apks=/MyApp/my_app.apks 

апк к апк

apk к apk Ручное управление напрямую рассматривает apks как сжатый пакет.,Измените суффикс apks на zip и разархивируйте его.,解压назадиздокументсередина会иметьодинapkСумка。

Если вы используете команду bash, вы можете обратиться к:

Язык кода:javascript
копировать
 
java -jar bundletool.jar build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks 
--ks=yourapp.keystore 
--ks-pass=pass:123456 
--ks-key-alias=trojan 
--key-pass=pass:123456
--overwrite --mode=universal

ren my_app.apks my_app.zip
"C:\Program Files\WinRAR\WinRAR.exe" x -ibck my_app.zip
del my_app.zip
del toc.pb

Анализ команды после линии Рен:

Эта командадасериясуществоватьWindows环境Внизиспользоватьиз批处理Заказ,цельсуществовать Переименоватьодин.apksдокументдля.zipдокумент,然назадиспользоватьWinRAR解压этот.zipдокумент,инаконецудалить Оригинал.zipдокументиодинимядляtoc.pbиздокумент。Вниз面逐行解析этот些Заказ:

  1. ren my_app.apks my_app.zip:
    • Эта линия командованияиспользовать ПонятноWindowsизren(илиrename)Заказ,используется для Переименоватьдокумент。это Воляимядляmy_app.apksиздокумент Переименоватьдляmy_app.zip。Обычно этода因для.apksдокументна самом деледаодин特殊Форматиз.zipдокумент,Переименоватьназад Можетиспользовать标准из解压инструментоткрыть。
  2. "C:\Program Files\WinRAR\WinRAR.exe" x -ibck my_app.zip:
    • Эта линия командования调用Понятно УстановитьсуществоватьC:\Program Files\WinRAR\Оглавление ВнизизWinRAR.exeпрограмма,использоватьxПараметры для распаковкиmy_app.zipдокумент。xпараметрда Используется для распаковкидокументи保持Оригиналиметьиз Оглавление结构。
    • -ibckпараметр让WinRARсуществоватьназад台модель Вниз运行,Нет显示界面инеожиданно возникнуть。этотверно В批处理操作很иметь用,Потому что это не прерывает автоматизированные процессы.
    • my_app.zipобозначение Понятнохотеть解压издокументимя。
  3. del my_app.zip:
    • использоватьdelЗаказудалитьmy_app.zipдокумент。
  4. del toc.pb:
    • наконец,использоватьdelЗаказудалитьимядляtoc.pbиздокумент。

整个Заказ序列из目изда Воляодин.apksдокумент Конвертироватьстановиться标准из.zipФормат,затем разархивируйте его,наконец清理Местоиметь Нет再нуждатьсяиздокумент。

Конвертируйте aab в apk и установите его на устройство.

1. Конвертируйте aab в apks (см. шаги выше)

2. Измените суффикс apks на zip и распакуйте его в apk.

3、использоватьadbЗаказ Установитьapk

Язык кода:javascript
копировать
 
adb -s идентификатор устройства install my_app.apk 

извлечение и замена framework-res.apk

некоторыйAPKсуществовать Декомпилироватьчаснуждаться特定израмкаресурсдокумент。этотчас候我们нуждатьсяверно我们израмкаресурсдокументруководить更新или者替换。未来避免更新назад带来из各种问题,Место以нуждаться把更新前израмкаресурсдокумент Сделать резервную копию。

суждениеданет Установитьиметь framework-res.apk

Язык кода:javascript
копировать
 
apktool if framework-res.apk

1. Извлеките framework-res.apk из устройства.

Подключите свое Android-устройство,этот里我использоватьиздаAndroid14оборудование,拉取на устройствеизрамкаресурсдокументприезжатьPCконец。

Язык кода:javascript
копировать
 
adb pull /system/framework/framework-res.apk

2. Разберите framework-res.apk в соответствующую папку.

Язык кода:javascript
копировать
 
java -jar apktool_2.9.2.jar if framework-res.apk

Приложение: 1: Извлечь APK-файл системы устройства.

Язык кода:javascript
копировать
 
adb pull system/app test 
adb pull system/priv-app test 
adb pull data/app test

#аннотация:
/system/app Храните программное обеспечение, идущее в комплекте с самим ромом, то есть программное обеспечение системы;
/data/app Хранит программное обеспечение пользователя Установить;


#Уведомление:
/system/priv-app/ВнизизapkНет用система签имя,Просто уметь получать разрешения для подписи или системы.
/system/app/Внизизapk,хотетьполучатьsignatureOrSystemРазрешения,Он должен быть подписан системой.
APK в /data/app не может быть извлечен.,Вам нужно переместить его в другой каталог,существоватьскачатьприезжать电脑
adb shell cp /data/app/com.xueqiu.android-TKqF3b6wXa1KQ3KyKK6o6Q==/base.apk /sdcard/temp123


#получатьapkимя пакета
aapt dump badging PartnerBookmarksProvider.apk

#получатьимя пакета Местосуществоватьпуть
adb shell pm path имя пакета

Дополнительно 2. Напишите общий код извлечения APK на Python.

Язык кода:javascript
копировать
 
import os

#получатьapkизимя пакета
import time

class Pull_apk():

    def __init__(self,package_name,windows_apk_path):
        """
        : package_name : apkизимя пакета
        : windows_apk_path : Укажите путь, по которому компьютер хранит apk
        """
        self.get_package_name = package_name
        self.self.windows_apk_path = windows_apk_path

    def pull_select_apk(self):
        #получатьapkМестосуществоватьизпуть
        apk_path_cmdshow = os.popen(f"adb shell pm path {self.get_package_name}").read()
        apk_path = apk_path_cmdshow.split(":")[1].strip()
        apk_name = apk_path.split("/")[-1]
        windows_apk_path = self.windows_apk_path
        #Попробуйте распаковать в систему Windows, если не получается распаковать, то скопировать в каталог sdcard устройства, а потом распаковать в Windows
        try:
            msg = os.popen(f'adb pull {apk_path} {windows_apk_path} ').read()
            print("----------------")
            if "1 file pulled" in msg:
                print("apkкопироватьстановиться功")            else:
                #копировать в каталог SDcard
                os.system(f'adb shell cp {apk_path}  /sdcard/')
                time.sleep(3)
                os.system(f'adb pull /sdcard/{apk_name} {windows_apk_path}')
                print("иначе ветка, апккопировать успешно")
        except Exception as e :
            print(e)
        return apk_name

запутанное шифрование

Введение в Аллатори

1. Java-обфускатор аллаторида второго поколения;

2. Он имеет мощные функции запутывания, такие как запутывание имени, запутывание потока, запутывание строк и технология водяных знаков. поэтомуверно混淆назадиз代码руководить逆向工程几乎да Нетвозможныйиз;

3. Разрешить приложениям, которым требуется запутанный код, добавлять период действия;

4. Эффект запутывания кода очень силен, а операция проста;

5. Недостаточная обфускация оказывает большее влияние на производительность программы.,После обфускации скорость работы снизится (вообще говоря, до тех пор, пока код будет обфусцирован).,В некоторой степени это окажет определенное влияние на производительность);

Как использовать

1. Сначала зайдите на официальный сайт: http://www.allatori.com/

2. После распаковки каталог после распаковки выглядит так:

3. Создайте новую папку.

4. Войдите в каталог lib и скопируйте allatori.jar в новую тестовую папку. Войдите в каталог Tutorial\step01\files и скопируйте Clean.bat, config.xml и RunAllatori.bat в новую тестовую папку.

5. Скопируйте jar-пакет, который нужно перепутать, во вновь созданный тестовый файл.

6. Измените содержимое Clean.bat.

Язык кода:javascript
копировать
 
del log.xml
del test-1.0-SNAPSHOT-mix.jar

7. Измените содержимое RunAllatori.bat.

Язык кода:javascript
копировать
 
java -Xms128m -Xmx512m -jar allatori.jar config.xml
  • java -Xmx3550m -Xms3550m -Xmn2g -Xss128k
  • ①、-Xmx3550m:настраиватьJVM最大可用内存для3550M.
  • ②、-Xms3550m:настраиватьJVM促使内存для3550m.此ценить Можетнастраивать与-Xmxтакой же,Чтобы избежать перераспределения памяти JVM после завершения каждой сборки мусора.
  • ③、-Xmn2g:настраиватьразмер молодого поколениядля2G.весь размер кучи=размер молодого поколения + размер старого поколения + Постоянный размер поколения.持久代一般固定大小для64m,Итак, после увеличения молодого поколения,Воляуменьшитсяразмер старого Это значение верносистемы оказывает большее влияние на производительность. Sun официально рекомендует конфигурацию 3/8 всей кучи.
  • ④、-Xss128k:настраивать每个线程из堆栈大小.JDK5.0以назад每个线程堆栈大小для1M,以前每个线程堆栈大小для256K.更具应用из线程Место需内存大小руководить Корректирование.существоватьтакой же物理内存Вниз,Уменьшение этого значения может привести к созданию большего количества потоков. Однако количество потоков в процессе по-прежнему ограничено.,не может генерироваться бесконечно,经验ценитьсуществовать3000~5000о.

8. Измените config.xml.

Язык кода:javascript
копировать
 
<config>
    <input>
        <jar in="test-1.0-SNAPSHOT.jar" out="test-1.0-SNAPSHOT-mix.jar"/>
    </input>


	<ignore-classes>
		<!--Нет混淆 引入из第三方jarСумка-->
		<!--<class template="class *org*" />-->
		<!--Нет混淆из类-->
		<!--<class template="class com.*" />-->
	</ignore-classes>

    <keep-names>
        <class access="protected+">
            <field access="protected+"/>
            <method access="protected+"/>
        </class>
    </keep-names>

    <property name="log-file" value="log.xml"/>
</config>

11. Дважды щелкните Clean.bat, чтобы удалить запутанный jar-пакет и файл журнала. 12. Эффект обфускации.

  • (1) До путаницы:
  • (2) После путаницы:

Возникшие проблемы – решения

Команда dos содержит искаженные символы китайского пути .bat.

Откройте файл .bat → Сохранить как → Измените кодировку на формат ANSI, нажмите «Сохранить» и замените исходный файл .bat.

Проблема с AndroidStudio

Разрешение сбоя сборки проекта

прямой НажмитеUpgrade Gradle wrapper to 7.2 version and re-import the projectруководить更新即可

решение проблемы сбоя Gradle

1. Нажмите «Основной» в первый раз для отладки.,система будет делать Gradle,Ошибка кода

1.1、существоватьcom.test.rebuilttool -> api -> ApiCost.java измените код следующим образом:

Язык кода:javascript
копировать
 
package com.test.rebuilttool.api;  
  
public class ApiConst {  
    public static final  String DOAMIN_URL="https://open-api-cn.dataverse.cn/";  
    public static final  String LOGIN_URL=DOAMIN_URL+"modules/accounts/login";  
    public static final  String TOKEN_URL=DOAMIN_URL+"oauth/access_token";  
    public static final  String FILE_URL= DOAMIN_URL+"modules/accounts/key";  
}

2. Не удалось выполнить пакет сжатия downloadgradle.,Проверить сеть,Убедитесь, что сеть не заблокирована,Просто перескачать.

3. Проверьте правильность JDKда, настроенного Gradle.,Если будет предложено обновить,Просто нажмите «Обновить».

Устранение искаженных отчетов об ошибках кода

1. Успех Gradle,Но сборка не удалась,Искаженный код вывода консоли

2. Поскольку китайские комментарии по умолчанию да ГБК,AndroidStudio может отображаться нормально,Но при дакомпилировании GBK Chinese рассматривался gradle как неотображаемый символ да.,Таким образом, будет сообщено об ошибке.

3. Измените параметры виртуальной машины AndroidStudio и добавьте поддержку кодировки UTF-8.

4、Help----->Edit Custom VM options

5. Добавьте настройки кодировки UTF-8.

Язык кода:javascript
копировать
 
# custom Android Studio VM options, see https://developer.android.com/studio/intro/studio-config.html  
-Dfile.encoding=UTF-8

6、File—>Invalid caches./Restart Перезапустите программное обеспечение

Ошибка процесса подписания: ошибка: атрибут android:enableOnBackInvokedCallback не найден.

Искал официальный ответ: https://github.com/iBotPeaches/Apktool/issues/3041.,API фреймворка необходимо обновить до версии 34.,Это то, о чем мы говорили выше,Рамку ресурса необходимо обновить.

Обновление на локальном компьютере

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose