首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在电子js中实现源代码混淆和源保护

如何在电子js中实现源代码混淆和源保护
EN

Stack Overflow用户
提问于 2019-09-25 17:25:36
回答 4查看 19.8K关注 0票数 12

我最近开发了一个带有electron框架的应用程序,在阅读了与电子javascript代码相关的安全问题之后,我现在开始担心源代码保护问题。

我的意思是,即使应用程序是为生产而构建的,代码的逆向工程也是可能的。我的应用程序包含了许多关键信息,比如GitHub Private Token for AutoUpdate等等。

我只是经历了很多这样的帖子,但没有找到完美的答案,所以解决了问题。电子不可能混淆javascript代码或源代码保护?然而,混淆并不能完全保护代码,但它会使逆向工程变得复杂。如果有解决办法,请告诉我。在与安全有关的电子邮件中,我没有发现比tl;dr更多的东西。

我通过混淆器找到了一种混淆方法,但是它似乎需要人工混淆,并且没有什么像NW.js中那样的源代码保护,有什么更好的方法来实现它吗?

我在中型员额上发现了一些有助于混淆的东西。但没有找到任何关于源头保护的信息。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-09-26 05:24:58

你可以,这是不值得的努力。只要把你的源代码打包到一个asar文件中,它就能让大多数人远离它。 长芒:

  • 在构建应用程序时使用asar选项。
  • 混淆代码中的一个字形符号。
  • 使用WASM
  • 语言绑定以从编译后的格式获取数据
    • 生锈新生儿
    • 用于C#的edge-js
    • N-API,用于C/C++的NAN

否则,您的文件就是脚本,所有这些步骤只会减慢攻击者的速度(许多防御策略),但它们不会阻止攻击者访问它们。devTools非常容易打开,人们将能够以某种方式、形状或形式读取代码。如果有人得到了你的模糊代码,就很容易重建正在发生的事情(参见这里的参考:https://www.youtube.com/watch?v=y6Uzinz3DRU)

如果您想保护自己不受代码操作的影响,那么有更好的方法可以做到这一点。像散列,上下文隔离等电子有一个完整的一章的问题。

https://github.com/electron/electron/blob/master/docs/tutorial/security.md

票数 12
EN

Stack Overflow用户

发布于 2019-12-11 10:51:40

有一个名为bytenode的库,它允许您将Javascript文件转换为二进制文件,这样就没有人能够读取它。

https://www.npmjs.com/package/bytenode

首先,在服务器和文件夹中安装bytenode:

代码语言:javascript
复制
>npm i -g bytenode
>npm i bytenode

创建一个普通的nodeJS文件,其中包含以下代码。让我们假设我们命名如下代码: ok.js

代码语言:javascript
复制
console.log('bytenode works');

然后,编译您的javascript代码。该命令将创建一个与您的文件同名的.JSC文件。

代码语言:javascript
复制
user@machine:~$ bytenode -c ok.js

然后,在一个主JS文件中,您将调用您的二进制文件,让我们将其称为test.js:

代码语言:javascript
复制
const bytenode = require('bytenode'); 
const myFile=require('./ok.jsc'); 
myFile;

省省吧。

然后,您将调用test.js: node test.js来测试它。做一个"cat ok.jsc“,看看它真的是一个二进制文件,并且没有人看不见您的代码。您可以将原始的普通测试js文件移动到另一个位置。

票数 12
EN

Stack Overflow用户

发布于 2021-08-09 10:38:43

正如前面提到的,你可以使用字节码,这是尼古拉斯·盖里内的答案。

但是,由bytenode CLI生成的二进制文件在尝试在电子项目中使用它时会给出运行时错误。该错误将说明如下:

代码语言:javascript
复制
"Invalid or incompatible cached data (cachedDataRejected)"

要使二进制与电子一起工作,它必须由电子本身产生。

下面是如何让它发挥作用的方法:

假设您想在一个典型的电子项目中保护main.js。

安装字节码

代码语言:javascript
复制
npm i bytenode

将main.js重命名为其他东西,temp.js说。

使用以下代码创建一个新的main.js:

代码语言:javascript
复制
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更改为以下三行代码:

代码语言:javascript
复制
const bytenode = require('bytenode'); 
const myFile = require('./main.jsc'); 
myFile;

从项目中删除nodejs源文件(temp.js)并构建项目。

在将代码转换为jsc之前,您还可以细化和混淆代码。

由于https://github.com/maplebyhttps://github.com/bytenode/bytenode/issues/63的帖子,他获得了学分。我调整了他的想法,使其发挥作用。

这将使人更难反向工程您的代码,但这仍然是可能的。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58103656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档