Поскольку ваш код 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/
.
Необходимо закомментировать следующую строку кода (добавьте #
в началеof line):
#-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), реализацию закрепления сертификата , если необходимо, и другие.
Другие полезные ссылки: