diff --git a/package.json b/package.json index b6bab00..7d5a5c9 100644 --- a/package.json +++ b/package.json @@ -52,12 +52,16 @@ "@webreflection/idb-map": "^0.3.1", "astravel": "^0.6.1", "astring": "^1.8.6", + "devtools-detector": "^2.0.20", "dom-serializer": "^2.0.0", "domhandler": "^5.0.3", "domutils": "^3.1.0", "htmlparser2": "^9.1.0", + "javascript-obfuscator": "^4.1.1", "meriyah": "^4.4.2", "parse-domain": "^8.0.2", - "set-cookie-parser": "^2.6.0" + "set-cookie-parser": "^2.6.0", + "uglifyjs-webpack-plugin": "^2.2.0", + "webpack-obfuscator": "^3.5.1" } } diff --git a/rspack.config.js b/rspack.config.js index e3f530e..844b8ba 100644 --- a/rspack.config.js +++ b/rspack.config.js @@ -1,8 +1,10 @@ import { defineConfig } from "@rspack/cli"; import { rspack } from "@rspack/core"; -// import { RsdoctorRspackPlugin } from "@rsdoctor/rspack-plugin"; +import { RsdoctorRspackPlugin } from "@rsdoctor/rspack-plugin"; import { join } from "path"; import { fileURLToPath } from "url"; +import obfuscator from "javascript-obfuscator"; +const { obfuscate } = obfuscator; const __dirname = fileURLToPath(new URL(".", import.meta.url)); @@ -14,7 +16,6 @@ export default defineConfig({ worker: join(__dirname, "src/worker/index.ts"), thread: join(__dirname, "src/thread/thread.ts"), client: join(__dirname, "src/client/index.ts"), - config: join(__dirname, "src/scramjet.config.ts"), codecs: join(__dirname, "src/codecs/index.ts"), controller: join(__dirname, "src/controller/index.ts"), }, @@ -51,6 +52,9 @@ export default defineConfig({ }, }, }, + optimization: { + minimize: process.env.OBFUSCATE === "true", + }, output: { filename: "scramjet.[name].js", path: join(__dirname, "dist"), @@ -63,12 +67,50 @@ export default defineConfig({ dbg: [join(__dirname, "src/log.ts"), "default"], Function: [join(__dirname, "src/snapshot.ts"), "Function"], }), + process.env.OBFUSCATE === "true" && { + apply(compiler) { + compiler.hooks.compilation.tap("GyatPlugin", (compilation) => { + compilation.hooks.processAssets.tap( + { + name: "GyatPlugin", + stage: compilation.PROCESS_ASSETS_STAGE_OPTIMIZE, + }, + (assets) => { + for (const asset in assets) { + // inject code + compilation.updateAsset(asset, (source) => { + return { + source: () => { + return obfuscate(source.source(), { + compact: true, + controlFlowFlattening: true, + controlFlowFlatteningThreshold: 1, + numbersToExpressions: true, + simplify: true, + deadCodeInjection: true, + selfDefending: true, + renameGlobals: true, + transformObjectKeys: true, + stringArrayShuffle: true, + splitStrings: true, + stringArrayThreshold: 1, + domainLock: ["localhost", process.env.DOMAIN], + }).getObfuscatedCode(); + }, + }; + }); + } + } + ); + }); + }, + }, // new RsdoctorRspackPlugin({ - // supports: { - // parseBundle: true, - // banner: true - // } - // }) + // supports: { + // parseBundle: true, + // banner: true, + // }, + // }), ], target: "webworker", }); diff --git a/src/drm.ts b/src/drm.ts deleted file mode 100644 index 07de2ec..0000000 --- a/src/drm.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { addListener, launch } from "devtools-detector"; - -function jail() { - setInterval(() => { - console.error("SCRAMJET ERROR"); - - debugger; - }, 0); -} - -addListener((open) => open && jail()); - -if (!["http://localhost:1337"].includes(window.location.origin)) { - jail(); -} - -launch();