Обнаружение Android-приложения работает в режиме отладки

Без перекомпиляции приложения пользователь может сделать приложение отлаживаемым с помощью xposed для отладки / heapdump приложения

Есть ли способ (root или non root) для обнаружения приложения в настоящее время:

  • Работа в режиме отладки

или

  • Приложение запускается с использованием отладочного флага в zygote

или

  • Приложение сбрасывается в кучу

Использование BuildConfig.DEBUG и ApplicationInfo и проверка поля флажков для FLAG_DEBUGGABLE не работает, так как приложение запускается zygote с флагом отладки напрямую

Ниже приведен код, который перехватывает класс процесса

  try { Method start = Process.class.getMethod( "start", String.class, String.class, Integer.TYPE, Integer.TYPE, int[].class, Integer.TYPE, Integer.TYPE, Integer.TYPE, String.class, String[].class); XposedBridge.log("start hook, appInfo: " + loadPackageParam.appInfo); XposedBridge.hookMethod(start, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam methodHookParam) throws Throwable { int id = 5; int flags = (Integer) methodHookParam.args[id]; if ((flags & 0x1) == 0) { flags |= 0x1; } methodHookParam.args[id] = flags; } } }); } catch (NoSuchMethodException e) { e.printStackTrace(); } 

Все приложения отлаживаются

Boolean isConnected = new Debug (). IsDebuggerConnected ();

Определите, подключен ли отладчик. Документация класса Debug

Afaik невозможно получить эту информацию без root.

Однако вы можете проверить, подключен ли отладчик. См. Debug.isDebuggerConnected()

Вместо того, чтобы полагаться на BuildConfig.DEBUG и на ApplicationInfo которые теперь ненадежны из-за открытого модуля. Вы можете создать глобальную константу в своем коде.

 public class DebugMode{ public static final boolean ENABLED = true; } 

В вашей версии выпуска вы установите для этого значение значение true, а в вашей версии отладки – false. Для этого вы также можете использовать разные наборы источников для buildflavours . Поэтому вам не нужно менять их вручную.

Если DebugMode.ENABLED истинно, вы знаете, что ваше приложение находится в режиме отладки, иначе оно находится в режиме деблокирования. Если DebugMode.ENABLED является ложным, а BuildConfig.DEBUG истинно, вы знаете, что кто-то фальсифицирует флаг отладки. Если вы это знаете, вы можете закрыть свое приложение или предпринять другие действия, чтобы предотвратить сброс кучи.

На устройстве с установленным Xposed вы не можете ничего предотвратить или полагаться на любые данные, которые обрабатывают ваши приложения в коде Java / dex. Все может быть изменено Xposed.

Поэтому единственный способ – упростить ваше приложение, добавив собственный код, который предотвращает выполнение на устройствах с установленным Xposed. Хорошие упрочняющие рамки также затрудняют / практически невозможно подключить отладчики.