反応ネイティブ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を見つけることができます
ReactネイティブJavaScriptコードはAndroidおよびiOSのネイティブコードに基づいて構築されているため、難読化プロセス全体で3つのコードベースすべてが考慮されます。
幸いなことに、プロジェクトにはすでにProguard
obfuscatorが含まれており、次のように有効にできます。
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
。
上記のコードは Maria Korlotian's Medium post から参照されています。また、 最新のデフォルトReact Native ProGuard設定 GitHubリポジトリから。
Android 3.3 beta以降では、より最適化された R8 と呼ばれる難読化ツールを使用できます。
IOSプロジェクトにはコードを難読化する組み込みライブラリがないため、外部パッケージを使用する必要があります。 PPiOS-Rename および ObjC-Obfuscator は2つのオプションです。詳細なドキュメントは、GitHubリポジトリにあります。
実際のコードはJavaScriptで記述されているため、これが難読化の最も重要な部分になります。 react-native-obfuscating-transformer npmパッケージはここで使用できます:
パッケージをプロジェクトに追加します
npm install react-native-obfuscating-transformer
プロジェクトのルートの rn-cli.config.js
でCLI構成を追加/更新します。ここで、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はデフォルトで除外されます)。
上記のすべてを持っているので、アプリを難読化しても本質的に保護されません-セキュリティandの不明瞭さは前者よりも優れている可能性がありますが、他にもたくさんありますReactネイティブアプリに実装できるセキュリティ要件(要件ではない場合)。これには、機密情報の安全なストレージへの保存が含まれます( Keystore in Android/ iOSの場合はキーチェーン )、 証明書のピン留め の実装(該当する場合など).
その他の便利なリンク:
React Native)のセキュアストレージ Randy Coulman作
React証明書のピン留めによるネイティブ)でTLSを強化 Skip Hovsmith