J’ai implémenté la facturation par application dans une application et je souhaite maintenant la sécuriser un peu plus. En lisant le matériel de développement, on peut lire:
En plus d’exécuter un programme d’obscurcissement, nous vous recommandons d’utiliser les techniques suivantes pour obscurcir votre code de facturation intégré à l’application.
Méthodes en ligne dans d’autres méthodes.
Construisez des chaînes à la volée au lieu de les définir en tant que constantes.
- Comment désactiver le défilement horizontal dans la vue Web Android
- java.lang.Void vs void vs Null
- Développement d’une application similaire à «Google maintenant» – est-il possible d’utiliser la reconnaissance vocale sans saisie au clavier?
- Pourquoi ma méthode de comparaison génère-t-elle une exception? La méthode de comparaison viole son contrat général
- Exception bizarre: impossible de convertir Ssortingng en booléen lors de l’utilisation de getBoolean
Utilisez la reflection Java pour appeler des méthodes.
http://developer.android.com/guide/market/billing/billing_best_practices.html
Obfuscation – bien je peux le faire = proguard
Méthodes en ligne dans d’autres méthodes – est-ce-à-dire que, une fois mon code terminé, débarrassez-vous de mon maximum d’objects OO et mettez tout mon code sur autant de lignes que possible (pour la partie facturation de mon application) en une seule méthode? Est-ce que cela inclut les cours en ligne? Dans l’exemple Android, ils ont une classe de constantes, est-ce que je vais tous les aligner?
Construisez des chaînes à la volée – oui, déplacez toutes les variables constantes de classe en ligne – proguard doit couvrir cela
Utiliser Java Reflection – C’est ma question principale. Devrais-je invoquer toutes mes méthodes au lieu de les appeler?
Pour gagner du temps, pourrais-je faire ceci:
private static Object invokeMethod(Ssortingng name, Class[] params, Object[] args){ try { return MySpecificClass.class.getMethod(name, params).invoke(null, args); } catch (IllegalArgumentException e) { // Should never happen in my code, ignore and cancel in app charge } catch (SecurityException e) { // Should never happen in my code, ignore and cancel in app charge } catch (IllegalAccessException e) { // Should never happen in my code, ignore and cancel in app charge } catch (InvocationTargetException e) { // Should never happen in my code, ignore and cancel in app charge } catch (NoSuchMethodException e) { // Should never happen in my code, ignore and cancel in app charge } return null; }
Je pourrais alors faire des choses comme ceci:
private static boolean someMethod() { return true; // just an example } params = new Class[0]; if ((Boolean) invokeMethod("someMethod", params, null)) { // Do something }
Est-ce une bonne sécurité, ou est-ce juste un problème de code qui rend mon application impossible à déboguer pour de véritables problèmes d’utilisateurs?
Merci.
Cela semble être quelque chose que vous pourriez examiner s’il existe une plus grande menace de piratage démontrée. Je ne pourrais pas justifier l’utilisation de la reflection uniquement pour une couche d’obscurcissement supplémentaire si elle risquait de compromettre l’expérience utilisateur.