2016-08-22 4 views
12

Sans recompiler l'application, l'utilisateur est en mesure de faire l'application débogable à l'aide Xposed pour debug/heapdump l'applicationDétecter Android App est en mode débogage

est-il une méthode (racine ou non root) pour détecter l'application est actuellement:

  • Exécution en mode débogage

ou

  • Th application e est commencé à utiliser le drapeau débogable dans zygote

ou

  • App est d'être tas jeté

En utilisant BuildConfig.DEBUG et ApplicationInfo et vérifier les drapeaux champ pour FLAG_DEBUGGABLEdoesn 't fonctionne depuis l'application a commencé par zygote avec le drapeau de débogage directement

est Ci-dessous le code qui accroche la classe processus

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(); 
    } 

all apps is debuggable

+0

Quel module Xposed rend l'application débogable? –

+0

http://repo.xposed.info/module/com.jecelyin.buildprop – xDragonZ

+0

Pourquoi dites-vous que 'BuildConfig.DEBUG' ne fonctionne pas? Je l'utilise pour vérifier l'état de débogage, indépendamment de la façon dont l'application a été installée ou démarrée. –

Répondre

0

il est AFAIK pas possible de récupérer cette information sans racine.

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

+0

Cette valeur ne retournera vrai que lorsque le débogueur est attaché, l'utilisateur peut toujours effectuer une vidage de tas. La racine est la bienvenue – xDragonZ

+0

Racine: Créez votre propre module xposed et accrochez la méthode avec une priorité basse. Je ne suis pas expérimenté avec shell Linux, mais cela pourrait être en mesure d'obtenir l'information aussi. – F43nd1r

+0

@ F43nd1r Les modules Xposed doivent être activés/désactivés par l'utilisateur ... – Robert

0

Au lieu de s'appuyer sur le BuildConfig.DEBUG et sur le ApplicationInfo qui ne sont pas 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, définissez cette valeur sur true et dans votre version de débogage sur false. Vous pouvez également utiliser different source sets for buildflavours pour cela. Vous n'avez donc pas besoin de les changer manuellement.

Si DebugMode.ENABLED est true, vous savez que votre application est en mode Débogage, sinon elle est en mode de publication. Si DebugMode.ENABLED est faux, et BuildConfig.DEBUG est vrai, vous savez que quelqu'un falsifie le drapeau de débogage. Si vous le savez, vous pouvez fermer votre application ou prendre d'autres mesures pour éviter un vidage de mémoire.

+0

Cela ne répond pas à la question, car le module xposed est en train d'accrocher 'Process.class' pas' BuildConfig' ni 'ApplicationInfo' – xDragonZ

0

Sur un périphérique sur lequel Xposed est installé, vous ne pouvez rien empêcher ou utiliser les données que votre application traite dans le code Java/dex. Tout peut être modifié par Xposed. Par conséquent, le seul moyen est de 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 d'attacher des débogueurs.

2

boolean isConnected = nouveau Débogage().isDebuggerConnected();

Déterminez si un débogueur est actuellement connecté. Documentation of Debug class

+1

Je ne sais vraiment pas pourquoi ce n'est pas la meilleure réponse. c'est simple et la seule solution de contournement que je trouve qui me laisse être paresseux en tant que développeur. +1 – booky99