Ответ 1
boolean isConnected= new Debug(). isDebuggerConnected();
Определите, подключен ли отладчик. Документация класса отладки
Без повторной компиляции приложения пользователь может отключить приложение, используя xposed для отладки /heapdump приложения
Есть ли какой-либо метод (root или non root) для обнаружения приложения в настоящее время:
или
или
Используя
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();
Определите, подключен ли отладчик. Документация класса отладки
Afaik невозможно получить эту информацию без root.
Однако вы можете проверить, подключен ли отладчик. См. Debug.isDebuggerConnected()
Вместо того, чтобы полагаться на BuildConfig.DEBUG
и на ApplicationInfo
, которые теперь ненадежны из-за открытого модуля.
Вы можете создать глобальную константу в своем коде.
public class DebugMode{
public static final boolean ENABLED = true;
}
В вашей версии релиза вы установите для этого значение значение true, а в вашей версии отладки - false. Вы также можете использовать различные исходные наборы для buildflavours. Поэтому вам не нужно вручную их изменять.
Если DebugMode.ENABLED
истинно, вы знаете, что ваше приложение находится в режиме отладки, иначе оно находится в режиме деблокирования. Если DebugMode.ENABLED
- false, а BuildConfig.DEBUG
- true, вы знаете, что кто-то подделывает флаг отладки. Если вы это знаете, вы можете закрыть свое приложение или предпринять другие действия, чтобы предотвратить сброс кучи.
На устройстве с установленным Xposed вы не можете ничего предотвратить или полагаться на любые данные, которые обрабатывают ваши приложения в коде Java/dex. Все может быть изменено Xposed.
Поэтому единственный способ - упростить ваше приложение, добавив собственный код, который предотвращает выполнение на устройствах с установленным Xposed. Хорошие упрочняющие рамки также делают очень трудным/почти невозможным подключение отладчиков.