【发布时间】:2018-02-25 21:20:57
【问题描述】:
我从blog看到jxcore可以创建基于js代码的可执行文件(作为命令行应用程序运行)并保护源代码不被轻易看到。
但是当我尝试以下操作时,我看到可执行文件(在 Ubuntu 中)仍然包含源代码
# jx package test1.js
# change library and extract attribute in file test1.jxp to be false
# jx compile test1.jxp
# grep "this is test1" test1
Binary file test1 matches
小JS文件test1.js
console.log("this is test1");
我知道没有完美的方法可以保护应用程序不被逆转。但我只是希望没有简单的方法(如“字符串”命令)从可执行文件中获取源代码。
【问题讨论】:
-
看看你能不能用 grep 搜索
console.log。如果不是,则字符串的编码方式与在二进制文件中的编码方式相同,并且实际代码仍处于隐藏状态。 -
如果是这种情况并且隐藏字符串对您来说真的很重要,您可以尝试对它们进行编码,即:
var test1 = atob('this is test1') -
@jdgregson 您的
atob()示例不起作用。一方面,源字符串仍然可能出现在二进制文件中。此外,atob()仅适用于 Base64 数据。例如,btoa(atob('hello world')) == 'helloworlQ=='。 -
@duskwuff 这或多或少是一个例子,可以使用任何其他编码方法。但是,如果源字符串的编码版本是 ASCII 可表示的,则源字符串并不总是必须在文件中。例如,您可以使用二进制并说
var test1 = '01110100 01100101 01110011 01110100';,然后只需调用console.log(decode(test1));(其中decode是您自己的专用解码器)。 -
不错的尝试@jdgregson :-) 就像@duskwuff 指出的那样,无论您的js 源代码可以很容易地提取(通过
strings之类的东西) :-) 但是您对使用专用解码器的建议是确实很有趣。愿意举个例子吗?
标签: javascript jxcore