当前位置: 首页 > 知识库问答 >
问题:

混淆整个React原生应用程序,包括JavaScript代码

谭吉星
2023-03-14

如何混淆我的react-native 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个答案

奚翰海
2023-03-14

由于您的React原生JavaScript代码构建在Android和iOS的原生代码之上,整个模糊处理过程将考虑所有三个代码库:

幸运的是,您的项目已经包含proguard混淆器,可以按以下方式启用:

>

  • android/app/文件夹中的build.gradle文件中更新发布配置:

    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模糊处理,并相应地在Android/app/文件夹中的proguard-rules.pro文件中编辑规则。

    下面的代码行需要注释掉(在行首添加#):

    #-dontobfuscate
    

    在这个阶段,构建Android应用程序的发布版本应该包含模糊的Java代码。通过分析您的APK来检查它,您应该找到函数调用,如AB,而不是它们的实际名称。

    上面的代码引用自玛丽亚·科洛蒂安的媒体帖子。还可以从GitHub存储库中查看最新的默认React原生ProGuard配置。

    从Android3.3测试版开始,可以使用一个更优化的模糊处理程序R8。

    iOS项目中没有会混淆代码的内置库,因此必须使用外部包。PPiOS-Rename和ObjC-Obfuscator是这里的两个选项。详细的文档可以在他们的GitHub存储库中找到。

    这将是模糊处理中最重要的部分,因为我们的实际代码是用JavaScript编写的。这里可以使用react-native-obfuscating-transformer npm包:

    npm install react-native-obfuscating-transformer
    

    在项目根目录的rn-cli.config.js中添加/更新CLI配置,AndroidIOS文件夹位于该目录中。

    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本机应用程序中可以实现许多其他安全增强(如果不是需求的话)。这包括在安全存储中存储敏感信息(Android中的Keystore/iOS中的Keychain),在适当的情况下实现证书钉扎,以及其他。

    其他有用的链接:

    通过Skip Hovsmith的证书钉扎在React Native中增强TLS

  •  类似资料:
    • 问题内容: 由于fxml- files使用Controller类来处理事件,因此如何混淆JavaFX应用程序?当混淆的conntroller类具有不同的名称和路径时,fxml文件将找不到它们。 混淆后编辑fxml文件不是我想要的解决方案。 还有其他选择吗? 问题答案: 没有意义重塑轮子; 快速的google搜索产生了这个网站。 它使用Proguard混淆器。

    • 我有一个用Kotlin(android studio)编写的android应用程序和用React Native编写的应用程序的UI。我的问题是这些能联系在一起吗?如果是,怎么做?还有,你们能发布一些我可以通过的链接吗。 附注:我对react Native一无所知。

    • 因此,我正在创建一个React本机应用程序,我想从应用程序的本机部分调用JavaScript函数。 我知道我可以使用Native模块在Native和React Native之间建立一座桥梁,我还知道从Native模块我可以发出React Native可以接收的事件。 但是,本机模块内的任何函数调用只能从React本机本身内部发生,因为它需要一个React本机上下文,因此我只能在React本机本身调

    • 我们计划在开发新的移动应用程序时采用混合方法。我们在开发过程中的主要目标是: 在进行webUI更改时最小化应用商店提交和批准 在手机上实现指纹认证、条码扫描器和推送通知 如果可能,尽量减少其他团队的参与(我们需要一些特定的iOS,所以我们不必等待他们的计划) 现在,在我们移动团队的帮助下,我们仍在两种方法之间做出决定,这是我们迄今为止得到的结果: > 我们的移动团队创建了一个简单的本机包装应用程序

    • 问题内容: 混淆Java Web应用程序值得吗?为什么呢? 问题答案: 否。代码存储在服务器上,希望外部用户无法访问该服务器。如果您认为值得(最低限度)的IP保护,则可能希望混淆JavaScript。 最好的办法是确保服务器的安全性达到最高水平,并且您没有对应用程序目录的开放访问权限(无论如何都不应该发生)。

    • 本文向大家介绍Android应用开发之代码混淆,包括了Android应用开发之代码混淆的使用技巧和注意事项,需要的朋友参考一下 混淆器(ProGuard) 混淆器通过删除从未用过的代码和使用晦涩名字重命名类、字段和方法,对代码进行压缩,优化和混淆。结果是一个比較小的.apk文件,该文件比較难进行逆向project。因此,当你的应用程序对安全敏感(要求高),比如当你授权应用程序的时候,混淆器是一种重