web-dev-qa-db-ja.com

JavaScriptコードを含むネイティブアプリ全体を難読化React

反応ネイティブ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を見つけることができます

12
artsnr

ReactネイティブJavaScriptコードはAndroidおよびiOSのネイティブコードに基づいて構築されているため、難読化プロセス全体で3つのコードベースすべてが考慮されます。

難読化Java Androidのコード

幸いなことに、プロジェクトにはすでにProguard obfuscatorが含まれており、次のように有効にできます。

  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/ファイルでルールを適宜編集します。

    次のコード行をコメント化する必要があります(行の先頭に#を追加):

    #-dontobfuscate
    

    この段階で、Androidアプリに難読化されたJavaコードを含める必要があります。APKを分析して確認してください。実際の名前ではなく、ab

上記のコードは Maria Korlotian's Medium post から参照されています。また、 最新のデフォルトReact Native ProGuard設定 GitHubリポジトリから。

Android 3.3 beta以降では、より最適化された R8 と呼ばれる難読化ツールを使用できます。

IOS用のObjective-Cコードを難読化する

IOSプロジェクトにはコードを難読化する組み込みライブラリがないため、外部パッケージを使用する必要があります。 PPiOS-Rename および ObjC-Obfuscator は2つのオプションです。詳細なドキュメントは、GitHubリポジトリにあります。

JavaScriptコードを難読化する

実際のコードはJavaScriptで記述されているため、これが難読化の最も重要な部分になります。 react-native-obfuscating-transformer npmパッケージはここで使用できます:

  1. パッケージをプロジェクトに追加します

    npm install react-native-obfuscating-transformer
    
  2. プロジェクトのルートの rn-cli.config.js でCLI構成を追加/更新します。ここで、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はデフォルトで除外されます)。


上記のすべてを持っているので、アプリを難読化しても本質的に保護されません-セキュリティandの不明瞭さは前者よりも優れている可能性がありますが、他にもたくさんありますReactネイティブアプリに実装できるセキュリティ要件(要件ではない場合)。これには、機密情報の安全なストレージへの保存が含まれます( Keystore in Android/ iOSの場合はキーチェーン )、 証明書のピン留め の実装(該当する場合など).

その他の便利なリンク:

12
Siavas