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
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:
Heureusement, votre projet comprend déjà l'obfuscateur Proguard
, qui peut être activé comme suit:
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'])
}
}
}
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é.
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.
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:
Ajoutez le package à votre projet
npm install react-native-obfuscating-transformer
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.
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:
Stockage sécurisé dans React Native par Randy Coulman
Renforcer TLS dans React Native via le certificat Pinning par Skip Hovsmith