Обфускация всего приложения React Native, включая код JavaScript - PullRequest
0 голосов
/ 08 октября 2018

Как скрыть мой реактивный JS-код?Я установил следующее в моем файле build.gradle:

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

Вот мой файл proguard-rules.pro (по умолчанию):

# 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 *;
#}

Но все равно после разархивирования apk ямогу найти имя моих компонентов JS, переменные и URL

1 Ответ

0 голосов
/ 21 января 2019

Поскольку ваш код React Native JavaScript построен на собственном коде для Android и iOS, весь процесс обфускации будет учитывать все три кодовые базы:

Обфусцировать код Java для Android

К счастью, ваш проект уже существуетвключает в себя Proguard обфускатор, который можно включить следующим образом:

  1. Обновите конфигурацию выпуска в файле 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'])
            }
        }
    }
    
  2. Включите запутывание 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 можно использовать здесь:

  1. Добавить пакет в ваш проект

    npm install react-native-obfuscating-transformer
    
  2. Добавить / обновить конфигурацию CLI в rn-cli.config.js в корне вашего проекта, где находятся папки android и ios.

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

    Создать этот файлесли он еще не существует.

  3. Создайте файл 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), реализацию закрепления сертификата , если необходимо, и другие.

Другие полезные ссылки:

...