electron源码保护

news2024/11/21 1:25:40

electron 程序发布后,如果未对程序做保护,则极容易受到破坏,比如被轻松破解密码,或者被修改程序,所以必须对程序做一些安全防护。虽然没有100%的安全防护,但是提升破解难度,直至破解代价超出了范围,还是能起到作用的。

注:以下列举了一些措施,可以根据情况选择,也可以组合使用

注:以下一些方式,借鉴了网上一些博主的片段,由于浏览太多网页,记不住原作者了,在此请原谅,并感谢!

一,敏感信息加密

比如账号密码,如果存储在本地文件中,密码需要加密存储

二,代码混淆

代码混淆只是加深破解难度,但是防护系数并非很高,源码中的一些常量或某些函数名,可能不会被混淆。对于破解者还是有办法找到关键代码,进行破坏。

代码混淆库有很多,这里以webpack-obfuscator为例:

1,安装

npm install webpack-obfuscator --save-dev
npm install javascript-obfuscator --save-dev

2,配置

const WebpackObfuscator = require('webpack-obfuscator')
webpack.config({
plugins:[
     new WebpackObfuscator({
       compact: true,
       controlFlowFlattening: false,
       deadCodeInjection: false, /// 随机的死代码块(增加了混淆代码的大小)
       debugProtection: false, // 此选项几乎不可能使用开发者工具的控制台选项卡
       debugProtectionInterval: false, // 如果选中,则会在“控制台”选项卡上使用间隔强制调试模式,从而更难使用“开发人员工具”的其他功能。
       disableConsoleOutput: true, // 通过用空函数替换它们来禁用console.log,console.info,console.error和console.warn。这使得调试器的使用更加困难。
       identifierNamesGenerator: 'hexadecimal', // 标识符的混淆方式 hexadecimal(十六进制) mangled(短标识符)
       log: false,
       renameGlobals: false, // 是否启用全局变量和函数名称的混淆
       rotateStringArray: true, // 通过固定和随机(在代码混淆时生成)的位置移动数组。这使得将删除的字符串的顺序与其原始位置相匹配变得更加困难。如果原始源代码不小,建议使用此选项,因为辅助函数可以引起注意。
       selfDefending: true, // 混淆后的代码,不能使用代码美化,同时需要配置 cpmpat:true;
       stringArray: true, // 删除字符串文字并将它们放在一个特殊的数组中
       stringArrayEncoding: ['base64'],
       stringArrayThreshold: 0.75,
       unicodeEscapeSequence: false// 允许启用/禁用字符串转换为unicode转义序列。Unicode转义序列大大增加了代码大小,并且可以轻松地将字符串恢复为原始视图。建议仅对小型源代码启用此选项。
     }, []),
]
})

三,asar文件防解压

对于electron程序,一般来说,如果攻击者想做一些破坏,那么他可能会通过修改源码的方式来进行,而electron程序打包的格式一般就是asar文件,这是一种归档文件,可以较容易解压,然后重新打包。基于这种思路,防护方式就是破坏asar归档文件内容,比如修改文件偏移值,或者加入一些不存在的文件来使asar文件本身无法被解压。

1,安装

npm install --save-dev asarmor

注:如果本地安装有冲突,可以全局安装后使用

2,使用

此模块需在electron asar文件生成后使用,可以在electron-builder的afterSign钩子里使用

2.1 创建脚本文件

 const asarmor = require('asarmor')

 exports.default = async ({ appOutDir, packager }) => {
     try {
         const asarPath = path.join(packager.getResourcesDir(appOutDir), 'app.asar')
         const archive = await asarmor.open(asarPath)
         archive.patch()
         archive.patch(asarmor.createBloatPatch(1314))
         console.log(`applying asarmor patches to ${asarPath}`)
         await archive.write(asarPath);
     } catch (error) {
         console.error(error)
     }
 }

2.2 注册到钩子

四,字节码

此方式是破解难度最高的方式,即便asar文件被解压,或者通过devtool进入了调试模式,看到的仅仅只是字节码,因此大大提升了破解难度。

1,安装

npm install electron-bytenode-webpack-plugin --save-dev

2,配置

const BytenodeWebpackPlugin = require('electron-bytenode-webpack-plugin')
webpack.config = ({
plugins:[
    new BytenodeWebpackPlugin({
      compileAsModule: false,
      keepSource: true
    })
]
})

3,应用

先编译,再打包。通过node .electron-vue/build.js编译后,将原有的入口函数内容替换为bytenode加载字节码:

'use strict';

const fs = require('fs');
const path = require('path');
const v8 = require('v8');

v8.setFlagsFromString('--no-lazy');

const pathName = path.join(__dirname, '../dist/electron/index_bundle.js');

try {
  (async function () {
    try {
      // 将原来的js文件里面的内容替换成下面的内容
      fs.writeFileSync(pathName, 'require("bytenode");require("./index_bundle.jsc");', 'utf8');
    } catch (e) {
      console.error(`run_bytenode_err: ${e}`);
    }
  }());
} catch (e) {
  console.error(`run_bytenode_err: ${e}`);
}

然后再用electron-builder打包。(可以自行编写一行命令的scripts)

注:由于使用了bytenode加载字节码源码,所以打包时,必须把bytenode也一并打包

注:以上方式是由于本人项目框架的一些原因,导致用了这些步骤,现在网上已经有集成好的框架,不用这样自己搞些步骤

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/491593.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UML图中的domain model,object model,system sequence diagram以及interaction diagram

UML图(Unified Modeling Language,统一建模语言)是一种用于描述、可视化、构建和记录软件系统的标准化建模语言。在UML中,有很多类型的图,其中包括领域模型(Domain Model)、对象模型&#xff08…

拥抱智能时代:初探RFID系统

在数字化时代,人们越来越追求高效率和高质量的体验,以获得更快乐、更好的生活。RFID系统作为一项智能化管理技术,正越来越广泛地应用于各个领域,以提高效率和质量。本文将介绍RFID系统的基本概念、工作原理和实际应用案例&#xf…

OpenAI的编程语言和框架,给程序员带来了帮助有哪些

OpenAI 是一个人工智能开发公司,成立于2015年,总部位于美国旧金山。这家公司致力于研究和开发先进的人工智能技术,旨在将这些技术应用到解决全球一些最棘手的问题上。 OpenAI 以其卓越的技术和实验室出品的 groundbreaking AI papers 而闻名…

Android焦点流程梳理

作者:Cy13er 前言 最近在看一些焦点处理的问题,认真处理起来发现不跟着源码自己走一遍焦点相关的流程,对于问题的分析上会比较困难。所以本文主要对焦点流程进行一次梳理,在处理类似问题时也可以作为手册阅读。 起源 一切都要从…

Apache Kafka 进阶(一)

官网 Apache Kafka是一个开源的分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用。 核心能力 高吞吐量 在网络有限的吞吐量下,使用延迟低至2ms的机器集群交付消息。可扩展性 将生产集群扩展到1000个代理&#xff0c…

SQLite安装配置

1.什么是 SQLite? SQLite是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite是一个增长最快的数据库引擎,这是在普及方面的增长,与它的尺寸大小无关。SQLite源代码不受版权限制。 SQLite是…

Linux 五种网络IO模式(阻塞IO、非阻塞IO、IO多路复用、信号驱动IO、异步IO)

Linux网络编程中,有五种网络IO模式,分别是阻塞IO、非阻塞IO、IO多路复用、信号驱动IO、异步IO; 虽然说不能全都认识得很透彻,但至少得都知道一点! 开始之前,先了解以下同步IO和异步IO; 1. 同步…

探索AIGC创新实践,亚马逊云科技与全球咨询合作伙伴携手同行

AIGC(AI Generated Content,人工智能生成内容),已经成为全球出圈的科技热点。各行各业都在重新审视和思考AIGC的创新价值、未来趋势和成功实践,力争在这波热潮下寻找更多创新的可能性,重塑行业格局。 在AIGC领域,亚马…

无代码资讯|ChatGPT新功能曝光;Mendix与亚马逊云科技底层融合;无代码开发平台Appy Pie推出内置AI

栏目导读:无代码资讯栏目从全球视角出发,带您了解无代码相关最新资讯。 Top3大事件 1、ChatGPT 新功能曝光,GPT-4 迎来 AGI 历史性时刻! 北美时间4月20日,Open AI联合创始人Greg Brockman受邀出席 “2023TED” 大会&…

手写【深拷贝】

JS中深拷贝的实现 JSON.parse(JSON.stringify())递归实现深拷贝 使用JSON.parse(JSON.stringify()) 实现 无法拷贝 函数、正则、时间格式、原型上的属性和方法等 递归实现深拷贝 es5实现深拷贝 源对象 const obj {name: 张桑,age: 18,hobby: [{name: 篮球,year: 5,loveSta…

极简爬虫通用模板

网络爬虫的一般步骤如下: 1、确定爬取目标:确定需要爬取的数据类型和来源网站。 2、制定爬取策略:确定爬取哪些网页、如何爬取和频率等。 3、构建爬虫程序:使用编程语言(如Python)实现爬虫程序&#xff…

【python】列表、字典、元组与集合的特点以及对比

一、列表(List) 1. 列表的特点 数据按顺序存储列表有正序、倒序两种索引列表可存储任意类型的数据,并且允许重复。 2. 列表的遍历: lst[1,2,3] for i in range(len(lst)):print(lst[i],end" ")3. 列表的缺点&#x…

虹科方案 | HK-TrueNAS:音频协作的理想存储

一、虹科HK-TRUENAS 非常适合 AVID PRO TOOLS™ 专业音频编辑和大多数媒体和娱乐 (M&E) 工作流程从录制开始,经过后期制作,最后进入播放。这一过程可能需要几个月的时间来拍摄一部大型的电影,也可能需要几个小时甚至几分钟的时间来播放最…

Java电子招投标采购系统源码-适合于招标代理、政府采购、企业采购、工程交易等业务的企业

招投标管理系统-适合于招标代理、政府采购、企业采购、工程交易等业务的企业 招投标管理系统是一个用于内部业务项目管理的应用平台。以项目为主线,从项目立项,资格预审,标书编制审核,招标公告,项目开标,项…

使用篇丨链路追踪(Tracing)很简单:链路拓扑

作者:涯海 最近一年,小玉所在的业务部门发起了轰轰烈烈的微服务化运动,大量业务中台应用被拆分成更细粒度的微服务应用。为了迎接即将到来的双十一大促重保活动,小玉的主管让她在一周内梳理出订单中心的全局关键上下游依赖&#…

反射~~~

文章目录 反射反射获取Class类对象反射获取构造器对象反射获取成员变量对象反射获取方法对象反射的作用绕过编译阶段为集合添加数据通用框架的底层原理 反射 反射获取Class类对象 getClass()方法为Object类中的成员方法 反射获取构造器对象 parametTypes为参数的类对象 获得类的…

智安网络|网络安全威胁越来越多,教你如何全方面应对

随着互联网的普及和发展,各大网站已经成为人们获取信息和交流的主要平台。然而,随着网络攻击和恶意软件的威胁不断增加,网站经常成为攻击者的目标。因此,在建立和维护网站系统时,必须采取强大的安全措施。 一、网站系…

阅读有感重庆rcgl

1.json转为对应的泛型集合 List<String> resourceList JSON.parseArray(JSON.toJSONString(obj), String.class); 2.集合转换为数组 String[] roles (String[])resourceList.toArray(new String[0]); 3.json转换为对应的javabean SLoginRule loginRule (SLoginRul…

【Web项目实战】从零开始学习Web自动化测试:用Python和Selenium实现网站登录功能

B站首推&#xff01;2023最详细自动化测试合集&#xff0c;小白皆可掌握&#xff0c;让测试变得简单、快捷、可靠https://www.bilibili.com/video/BV1ua4y1V7Db 目录 1.环境搭建 2.编写测试用例 3.运行测试用例 3.1 命令行方式 3.2 集成到CI/CD流程中 4.结论 Web自动化测…

Windows安装配置Tomcat服务器教程 ——外网远程访问

文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 转载自cpolar文章&#xff1a;外网访问本地Tomcat服务器【cpolar内网穿透】…