Пошаговая инструкция для тех, кто хочет разобраться в процессе
Эта инструкция требует базовых знаний работы с командной строкой и Android. Если вам просто нужно приложение — скачайте готовую версию с главной страницы.
Установите приложение «ГИМС Экзамен» из Google Play или другого магазина приложений на ваш Android-телефон.
Открыть в Google PlayПодключите телефон к компьютеру с включённой отладкой по USB. Выполните команды:
# Узнать путь к APK
adb shell pm path com.blackspoongames.gimsfree
# Скопировать APK на компьютер (путь будет свой!)
adb pull /data/app/~~xxxx==/com.blackspoongames.gimsfree-yyyy==/base.apk
Путь у вас будет отличаться — используйте тот, что вернула первая команда.
Установите apktool и распакуйте APK:
apktool d base.apk -f
Появится папка base с содержимым приложения.
Приложение использует .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.
Скачайте dnSpy и откройте извлечённые DLL. Найдите методы:
IsFullVersionIsPremiumActiveИспользуйте поиск (Ctrl+Shift+K) для поиска по всем сборкам:
Редактирование C# может не работать, но можно редактировать IL-код напрямую. Кликните правой кнопкой на метод → Edit IL Instructions.
До патча:
После патча:
Суть патча:
nop (ничего не делать)ldc.i4.1 перед ret — это загружает 1 (true) на
стекtrueСохраните изменения: File → Save Module.
Используйте 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), если они есть.
По умолчанию приложение использует AOT (Ahead-of-Time) компиляцию — код уже скомпилирован в нативные библиотеки libaot-*.so. Наши изменения в DLL не будут работать, пока мы не удалим эти файлы и не заставим приложение использовать JIT:
# Удаляем AOT-библиотеки для всех архитектур
rm -rf base/lib/*/libaot-*.so
Важно: после удаления AOT приложение будет запускаться немного медленнее (JIT компилирует код при первом запуске), но это единственный способ применить патч.
Соберите модифицированное приложение обратно в APK:
apktool b base -o gims_patched_unsigned.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
Удалите оригинальное приложение (подписи разные) и установите пропатченное:
# Удалить старую версию
adb uninstall com.blackspoongames.gimsfree
# Установить пропатченную
adb install gims_patched.apk