web-dev-qa-db-fra.com

Obscurcir l'ensemble React Application native avec code JavaScript

Comment masquer mon code JS natif réactif? J'ai défini les éléments suivants dans mon fichier build.gradle:

release {
      minifyEnabled true
      proguardFiles getDefaultProguardFile("proguard-Android.txt"), "proguard-rules.pro"
 }

Voici mon fichier proguard-rules.pro (par défaut):

# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /usr/local/Cellar/Android-sdk/24.3.3/tools/proguard/proguard-Android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
#   http://developer.Android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

Mais toujours après avoir décompressé l'apk, je peux trouver le nom de mes composants JS, les variables et les URL

12
artsnr

Comme votre React code JavaScript natif est construit sur du code natif pour Android et iOS, un processus d'obscurcissement complet considérerait les trois bases de code:

Obscurcir Java pour Android

Heureusement, votre projet comprend déjà l'obfuscateur Proguard, qui peut être activé comme suit:

  1. Mettez à jour votre configuration de version dans le build.gradle fichier situé dans Android/app/ dossier:

    def enableProguardInReleaseBuilds = true
    
    Android {
        // other config omitted for brevity
        buildTypes {
            release {
                debuggable false
                shrinkResources enableProguardInReleaseBuilds
                zipAlignEnabled enableProguardInReleaseBuilds
                minifyEnabled enableProguardInReleaseBuilds
                useProguard enableProguardInReleaseBuilds
                setProguardFiles([getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'])
            }
        }
    }
    
  2. Activez l'obscurcissement ProGuard et modifiez les règles en conséquence dans proguard-rules.pro fichier situé dans Android/app/ dossier.

    La ligne de code suivante doit être mise en commentaire (ajoutez # au début de la ligne):

    #-dontobfuscate
    

    À ce stade, la création de la version finale de votre application Android doit contenir un code Java Java) obscurci. Vérifiez-la en analysant votre APK, où vous devriez trouver des appels de fonction tels que a, b au lieu de leurs noms réels.

Code ci-dessus référencé de poste moyen de Maria Korlotian . Vérifiez également dernière valeur par défaut React Native ProGuard à partir du référentiel GitHub.

À partir de Android 3.3 beta en avant, un obfuscateur plus optimisé appelé R8 peut être utilisé.

Obscurcir le code Objective-C pour iOS

Il n'y a pas de bibliothèque intégrée dans le projet iOS qui obscurcira votre code, donc un package externe doit être utilisé. PPiOS-Rename et ObjC-Obfuscator sont deux options ici. La documentation détaillée peut être trouvée dans leurs référentiels GitHub.

Obscurcir le code JavaScript

Ce serait la partie la plus importante de l'obscurcissement car notre code actuel est écrit en JavaScript. Le paquet react-native-obfuscating-transformer npm peut être utilisé ici:

  1. Ajoutez le package à votre projet

    npm install react-native-obfuscating-transformer
    
  2. Ajoutez/mettez à jour la configuration CLI dans rn-cli.config.js à la racine de votre projet, où résident les dossiers Android et ios.

    module.exports = {
     getTransformModulePath() {
       return require.resolve("./transformer")
     },
    }
    

    Créez ce fichier s'il n'existe pas encore.

  3. Créez le transformer.js fichier également à la racine et spécifiez options de configuration selon le cas:

    const obfuscatingTransformer = require("react-native-obfuscating-transformer");
    
    module.exports = obfuscatingTransformer({
        /* Insert here any required configuration */
    });
    

    Faites particulièrement attention à la portée du processus d'obscurcissement, qui par défaut ne cible que les fichiers dans src/ dossier (node_modules est exclu par défaut).


Compte tenu de tout ce qui précède, obscurcir votre application ne la rendra pas intrinsèquement sécurisée - bien que la sécurité et l'obscurité puisse être meilleure que la première, il existe de nombreuses autres améliorations de la sécurité (sinon exigences) pouvant être implémentées dans une application React Native. Cela inclut le stockage d'informations sensibles dans un stockage sécurisé ( Keystore in Android/ Porte-clés dans iOS), implémentant épinglage de certificat si approprié, et autres.

Autres liens utiles:

12
Siavas