2017-10-06 4 views
1

Nous travaillons sur l'ajout d'un composant NDK pour fournir une sécurité supplémentaire à notre application Android. Nous souhaitons que la logique de ce composant soit privée et ne souhaite donc pas que les traces de pile soient stockées dans le logcat studio android. J'ai essayé plusieurs drapeaux à la configuration de construction de CMake mais aucun ne semble aider. De plus, existe-t-il un outil semblable à Proguard disponible pour NDK afin que le code puisse être obfusqué?Comment empêcher NDK de vider la trace de la pile vers android logcat?

Répondre

2

Vous posez des questions sur un truc étrange. Si vous voulez juste faire l'ingénierie inverse plus difficile - alors il vaut mieux que obscurcir le code et ne pas essayer de cacher vos accidents au moins parce que:

  • rend plus difficile l'application de débogage au cours du développement
  • rend impossible d'obtenir des rapports d'erreur des utilisateurs finaux via Google Play Console
  • interfère avec le mécanisme de rapport de défaut du système et le cadre de l'application de manière imprévisible

Si vous voulez continuer à expérimenter avec elle - essayer cet extrait:Cette fonction installe un gestionnaire personnalisé pour tous les signaux UNIX qui, dans une situation habituelle, se termine par un crash natif et une sauvegarde associée dans logcat. Appelez cette fonction une fois pour supprimer la sortie de débogage dans logcat. Mais néanmoins chaque accident peut encore être détecté par un message rare dans logcat:

10-06 21:24:01.214 945-2236/? I/ActivityManager: Process com.example.sergik.test2 (pid 7682) has died: fore TOP 
10-06 21:24:01.214 632-632/? I/Zygote: Process 7682 exited cleanly (1) 

Et c'est tout. Aucun vidage sur incident, aucune information supplémentaire. Notez simplement que le système peut immédiatement redémarrer votre application car il ne peut pas voir qu'il y a eu un crash et il serait préférable de différer le redémarrage jusqu'à la demande explicite de l'utilisateur. Aussi, comme je l'ai dit plus tôt - c'est beaucoup un bidouillage qui peut confondre l'exécution d'android, particulièrement sur les systèmes modernes où ART installe ses propres chaînes de gestionnaire pour quelques signaux.

Il est donc préférable de se concentrer sur l'obfuscation. Je pense que certains obfuscateurs à base de LLVM peuvent répondre à vos besoins. Mais vous pouvez même commencer sans outils supplémentaires - comme première étape, vous pouvez simplement cacher toutes les informations de symboles inutiles de vos binaires et à gauche que JNI exportations nécessaires, par exemple via le script de version pour chaque fichier .so:

{ 
    global: 
    JNI_OnLoad; Java_*; 

    local: 
    *; 
}; 

Un tel script Masquer toutes les exportations sauf celles requises pour utiliser votre code depuis Java land.