如何将React Native“ index.android.bundle” js代码转换为二进制格式?

问题描述

我担心React Native的'index.android.bundle'文件。因为应用程序的整个源代码和核心逻辑秘密可能会在该“捆绑”文件中公开。

但是最近,我在其中一个APK文件中观察到二进制格式的“ index.android.bundle”。我想知道这怎么可能,他们使用什么样的技术。如果有人知道这种混淆技术,请分享您的想法。

React Native binary formatted script

解决方法

编辑:

看到您附加的屏幕截图。我想到的是开发人员可能加密了 index.android.bundle 文件。试图找到如何做到这一点,我想我找到了非常相似的系列/链接来做同样的事情。 虽然加密方法不是 100% 匹配/相似,但这是我得到的最好的结果(目前!)。

React Native Android App(1/2): Decompile

React Native Android App(2 of 2): Security

React Native Android App(Github): wooyeol


早期答案(基于 Hermes):

我猜这种混淆技术是/使用了“Hermes”,这是一个针对 React Native 优化的开源 JavaScript 引擎。 我发现,Hermes 可以帮助您将 JS 代码(已经使用 RN 变得丑陋)转换为字节码。

这样做的目的是提高应用程序的安装速度,因为应用程序的解析和编译阶段(主要发生在应用程序安装之后)已经在这里使用字节预编译完成。 但如前所述,这也有助于将 index.android.bundle 文件中的代码转换为 Bytecode,这似乎是问题所在。

到目前为止,我还没有尝试对这样的代码进行反混淆处理,所以我无法理解您看到的 Hermes 字节码和二进制格式是相同还是不同,但这里有一些链接,以证明我的回答是正确的,即可能是 Hermes 字节码。

Java - Is binary code the same as ByteCode?

In React Native 0.62,after building a signed apk,index.android.bundle is a binary file

React-native 0.61.2 with Hermes disassembling index.android.bundle

现在我无法为 RN 应用程序执行此操作,但您可以尝试在您的应用程序或演示应用程序上执行此操作(启用 Hermes 并生成并检查 index.android.bundle),看看它是否会生成与您所见的输出类型相同。

此外,您可以查看这些链接以获取有关 Hermes 和反编译的帮助。

Hermes- A New JavaScript Engine for React Native

Using Hermes - React Native Docs

Decompile React Native index.android.bundle

此外,此链接还讨论了如何在创建的 JS 包上添加加密。虽然是2015年的,但还是可以给你一个起点。

JS Code Protection : To do Encryption over it or not?


我对 React Native 和它的各个方面也比较陌生。另外,这是我第一次回答 SO 问题。所以希望它有所帮助。

附言阅读本文的人,如果我在某处的解释有误,请更正/编辑我,并附上一些相同的学习链接。另外,如果这个答案是直接命中,请给它一个批准的复选标记 ✅(或任何名称)!

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...