Ermitteln Sie, dass Android App im Debug-Modus ausgeführt wird

Ohne die Kompilierung der App, können Benutzer die App debugable mit xposed zu debug / heapdump die App

Gibt es eine Methode (root oder non root) zu erkennen, die App ist derzeit:

  • Laufen im Debug-Modus

oder

  • Die App wird mit der Debugable-Flagge in der Zygote gestartet

oder

  • App wird Heap entleert

Verwenden Sie BuildConfig.DEBUG und ApplicationInfo , und überprüfen Sie das Flags-Feld für FLAG_DEBUGGABLE funktioniert nicht, da die App von zygote mit Debug-Flag direkt gestartet wurde

Unten ist der Code, der die Prozessklasse hängt

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

Alle apps ist debugable

  • Assets Security in Android
  • Wie sicher zu speichern Credentials (Passwort) in Android-Anwendung?
  • Wie funktioniert Google Maps für Android v2 API Key Verifikation?
  • Android Anti-Crack, lohnt es sich trotzdem?
  • Wie sichere String in Android-Anwendung zu sichern?
  • Android In-App Sicherheitseingabe - was bedeutet das?
  • Android Word Wörterbuch Sicherheit Problem
  • Sollte ich OAuth-Konsumentengeheimnis durch Android-App gespeicherte?
  • 4 Solutions collect form web for “Ermitteln Sie, dass Android App im Debug-Modus ausgeführt wird”

    Boolean isConnected = new Debug () isDebuggerConnected ();

    Bestimmen Sie, ob ein Debugger aktuell angehängt ist. Dokumentation der Debug-Klasse

    Afaik ist es nicht möglich, diese Informationen ohne root abzurufen.

    Sie können jedoch überprüfen, ob ein Debugger angeschlossen ist. Siehe Debug.isDebuggerConnected()

    Anstatt sich auf die BuildConfig.DEBUG und auf die ApplicationInfo die jetzt wegen des exponierten Moduls unzuverlässig sind. Sie könnten eine globale Konstante in Ihrem Code erstellen.

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

    In deiner Release-Version stellst du das auf true und in deiner Debug-Version auf false. Sie können auch verschiedene Quellsets für Buildflavours verwenden . Also musst du sie nicht manuell ändern.

    Wenn DebugMode.ENABLED wahr ist, wissen Sie, dass Ihre App im Debug-Modus ist, sonst ist sie im Freigabemodus. Wenn DebugMode.ENABLED falsch ist und BuildConfig.DEBUG wahr ist, weißt du, dass jemand die Debug-Flagge manipuliert. Wenn du das kennst, kannst du deine App schließen oder andere Aktionen ergreifen, um einen Heap-Dump zu verhindern.

    Auf einem Gerät mit Xposed installiert können Sie nichts verhindern oder verlassen sich auf alle Daten Ihre App-Prozesse im Java / Dex-Code. Alles kann von Xposed geändert werden.

    Daher ist der einzige Weg, um Ihre App zu verhärten, indem Sie nativen Code, der die Ausführung auf Geräten mit Xposed installiert verhindert. Gute härtende Frameworks macht es auch sehr schwer / fast unmöglich, Debugger anzubringen.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.