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

How to convert React Native "index.android.bundle" js code as binary format?

我害怕 React Native 'index.android.bundle' 文件。因为应用程序的整个源代码和核心逻辑秘密可能会暴露在那个 'bundle' 文件中。

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

React Native binary formatted script

编辑:

看到你附上的截图。我想到的是开发人员可能加密了 index.android.bundle 文件。试图找到如何做到这一点,我想我发现非常相似 series/links 来做同样的事情。 虽然加密方法没有 match/resemble 100%,但这是我得到的最好的照片(目前!)。

React Native Android App(1/2): Decompile

React Native Android App(2 of 2): Security

React Native Android App(Github): wooyeol


较早的答案(基于爱马仕):

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

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

目前我还没有尝试去混淆这样的代码,所以我无法理解你看到的 Hermes Bytecode 和 Binary Format 是相同还是不同,但是这里有一些 links那,为了证明我的回答是正确的,即它可能是爱马仕字节码。

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),看看是否可行生成与您所见相同类型的输出。

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

Hermes- A New JavaScript Engine for React Native

Using Hermes - React Native Docs

Decompile React Native index.android.bundle

此外,这个 link 讨论了如何在创建的 JS 包上添加加密 should/shouldn。虽然是2015年的,但还是可以给大家一个起点。

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


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

P.S。如果我在某处的解释有误,请 correct/edit 告诉我,以及一些学习 links 的内容。另外,如果这个答案是直接命中,请给它一个批准的复选标记 ✅(或任何名称)!