Ответ 1
Поскольку ваш код React Native JavaScript построен на собственном коде для Android и iOS, весь процесс запутывания будет учитывать все три кодовые базы:
Запутать код Java для Android
К счастью, ваш проект уже содержит обфускатор Proguard
, который можно включить следующим образом:
Обновите конфигурацию выпуска в файле
build.gradle
, расположенном в папкеandroid/app/
: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']) } } }
Включите запутывание ProGuard и измените правила соответствующим образом в файле
proguard-rules.pro
, расположенном в папкеandroid/app/
.Следующая строка кода должна быть закомментирована (добавьте
#
в начале строки):#-dontobfuscate
На этом этапе сборки релизная версия вашего Android-приложения должна содержать запутанный Java-код. Проверьте это, проанализировав свой APK, в котором вы должны найти вызовы функций, такие как
a
,b
вместо их реальных имен.
Код выше ссылается на Мария Корлотян Средний пост. Проверьте также последнюю конфигурацию React Native ProGuard по умолчанию из репозитория GitHub.
Начиная с версии бета-версии Android 3.3 можно использовать более оптимизированный обфускатор под названием R8.
Запутать код Objective-C для iOS
В проекте iOS нет встроенной библиотеки, которая бы запутывала ваш код, поэтому необходимо использовать внешний пакет. PPiOS-Rename и ObjC-Obfuscator - это два варианта. Подробную документацию можно найти в их репозиториях GitHub.
Запутать код JavaScript
Это было бы самой важной частью запутывания, поскольку наш реальный код написан на JavaScript. Пакет реактивный нативный обфускационный трансформатор npm можно использовать здесь:
Добавьте пакет в ваш проект
npm install react-native-obfuscating-transformer
Добавьте/обновите конфигурацию CLI в
rn-cli.config.js
в корневом каталоге вашего проекта, где находятся папкиandroid
иios
.module.exports = { getTransformModulePath() { return require.resolve("./transformer") }, }
Создайте этот файл, если он еще не существует.
Создайте файл
transformer.js
также в корне и укажите параметры конфигурации в зависимости от ситуации:const obfuscatingTransformer = require("react-native-obfuscating-transformer"); module.exports = obfuscatingTransformer({ /* Insert here any required configuration */ });
Обратите особое внимание на объем процесса запутывания, который по умолчанию нацелен только на файлы в папке
src/
(по умолчанию node_modules исключен).
Принимая во внимание все вышесказанное, запутывание вашего приложения не сделает его изначально защищенным - хотя и безопасность могут быть лучше, чем только первые, есть много других улучшений безопасности (если не требований), которые могут быть реализованы в приложение React Native. Это включает в себя хранение конфиденциальной информации в безопасном хранилище (Keystore в Android/Keychain в iOS), реализацию закрепления сертификатов, если необходимо, и другие.
Другие полезные ссылки:
Безопасное хранение в React Native Рэнди Коулмана
Укрепление TLS в React Native с помощью закрепления сертификатов by Skip Hovsmith