obscura-js 0.3.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -29
- package/dist/bin/obscura_cli.d.ts +3 -0
- package/dist/bin/obscura_cli.d.ts.map +1 -0
- package/dist/bin/obscura_cli.js +158 -0
- package/dist/bin/obscura_cli.js.map +1 -0
- package/dist/src/index.d.ts +3 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/types.d.ts +1 -1
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +4 -4
- package/dist/bin/haze.d.ts +0 -3
- package/dist/bin/haze.d.ts.map +0 -1
- package/dist/bin/haze.js +0 -56
- package/dist/bin/haze.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Obscura.js
|
|
2
|
+
|
|
3
|
+
<img width="2492" height="1266" alt="obscura" src="https://github.com/user-attachments/assets/02d32a27-4503-4c72-94d6-b30c205e422b" />
|
|
4
|
+
|
|
5
|
+
---
|
|
2
6
|
|
|
3
7
|
A JavaScript code protection library inspired by the obfuscation and anti-debugging techniques used in Google reCAPTCHA.
|
|
4
8
|
|
|
@@ -19,14 +23,6 @@ A JavaScript code protection library inspired by the obfuscation and anti-debugg
|
|
|
19
23
|
| Anti-debug | `nativeBinding` | Pre-bind native methods to defend against prototype pollution |
|
|
20
24
|
| Anti-debug | `integrityTag` | Attach Symbol-based integrity tags to detect object cloning/replace |
|
|
21
25
|
|
|
22
|
-
## Getting Started
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
npm install
|
|
26
|
-
npm run build
|
|
27
|
-
npm test
|
|
28
|
-
```
|
|
29
|
-
|
|
30
26
|
## Installation
|
|
31
27
|
|
|
32
28
|
```bash
|
|
@@ -35,22 +31,6 @@ npm install obscura-js
|
|
|
35
31
|
|
|
36
32
|
## Quick Start
|
|
37
33
|
|
|
38
|
-
### API
|
|
39
|
-
|
|
40
|
-
```typescript
|
|
41
|
-
import { protect } from "obscura-js";
|
|
42
|
-
import { readFileSync } from "fs";
|
|
43
|
-
|
|
44
|
-
const source = readFileSync("app.js", "utf-8");
|
|
45
|
-
|
|
46
|
-
const { code, appliedPasses } = protect(source);
|
|
47
|
-
// All 8 passes are enabled by default
|
|
48
|
-
|
|
49
|
-
console.log(appliedPasses);
|
|
50
|
-
// ['sequenceExpression', 'mba', 'functionTable', 'stringPool',
|
|
51
|
-
// 'controlFlowFlattening', 'deadCode', 'nativeBinding', 'integrityTag']
|
|
52
|
-
```
|
|
53
|
-
|
|
54
34
|
### CLI
|
|
55
35
|
|
|
56
36
|
```bash
|
|
@@ -67,6 +47,22 @@ npx obscura-js protect app.js --minify
|
|
|
67
47
|
npx obscura-js protect app.js --keep-comments
|
|
68
48
|
```
|
|
69
49
|
|
|
50
|
+
### API
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
import { protect } from "obscura-js";
|
|
54
|
+
import { readFileSync } from "fs";
|
|
55
|
+
|
|
56
|
+
const source = readFileSync("app.js", "utf-8");
|
|
57
|
+
|
|
58
|
+
const { code, appliedPasses } = protect(source);
|
|
59
|
+
// All 8 passes are enabled by default
|
|
60
|
+
|
|
61
|
+
console.log(appliedPasses);
|
|
62
|
+
// ['sequenceExpression', 'mba', 'functionTable', 'stringPool',
|
|
63
|
+
// 'controlFlowFlattening', 'deadCode', 'nativeBinding', 'integrityTag']
|
|
64
|
+
```
|
|
65
|
+
|
|
70
66
|
## API Reference
|
|
71
67
|
|
|
72
68
|
### `protect(source, options?)`
|
|
@@ -74,7 +70,7 @@ npx obscura-js protect app.js --keep-comments
|
|
|
74
70
|
| Parameter | Type | Description |
|
|
75
71
|
| --------- | ------------- | --------------------------------- |
|
|
76
72
|
| `source` | `string` | JavaScript source code to protect |
|
|
77
|
-
| `options` | `
|
|
73
|
+
| `options` | `ObscuraOptions` | Optional configuration |
|
|
78
74
|
|
|
79
75
|
Returns `ProtectResult`:
|
|
80
76
|
|
|
@@ -85,10 +81,10 @@ interface ProtectResult {
|
|
|
85
81
|
}
|
|
86
82
|
```
|
|
87
83
|
|
|
88
|
-
### `
|
|
84
|
+
### `ObscuraOptions`
|
|
89
85
|
|
|
90
86
|
```typescript
|
|
91
|
-
interface
|
|
87
|
+
interface ObscuraOptions {
|
|
92
88
|
obfuscation?: {
|
|
93
89
|
sequenceExpression?: { probability?: number } | false;
|
|
94
90
|
mba?: { rounds?: number } | false;
|
|
@@ -102,7 +98,7 @@ interface HazeOptions {
|
|
|
102
98
|
integrityTag?: { tagDescription?: string } | false;
|
|
103
99
|
};
|
|
104
100
|
minify?: boolean; // Default: false
|
|
105
|
-
stripComments?: boolean; // Default: true
|
|
101
|
+
stripComments?: boolean; // Default: true
|
|
106
102
|
}
|
|
107
103
|
```
|
|
108
104
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obscura_cli.d.ts","sourceRoot":"","sources":["../../bin/obscura_cli.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const commander_1 = require("commander");
|
|
7
|
+
const index_1 = require("../src/index");
|
|
8
|
+
// ── ANSI helpers ─────────────────────────────────────────────────────────────
|
|
9
|
+
// Respect NO_COLOR (https://no-color.org) and FORCE_COLOR env vars.
|
|
10
|
+
const hasColor = (() => {
|
|
11
|
+
if (process.env.NO_COLOR !== undefined)
|
|
12
|
+
return false;
|
|
13
|
+
if (process.env.FORCE_COLOR !== undefined)
|
|
14
|
+
return true;
|
|
15
|
+
return process.stdout.isTTY ?? false;
|
|
16
|
+
})();
|
|
17
|
+
// Unicode box-drawing / symbols need a UTF-8 capable terminal.
|
|
18
|
+
// On Windows, check for modern terminals: Windows Terminal (WT_SESSION),
|
|
19
|
+
// VS Code / other terminal emulators (TERM_PROGRAM), or ConEmu (CONEMUANSI).
|
|
20
|
+
const hasUnicode = (() => {
|
|
21
|
+
if (process.platform !== "win32")
|
|
22
|
+
return true;
|
|
23
|
+
return !!(process.env.WT_SESSION ||
|
|
24
|
+
process.env.TERM_PROGRAM ||
|
|
25
|
+
process.env.CONEMUANSI ||
|
|
26
|
+
process.env.COLORTERM);
|
|
27
|
+
})();
|
|
28
|
+
const c = {
|
|
29
|
+
reset: hasColor ? "\x1b[0m" : "",
|
|
30
|
+
bold: hasColor ? "\x1b[1m" : "",
|
|
31
|
+
dim: hasColor ? "\x1b[2m" : "",
|
|
32
|
+
green: hasColor ? "\x1b[32m" : "",
|
|
33
|
+
cyan: hasColor ? "\x1b[36m" : "",
|
|
34
|
+
yellow: hasColor ? "\x1b[33m" : "",
|
|
35
|
+
gray: hasColor ? "\x1b[90m" : "",
|
|
36
|
+
red: hasColor ? "\x1b[31m" : "",
|
|
37
|
+
white: hasColor ? "\x1b[97m" : "",
|
|
38
|
+
};
|
|
39
|
+
const sym = {
|
|
40
|
+
diamond: hasUnicode ? "\u25C6" : "*",
|
|
41
|
+
check: hasUnicode ? "\u2713" : "+",
|
|
42
|
+
cross: hasUnicode ? "\u2717" : "x",
|
|
43
|
+
done: hasUnicode ? "\u2714" : "*",
|
|
44
|
+
line: hasUnicode ? "\u2500" : "-",
|
|
45
|
+
};
|
|
46
|
+
function formatBytes(n) {
|
|
47
|
+
if (n < 1024)
|
|
48
|
+
return `${n} B`;
|
|
49
|
+
if (n < 1048576)
|
|
50
|
+
return `${(n / 1024).toFixed(1)} KB`;
|
|
51
|
+
return `${(n / 1048576).toFixed(2)} MB`;
|
|
52
|
+
}
|
|
53
|
+
function pad(s, w) {
|
|
54
|
+
return s + " ".repeat(Math.max(0, w - s.length));
|
|
55
|
+
}
|
|
56
|
+
// ── CLI definition ────────────────────────────────────────────────────────────
|
|
57
|
+
const program = new commander_1.Command();
|
|
58
|
+
program
|
|
59
|
+
.name("obscura-js")
|
|
60
|
+
.description("JavaScript code protection tool — obfuscation & anti-debugging")
|
|
61
|
+
.version("1.0.0");
|
|
62
|
+
program
|
|
63
|
+
.command("protect <input>")
|
|
64
|
+
.description("Protect a JavaScript file")
|
|
65
|
+
.option("-o, --output <file>", "Output file (default: <input>.obscura.js)")
|
|
66
|
+
.option("--no-seq", "Disable sequence expression pass")
|
|
67
|
+
.option("--no-mba", "Disable mixed boolean arithmetic pass")
|
|
68
|
+
.option("--no-ft", "Disable indirect function table pass")
|
|
69
|
+
.option("--no-sp", "Disable encrypted string pool pass")
|
|
70
|
+
.option("--no-cff", "Disable control flow flattening pass")
|
|
71
|
+
.option("--no-dead", "Disable dead code injection pass")
|
|
72
|
+
.option("--no-native", "Disable native method binding pass")
|
|
73
|
+
.option("--no-tag", "Disable symbol integrity tag pass")
|
|
74
|
+
.option("--sp-seed <number>", "Seed for the string pool XOR cipher", parseInt)
|
|
75
|
+
.option("--minify", "Minify output (compact whitespace, shorten literals)")
|
|
76
|
+
.option("--keep-comments", "Preserve original comments in output (default: strip all)")
|
|
77
|
+
.action((input, opts) => {
|
|
78
|
+
const t0 = Date.now();
|
|
79
|
+
const inputPath = (0, path_1.resolve)(process.cwd(), input);
|
|
80
|
+
const source = (0, fs_1.readFileSync)(inputPath, "utf-8");
|
|
81
|
+
const options = {
|
|
82
|
+
obfuscation: {
|
|
83
|
+
sequenceExpression: opts["seq"] === false ? false : {},
|
|
84
|
+
mba: opts["mba"] === false ? false : {},
|
|
85
|
+
functionTable: opts["ft"] === false ? false : {},
|
|
86
|
+
stringPool: opts["sp"] === false ? false : { seed: opts["spSeed"] },
|
|
87
|
+
controlFlowFlattening: opts["cff"] === false ? false : {},
|
|
88
|
+
deadCode: opts["dead"] === false ? false : {},
|
|
89
|
+
},
|
|
90
|
+
antiDebug: {
|
|
91
|
+
nativeBinding: opts["native"] === false ? false : {},
|
|
92
|
+
integrityTag: opts["tag"] === false ? false : {},
|
|
93
|
+
},
|
|
94
|
+
minify: opts["minify"] === true,
|
|
95
|
+
stripComments: opts["keepComments"] !== true,
|
|
96
|
+
};
|
|
97
|
+
const { code, appliedPasses } = (0, index_1.protect)(source, options);
|
|
98
|
+
const outputPath = opts["output"]
|
|
99
|
+
? (0, path_1.resolve)(process.cwd(), opts["output"])
|
|
100
|
+
: inputPath.replace(/\.js$/, "") + ".obscura.js";
|
|
101
|
+
(0, fs_1.writeFileSync)(outputPath, code, "utf-8");
|
|
102
|
+
// ── Output report ─────────────────────────────────────────────────────
|
|
103
|
+
const elapsed = Date.now() - t0;
|
|
104
|
+
const inputBytes = Buffer.byteLength(source, "utf-8");
|
|
105
|
+
const outputBytes = Buffer.byteLength(code, "utf-8");
|
|
106
|
+
const growthPct = (((outputBytes - inputBytes) / inputBytes) * 100).toFixed(0);
|
|
107
|
+
const growthStr = outputBytes >= inputBytes ? `+${growthPct}%` : `${growthPct}%`;
|
|
108
|
+
const inputName = (0, path_1.basename)(inputPath);
|
|
109
|
+
const outputName = (0, path_1.basename)(outputPath);
|
|
110
|
+
const nameW = Math.max(inputName.length, outputName.length);
|
|
111
|
+
const sizeW = Math.max(formatBytes(inputBytes).length, formatBytes(outputBytes).length);
|
|
112
|
+
const OBF_PASSES = [
|
|
113
|
+
"sequenceExpression",
|
|
114
|
+
"mba",
|
|
115
|
+
"functionTable",
|
|
116
|
+
"stringPool",
|
|
117
|
+
"controlFlowFlattening",
|
|
118
|
+
"deadCode",
|
|
119
|
+
];
|
|
120
|
+
const DBG_PASSES = ["nativeBinding", "integrityTag"];
|
|
121
|
+
const applied = new Set(appliedPasses);
|
|
122
|
+
const passLine = (name) => {
|
|
123
|
+
const on = applied.has(name);
|
|
124
|
+
const mark = on ? `${c.green}${sym.check}${c.reset}` : `${c.red}${sym.cross}${c.reset}`;
|
|
125
|
+
const label = on ? `${c.white}${name}${c.reset}` : `${c.dim}${name}${c.reset}`;
|
|
126
|
+
return ` ${mark} ${label}`;
|
|
127
|
+
};
|
|
128
|
+
const activeFlags = [];
|
|
129
|
+
if (opts["minify"] === true)
|
|
130
|
+
activeFlags.push("minify");
|
|
131
|
+
if (opts["keepComments"] === true)
|
|
132
|
+
activeFlags.push("keep-comments");
|
|
133
|
+
const sep = ` ${c.dim}${sym.line.repeat(46)}${c.reset}`;
|
|
134
|
+
const report = [
|
|
135
|
+
"",
|
|
136
|
+
` ${c.bold}${c.cyan}${sym.diamond} obscura-js${c.reset}`,
|
|
137
|
+
"",
|
|
138
|
+
sep,
|
|
139
|
+
` ${c.gray}Input ${c.reset} ${pad(inputName, nameW)} ${c.dim}${pad(formatBytes(inputBytes), sizeW)}${c.reset}`,
|
|
140
|
+
` ${c.gray}Output ${c.reset} ${pad(outputName, nameW)} ${pad(formatBytes(outputBytes), sizeW)} ${c.yellow}${growthStr}${c.reset}`,
|
|
141
|
+
` ${c.gray}Elapsed ${c.reset} ${elapsed}ms`,
|
|
142
|
+
...(activeFlags.length ? [` ${c.gray}Flags ${c.reset} ${activeFlags.join(" ")}`] : []),
|
|
143
|
+
sep,
|
|
144
|
+
"",
|
|
145
|
+
` ${c.cyan}Obfuscation${c.reset}`,
|
|
146
|
+
...OBF_PASSES.map(passLine),
|
|
147
|
+
"",
|
|
148
|
+
` ${c.cyan}Anti-Debug${c.reset}`,
|
|
149
|
+
...DBG_PASSES.map(passLine),
|
|
150
|
+
"",
|
|
151
|
+
sep,
|
|
152
|
+
` ${c.green}${sym.done}${c.reset} ${c.bold}Protected successfully${c.reset}`,
|
|
153
|
+
"",
|
|
154
|
+
];
|
|
155
|
+
console.log(report.join("\n"));
|
|
156
|
+
});
|
|
157
|
+
program.parse(process.argv);
|
|
158
|
+
//# sourceMappingURL=obscura_cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obscura_cli.js","sourceRoot":"","sources":["../../bin/obscura_cli.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export type { HazeOptions, ProtectResult } from "./types";
|
|
1
|
+
import type { ObscuraOptions, ProtectResult } from "./types";
|
|
2
|
+
export type { ObscuraOptions as HazeOptions, ProtectResult } from "./types";
|
|
3
3
|
export type { ObfuscationOptions, AntiDebugOptions, SequenceExpressionOptions, MbaOptions, FunctionTableOptions, StringPoolOptions, ControlFlowFlatteningOptions, DeadCodeOptions, IntegrityTagOptions, NativeBindingOptions, } from "./types";
|
|
4
4
|
/**
|
|
5
5
|
* Protect JavaScript source code by running the configured passes.
|
|
@@ -8,5 +8,5 @@ export type { ObfuscationOptions, AntiDebugOptions, SequenceExpressionOptions, M
|
|
|
8
8
|
* @param options - Protection configuration
|
|
9
9
|
* @returns ProtectResult containing the protected code and applied pass names
|
|
10
10
|
*/
|
|
11
|
-
export declare function protect(source: string, options?:
|
|
11
|
+
export declare function protect(source: string, options?: ObscuraOptions): ProtectResult;
|
|
12
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7D,YAAY,EAAE,cAAc,IAAI,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC5E,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,yBAAyB,EACzB,UAAU,EACV,oBAAoB,EACpB,iBAAiB,EACjB,4BAA4B,EAC5B,eAAe,EACf,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,SAAS,CAAC;AAEjB;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,aAAa,CAwBnF"}
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;AA2BA,0BAwBC;AAnDD,0CAAsC;AACtC,iEAAwC;AACxC,+CAAiD;AACjD,2CAA6C;AAiB7C;;;;;;GAMG;AACH,SAAgB,OAAO,CAAC,MAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;AA2BA,0BAwBC;AAnDD,0CAAsC;AACtC,iEAAwC;AACxC,+CAAiD;AACjD,2CAA6C;AAiB7C;;;;;;GAMG;AACH,SAAgB,OAAO,CAAC,MAAc,EAAE,UAA0B,EAAE;IAClE,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,SAAS,CAAC,yBAAyB,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,GAAG,GAAG,IAAA,cAAK,EAAC,MAAM,EAAE;QACxB,UAAU,EAAE,aAAa;QACzB,OAAO,EAAE,CAAC,KAAK,CAAC;KACjB,CAAC,CAAC;IAEH,MAAM,aAAa,GAAa,EAAE,CAAC;IAEnC,IAAA,8BAAgB,EAAC,GAAG,EAAE,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC1D,IAAA,0BAAc,EAAC,GAAG,EAAE,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAEtD,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,KAAK,KAAK,CAAC;IAEtD,MAAM,EAAE,IAAI,EAAE,GAAG,IAAA,mBAAQ,EAAC,GAAG,EAAE;QAC7B,QAAQ,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;QACjC,OAAO,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;QAChC,kBAAkB,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;KAC5D,CAAC,CAAC;IAEH,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;AACjC,CAAC"}
|
package/dist/src/types.d.ts
CHANGED
|
@@ -50,7 +50,7 @@ export interface AntiDebugOptions {
|
|
|
50
50
|
integrityTag?: IntegrityTagOptions | false;
|
|
51
51
|
nativeBinding?: NativeBindingOptions | false;
|
|
52
52
|
}
|
|
53
|
-
export interface
|
|
53
|
+
export interface ObscuraOptions {
|
|
54
54
|
obfuscation?: ObfuscationOptions;
|
|
55
55
|
antiDebug?: AntiDebugOptions;
|
|
56
56
|
/** Minify the output (removes whitespace and shortens literals). Default: false */
|
package/dist/src/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAIlC,uCAAuC;AACvC,MAAM,WAAW,IAAI,CAAC,QAAQ;IAC5B,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC9C;AAID,MAAM,WAAW,yBAAyB;IACxC,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,4BAA4B;IAC3C,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,kBAAkB,CAAC,EAAE,yBAAyB,GAAG,KAAK,CAAC;IACvD,GAAG,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC;IACzB,aAAa,CAAC,EAAE,oBAAoB,GAAG,KAAK,CAAC;IAC7C,UAAU,CAAC,EAAE,iBAAiB,GAAG,KAAK,CAAC;IACvC,qBAAqB,CAAC,EAAE,4BAA4B,GAAG,KAAK,CAAC;IAC7D,QAAQ,CAAC,EAAE,eAAe,GAAG,KAAK,CAAC;CACpC;AAID,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,mBAAmB,GAAG,KAAK,CAAC;IAC3C,aAAa,CAAC,EAAE,oBAAoB,GAAG,KAAK,CAAC;CAC9C;AAID,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAIlC,uCAAuC;AACvC,MAAM,WAAW,IAAI,CAAC,QAAQ;IAC5B,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC9C;AAID,MAAM,WAAW,yBAAyB;IACxC,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,4BAA4B;IAC3C,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,kBAAkB,CAAC,EAAE,yBAAyB,GAAG,KAAK,CAAC;IACvD,GAAG,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC;IACzB,aAAa,CAAC,EAAE,oBAAoB,GAAG,KAAK,CAAC;IAC7C,UAAU,CAAC,EAAE,iBAAiB,GAAG,KAAK,CAAC;IACvC,qBAAqB,CAAC,EAAE,4BAA4B,GAAG,KAAK,CAAC;IAC7D,QAAQ,CAAC,EAAE,eAAe,GAAG,KAAK,CAAC;CACpC;AAID,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,mBAAmB,GAAG,KAAK,CAAC;IAC3C,aAAa,CAAC,EAAE,oBAAoB,GAAG,KAAK,CAAC;CAC9C;AAID,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,mFAAmF;IACnF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wDAAwD;IACxD,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAID,MAAM,WAAW,aAAa;IAC5B,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "obscura-js",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "JavaScript code protection tool — obfuscation & anti-debugging inspired by Google reCAPTCHA",
|
|
5
5
|
"main": "dist/src/index.js",
|
|
6
6
|
"types": "dist/src/index.d.ts",
|
|
@@ -16,10 +16,10 @@
|
|
|
16
16
|
],
|
|
17
17
|
"sideEffects": false,
|
|
18
18
|
"bin": {
|
|
19
|
-
"obscura-js": "dist/bin/
|
|
19
|
+
"obscura-js": "dist/bin/obscura_cli.js"
|
|
20
20
|
},
|
|
21
21
|
"scripts": {
|
|
22
|
-
"build": "tsc &&
|
|
22
|
+
"build": "tsc && node -e \"require('fs').chmodSync('dist/bin/obscura_cli.js', 0o755)\"",
|
|
23
23
|
"build:watch": "tsc --watch",
|
|
24
24
|
"prepublishOnly": "npm run build && npm test",
|
|
25
25
|
"test": "jest --coverage",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"lint:fix": "eslint src/ bin/ --fix",
|
|
28
28
|
"format": "prettier --write \"src/**/*.ts\" \"bin/**/*.ts\" \"tests/**/*.ts\"",
|
|
29
29
|
"format:check": "prettier --check \"src/**/*.ts\" \"bin/**/*.ts\" \"tests/**/*.ts\"",
|
|
30
|
-
"dev": "ts-node bin/
|
|
30
|
+
"dev": "ts-node bin/obscura_cli.ts"
|
|
31
31
|
},
|
|
32
32
|
"keywords": [
|
|
33
33
|
"obfuscation",
|
package/dist/bin/haze.d.ts
DELETED
package/dist/bin/haze.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"haze.d.ts","sourceRoot":"","sources":["../../bin/haze.ts"],"names":[],"mappings":""}
|
package/dist/bin/haze.js
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
"use strict";
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
const fs_1 = require("fs");
|
|
5
|
-
const path_1 = require("path");
|
|
6
|
-
const commander_1 = require("commander");
|
|
7
|
-
const index_1 = require("../src/index");
|
|
8
|
-
const program = new commander_1.Command();
|
|
9
|
-
program
|
|
10
|
-
.name("obscura-js")
|
|
11
|
-
.description("JavaScript code protection tool — obfuscation & anti-debugging")
|
|
12
|
-
.version("0.1.0");
|
|
13
|
-
program
|
|
14
|
-
.command("protect <input>")
|
|
15
|
-
.description("Protect a JavaScript file")
|
|
16
|
-
.option("-o, --output <file>", "Output file (default: <input>.obscura.js)")
|
|
17
|
-
.option("--no-seq", "Disable sequence expression pass")
|
|
18
|
-
.option("--no-mba", "Disable mixed boolean arithmetic pass")
|
|
19
|
-
.option("--no-ft", "Disable indirect function table pass")
|
|
20
|
-
.option("--no-sp", "Disable encrypted string pool pass")
|
|
21
|
-
.option("--no-cff", "Disable control flow flattening pass")
|
|
22
|
-
.option("--no-dead", "Disable dead code injection pass")
|
|
23
|
-
.option("--no-native", "Disable native method binding pass")
|
|
24
|
-
.option("--no-tag", "Disable symbol integrity tag pass")
|
|
25
|
-
.option("--sp-seed <number>", "Seed for the string pool XOR cipher", parseInt)
|
|
26
|
-
.option("--minify", "Minify output (compact whitespace, shorten literals)")
|
|
27
|
-
.option("--keep-comments", "Preserve original comments in output (default: strip all)")
|
|
28
|
-
.action((input, opts) => {
|
|
29
|
-
const inputPath = (0, path_1.resolve)(process.cwd(), input);
|
|
30
|
-
const source = (0, fs_1.readFileSync)(inputPath, "utf-8");
|
|
31
|
-
const options = {
|
|
32
|
-
obfuscation: {
|
|
33
|
-
sequenceExpression: opts["seq"] === false ? false : {},
|
|
34
|
-
mba: opts["mba"] === false ? false : {},
|
|
35
|
-
functionTable: opts["ft"] === false ? false : {},
|
|
36
|
-
stringPool: opts["sp"] === false ? false : { seed: opts["spSeed"] },
|
|
37
|
-
controlFlowFlattening: opts["cff"] === false ? false : {},
|
|
38
|
-
deadCode: opts["dead"] === false ? false : {},
|
|
39
|
-
},
|
|
40
|
-
antiDebug: {
|
|
41
|
-
nativeBinding: opts["native"] === false ? false : {},
|
|
42
|
-
integrityTag: opts["tag"] === false ? false : {},
|
|
43
|
-
},
|
|
44
|
-
minify: opts["minify"] === true,
|
|
45
|
-
stripComments: opts["keepComments"] !== true,
|
|
46
|
-
};
|
|
47
|
-
const { code, appliedPasses } = (0, index_1.protect)(source, options);
|
|
48
|
-
const outputPath = opts["output"]
|
|
49
|
-
? (0, path_1.resolve)(process.cwd(), opts["output"])
|
|
50
|
-
: inputPath.replace(/\.js$/, "") + ".obscura.js";
|
|
51
|
-
(0, fs_1.writeFileSync)(outputPath, code, "utf-8");
|
|
52
|
-
console.log(`✔ Protected: ${outputPath}`);
|
|
53
|
-
console.log(` Passes applied: ${appliedPasses.join(", ")}`);
|
|
54
|
-
});
|
|
55
|
-
program.parse(process.argv);
|
|
56
|
-
//# sourceMappingURL=haze.js.map
|
package/dist/bin/haze.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"haze.js","sourceRoot":"","sources":["../../bin/haze.ts"],"names":[],"mappings":"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"}
|