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

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

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

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

или

  • Приложение запускается с использованием флага debuggable в 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();
    }

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

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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