我最近开发了一个带有electron框架的应用程序,在阅读了与电子javascript代码相关的安全问题之后,我现在开始担心源代码保护问题。
我的意思是,即使应用程序是为生产而构建的,代码的逆向工程也是可能的。我的应用程序包含了许多关键信息,比如GitHub Private Token for AutoUpdate等等。
我只是经历了很多这样的帖子,但没有找到完美的答案,所以解决了问题。电子不可能混淆javascript代码或源代码保护?然而,混淆并不能完全保护代码,但它会使逆向工程变得复杂。如果有解决办法,请告诉我。在与安全有关的电子邮件中,我没有发现比tl;dr更多的东西。
我通过混淆器找到了一种混淆方法,但是它似乎需要人工混淆,并且没有什么像NW.js中那样的源代码保护,有什么更好的方法来实现它吗?
我在中型员额上发现了一些有助于混淆的东西。但没有找到任何关于源头保护的信息。
发布于 2019-09-26 05:24:58
你可以,这是不值得的努力。只要把你的源代码打包到一个
asar文件中,它就能让大多数人远离它。 长芒:
asar选项。否则,您的文件就是脚本,所有这些步骤只会减慢攻击者的速度(许多防御策略),但它们不会阻止攻击者访问它们。devTools非常容易打开,人们将能够以某种方式、形状或形式读取代码。如果有人得到了你的模糊代码,就很容易重建正在发生的事情(参见这里的参考:https://www.youtube.com/watch?v=y6Uzinz3DRU)
如果您想保护自己不受代码操作的影响,那么有更好的方法可以做到这一点。像散列,上下文隔离等电子有一个完整的一章的问题。
https://github.com/electron/electron/blob/master/docs/tutorial/security.md
发布于 2019-12-11 10:51:40
有一个名为bytenode的库,它允许您将Javascript文件转换为二进制文件,这样就没有人能够读取它。
https://www.npmjs.com/package/bytenode
首先,在服务器和文件夹中安装bytenode:
>npm i -g bytenode
>npm i bytenode创建一个普通的nodeJS文件,其中包含以下代码。让我们假设我们命名如下代码: ok.js
console.log('bytenode works');然后,编译您的javascript代码。该命令将创建一个与您的文件同名的.JSC文件。
user@machine:~$ bytenode -c ok.js然后,在一个主JS文件中,您将调用您的二进制文件,让我们将其称为test.js:
const bytenode = require('bytenode');
const myFile=require('./ok.jsc');
myFile;省省吧。
然后,您将调用test.js: node test.js来测试它。做一个"cat ok.jsc“,看看它真的是一个二进制文件,并且没有人看不见您的代码。您可以将原始的普通测试js文件移动到另一个位置。
发布于 2021-08-09 10:38:43
正如前面提到的,你可以使用字节码,这是尼古拉斯·盖里内的答案。
但是,由bytenode CLI生成的二进制文件在尝试在电子项目中使用它时会给出运行时错误。该错误将说明如下:
"Invalid or incompatible cached data (cachedDataRejected)"要使二进制与电子一起工作,它必须由电子本身产生。
下面是如何让它发挥作用的方法:
假设您想在一个典型的电子项目中保护main.js。
安装字节码
npm i bytenode将main.js重命名为其他东西,temp.js说。
使用以下代码创建一个新的main.js:
const { app, BrowserWindow } = require('electron')
function createWindow() {
// Create the browser window.
mainWindow = new BrowserWindow({
width: 400,
height: 200
})
//use bytenode to convert js files to jsc
const bytenode = require("bytenode");
let compiledFilename = bytenode.compileFile({
filename: './temp.js',
output: './main.jsc'
});
//convert other Node.js files as required
}
app.whenReady().then(() => {
createWindow()
})现在运行您的电子项目。当空白窗口出现时,查看您的项目目录,您将找到main.jsc文件。
将main.js更改为以下三行代码:
const bytenode = require('bytenode');
const myFile = require('./main.jsc');
myFile;从项目中删除nodejs源文件(temp.js)并构建项目。
在将代码转换为jsc之前,您还可以细化和混淆代码。
由于https://github.com/mapleby在https://github.com/bytenode/bytenode/issues/63的帖子,他获得了学分。我调整了他的想法,使其发挥作用。
这将使人更难反向工程您的代码,但这仍然是可能的。
https://stackoverflow.com/questions/58103656
复制相似问题