From 82072677d09bd0008c9572bbdc0569d604892231 Mon Sep 17 00:00:00 2001 From: zhangzhixiong <751069244@qq.com> Date: Wed, 10 Aug 2022 10:16:19 +0800 Subject: [PATCH] feat: support encrypt `preload.js` --- playground/electron-builder.json | 2 +- playground/main.js | 5 +++++ playground/preload.js | 11 +++++++++++ src/index.ts | 14 +++++++++++++- 4 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 playground/preload.js diff --git a/playground/electron-builder.json b/playground/electron-builder.json index fbd6d75..9cf61ea 100644 --- a/playground/electron-builder.json +++ b/playground/electron-builder.json @@ -4,7 +4,7 @@ "directories": { "output": "release/${version}" }, - "files": ["main.js", "renderer"], + "files": ["main.js", "preload.js", "renderer"], "mac": { "artifactName": "${productName}_${version}.${ext}", "target": ["dmg"] diff --git a/playground/main.js b/playground/main.js index 657c0c1..eb6868c 100644 --- a/playground/main.js +++ b/playground/main.js @@ -1,9 +1,14 @@ +const path = require('path') const { app, BrowserWindow } = require('electron') function createWindow() { const mainWindow = new BrowserWindow({ width: 800, height: 600, + webPreferences: { + sandbox: false, + preload: path.join(__dirname, 'preload.js'), + }, }) if (!app.isPackaged) { diff --git a/playground/preload.js b/playground/preload.js new file mode 100644 index 0000000..2939943 --- /dev/null +++ b/playground/preload.js @@ -0,0 +1,11 @@ +window.addEventListener('DOMContentLoaded', () => { + const el = document.createElement('p') + el.innerHTML = 'preload.js is encrypted' + document.body.append(el) + + for (const type of ['chrome', 'node', 'electron']) { + const el = document.createElement('p') + el.innerHTML = `${type}-version: ${process.versions[type]}` + document.body.append(el) + } +}) diff --git a/src/index.ts b/src/index.ts index 0fb4f1c..8103e85 100644 --- a/src/index.ts +++ b/src/index.ts @@ -46,6 +46,18 @@ exports.default = async function (context: AfterPackContext) { 'utf-8' ) + // 将renderer preload.js加密 + const rendererPreloadJsPath = path.join(mainDir, 'preload.js') + if (fs.existsSync(rendererPreloadJsPath)) { + const rendererPreloadJsCPath = path.join(mainDir, 'preload-c.jsc') + await compileToBytenode(rendererPreloadJsPath, rendererPreloadJsCPath) + await fs.promises.writeFile( + rendererPreloadJsPath, + `"use strict";require('bytenode');require('v8').setFlagsFromString('--no-lazy');require('./preload-c.jsc');`, + 'utf-8' + ) + } + const rendererDir = path.join(mainDir, 'renderer') // 加密渲染进程 @@ -64,7 +76,7 @@ exports.default = async function (context: AfterPackContext) { 'utf-8' ) - await fs.promises.rm(tempAppDir, { recursive: true }) + // await fs.promises.rm(tempAppDir, { recursive: true }) } /**