Назад на главную

Как пропатчить приложение самостоятельно

Пошаговая инструкция для тех, кто хочет разобраться в процессе

Для продвинутых пользователей

Эта инструкция требует базовых знаний работы с командной строкой и Android. Если вам просто нужно приложение — скачайте готовую версию с главной страницы.

Что понадобится

  • ADB (Android Debug Bridge) — для извлечения APK с устройства
  • apktool — для распаковки/сборки APK
  • maui-packer — для работы с .NET MAUI 9 сборками
  • dnSpy — для редактирования .NET DLL
  • Java JDK — для подписи APK (keytool, jarsigner или apksigner)

Пошаговая инструкция

1

Скачайте бесплатную версию приложения

Установите приложение «ГИМС Экзамен» из Google Play или другого магазина приложений на ваш Android-телефон.

Открыть в Google Play
2

Извлеките APK с устройства

Подключите телефон к компьютеру с включённой отладкой по USB. Выполните команды:

# Узнать путь к APK
adb shell pm path com.blackspoongames.gimsfree

# Скопировать APK на компьютер (путь будет свой!)
adb pull /data/app/~~xxxx==/com.blackspoongames.gimsfree-yyyy==/base.apk

Путь у вас будет отличаться — используйте тот, что вернула первая команда.

3

Распакуйте APK

Установите apktool и распакуйте APK:

apktool d base.apk -f

Появится папка base с содержимым приложения.

4

Распакуйте .NET MAUI сборки

Приложение использует .NET MAUI 9, поэтому DLL упакованы в libassemblies.*.blob.so. Для их извлечения используйте maui-packer:

# Распаковываем сборки (для arm64)
python3 maui_packer.py extract ../base/lib/arm64-v8a/libassemblies.arm64-v8a.blob.so extracted/

DLL будут извлечены в папку extracted/ вместе с файлом _metadata.bin (нужен для упаковки обратно).

Быстрый способ: используйте готовый скрипт patch_apk.sh из того же репозитория, который автоматизирует весь процесс:

./patch_apk.sh input.apk output.apk

Скрипт сам распакует APK, извлечёт DLL, дождётся ваших правок и соберёт обратно.

Альтернатива: для старых версий .NET MAUI можно использовать pyxamstore.

5

Найдите и пропатчите флаги в dnSpy

Скачайте dnSpy и откройте извлечённые DLL. Найдите методы:

  • IsFullVersion
  • IsPremiumActive

Используйте поиск (Ctrl+Shift+K) для поиска по всем сборкам:

Поиск IsFullVersion в dnSpy

Редактирование C# может не работать, но можно редактировать IL-код напрямую. Кликните правой кнопкой на метод → Edit IL Instructions.

До патча:

Оригинальный IL-код

После патча:

Пропатченный IL-код

Суть патча:

  • Заменяем ненужные инструкции на nop (ничего не делать)
  • Ставим ldc.i4.1 перед ret — это загружает 1 (true) на стек
  • Метод теперь всегда возвращает true

Сохраните изменения: File → Save Module.

6

Запакуйте сборки обратно

Используйте maui-packer для упаковки пропатченных DLL:

python3 maui_packer.py repack \
  ../base/lib/arm64-v8a/libassemblies.arm64-v8a.blob.so \
  extracted/ \
  ../base/lib/arm64-v8a/libassemblies.arm64-v8a.blob.so

Повторите для других архитектур (armeabi-v7a, x86_64), если они есть.

7

Удалите AOT-файлы (переключение на JIT)

По умолчанию приложение использует AOT (Ahead-of-Time) компиляцию — код уже скомпилирован в нативные библиотеки libaot-*.so. Наши изменения в DLL не будут работать, пока мы не удалим эти файлы и не заставим приложение использовать JIT:

# Удаляем AOT-библиотеки для всех архитектур
rm -rf base/lib/*/libaot-*.so

Важно: после удаления AOT приложение будет запускаться немного медленнее (JIT компилирует код при первом запуске), но это единственный способ применить патч.

8

Соберите APK

Соберите модифицированное приложение обратно в APK:

apktool b base -o gims_patched_unsigned.apk
9

Подпишите APK

Android требует, чтобы все APK были подписаны. Создайте ключ и подпишите приложение:

Создание ключа (один раз):

keytool -genkey -v -keystore my-release-key.jks -keyalg RSA \
  -keysize 2048 -validity 10000 -alias my-key

Подпись APK:

# Выравнивание (оптимизация)
zipalign -v 4 gims_patched_unsigned.apk gims_aligned.apk

# Подпись с помощью apksigner (рекомендуется)
apksigner sign --ks my-release-key.jks --out gims_patched.apk gims_aligned.apk

# Проверка подписи
apksigner verify gims_patched.apk

Альтернатива: можно использовать jarsigner:

jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 \
  -keystore my-release-key.jks gims_patched_unsigned.apk my-key
10

Установите на устройство

Удалите оригинальное приложение (подписи разные) и установите пропатченное:

# Удалить старую версию
adb uninstall com.blackspoongames.gimsfree

# Установить пропатченную
adb install gims_patched.apk

Полезные ссылки