Détecter l’application Android est en cours d’exécution en mode débogage

Sans recomstackr l’application, l’utilisateur peut faire déboguer l’application en utilisant xposed pour déboguer / comstackr l’application

Existe-t-il une méthode (root ou non) pour détecter l’application actuellement:

  • Exécution en mode débogage

ou

  • L’application est lancée en utilisant l’indicateur de débogage dans zygote

ou

  • L’application est en tas

Utiliser BuildConfig.DEBUG et ApplicationInfo et vérifier le champ des drapeaux pour FLAG_DEBUGGABLE ne fonctionne pas depuis que l’application lancée par zygote avec indicateur de débogage directement

Voici le code qui accroche la classe de processus

  try { Method start = Process.class.getMethod( "start", Ssortingng.class, Ssortingng.class, Integer.TYPE, Integer.TYPE, int[].class, Integer.TYPE, Integer.TYPE, Integer.TYPE, Ssortingng.class, Ssortingng[].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(); } 

toutes les applications sont déboguables

boolean isConnected = new Debug (). isDebuggerConnected ();

Déterminez si un débogueur est actuellement connecté. Documentation de la classe Debug

Afaik il n’est pas possible de récupérer cette information sans root.

Cependant, vous pouvez vérifier si un débogueur est connecté. Voir Debug.isDebuggerConnected()

Au lieu de compter sur BuildConfig.DEBUG et sur ApplicationInfo qui ne sont plus fiables à cause du module exposé. Vous pouvez créer une constante globale dans votre code.

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

Dans votre version de version, vous définissez ce paramètre sur true et dans votre version de débogage sur false. Vous pouvez également utiliser différents jeux de sources pour buildflavours . Vous n’avez donc pas à les modifier manuellement.

Si DebugMode.ENABLED est true, vous savez que votre application est en mode Debug, sinon elle est en mode release. Si DebugMode.ENABLED est false et que BuildConfig.DEBUG true, vous savez que quelqu’un manipule l’indicateur de débogage. Si vous le savez, vous pouvez fermer votre application ou prendre d’autres mesures pour empêcher un vidage du tas.

Sur un appareil sur lequel Xposed est installé, vous ne pouvez rien empêcher ou utiliser des données traitées par votre application dans le code Java / dex. Tout peut être modifié par Xposed.

Par conséquent, le seul moyen consiste à renforcer votre application en ajoutant du code natif qui empêche l’exécution sur les périphériques sur lesquels Xposed est installé. De bons frameworks de durcissement rendent également très difficile / presque impossible la connexion de débogueurs.