gpt4 book ai didi

node.js - 如何反编译Bytenode "jsc"文件?

转载 作者:搜寻专家 更新时间:2023-11-01 00:13:44 57 4
gpt4 key购买 nike

我刚看过这个图书馆 ByteNode 它与 java 的 ByteCode 相同,但这是针对 NodeJS 的。

这个库将你的 JavaScript 代码编译成 V8 字节码,保护你的源代码,我想知道是否有反编译 byteNode 因此它不够安全。我想知道是因为我想使用这个库来保护我的源代码吗?

最佳答案

TL;DR 它会提高对复制代码并试图将其据为己有的人的阈值。它不会阻止专职人员这样做。但保护您的作品的主要方式不是技术性的,而是合法性的。


This library compiles your JavaScript code into V8 bytecode, which protect your source code...

嗯,我们不知道它是 V8 字节码,但它在某种意义上是“编译”的。我们所知道的是,它通过内置的 vm.Script.prototype.createCachedData API 创建了一个“代码缓存”,官方只是一个缓存,用于加速第二次、第三次等重新编译代码。理论上,您还应该将原始源代码作为字符串提供给 the vm.Script constructor 。但是如果你深入研究 Node.js 的 vm.Script 和 V8,它似乎是某种编译形式的实际代码(无论是否是实际的 V8 字节码),以及你给它的代码字符串运行时被忽略。 (当从代码缓存中运行代码时,ByteNode 库提供了一个虚拟字符串,所以很明显,实际代码并不 [总是?] 需要。)

I'm wondering is there anyway to Decompile byteNode therefore it's not secure enough.

当然了,不然也没用,Node.js跑不起来。我没有找到一个已经存在的工具来做到这一点,但由于 V8 是开源的,所以大概可以找到必要的信息来为它编写一个反编译器,输出有效的 JavaScript 源代码,然后有人可以尝试理解.

用它做实验,局部变量名似乎丢失了,尽管函数名没有。注释似乎丢失了(这可能不像看起来那么明显,因为需要 Function.prototype.toString 来返回原始源文本或合成版本 [details])。

因此,如果您通过缩小器(特别是重命名函数的缩小器)运行代码,然后通过 ByteNode 运行它(或者您自己使用 vm.Script 来运行它,ByteNode 是一个相当薄的包装器) ,有人将它反编译成类似源代码的东西可行,但源代码将很难理解。这与运送 Java 类文件非常相似,它可以被反编译(在 JDK 中甚至有一个标准工具可以做到这一点,javap),除了格式 Java 类文件有很好的文档记录并且不不要从一个点版本更改为下一个点版本(尽管它们可以从一个主要版本更改为另一个;新版本始终支持旧格式,尽管如此),而此数据的格式未记录(尽管它是一个开源项目)并且从一个点版本到下一个点版本可能会发生变化。

某些更改,例如更改版权信息,可能很容易对所述源代码进行。更有意义的改变会更难。

请注意,代码缓存似乎具有校验和或其他类似的完整性机制,因为直接编辑 .jsc 文件以将文字字符串中的一个字母换成另一个会使代码缓存无法加载.因此,有人篡改它(例如,更改版权声明)要么需要走反编译/重新编译路线,要么深入 V8 源代码以找出如何更正完整性检查。


从根本上说,保护您的作品的方法是确保您已将所有相关通知放在相关位置,以便清楚复制它是侵犯版权的事实,然后在您发现时寻求法律追索权关于有人冒充自己的东西。

关于node.js - 如何反编译Bytenode "jsc"文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57052153/

57 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com