js-confuser 1.7.2 → 2.0.0-alpha.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/.github/ISSUE_TEMPLATE/bug_report.md +6 -4
- package/.github/workflows/node.js.yml +1 -1
- package/CHANGELOG.md +105 -0
- package/Migration.md +57 -0
- package/README.md +23 -913
- package/dist/constants.js +69 -13
- package/dist/index.js +108 -152
- package/dist/obfuscator.js +316 -118
- package/dist/options.js +1 -109
- package/dist/order.js +30 -30
- package/dist/presets.js +47 -45
- package/dist/probability.js +25 -32
- package/dist/templates/bufferToStringTemplate.js +9 -0
- package/dist/templates/deadCodeTemplates.js +9 -0
- package/dist/templates/getGlobalTemplate.js +19 -0
- package/dist/templates/integrityTemplate.js +30 -0
- package/dist/templates/setFunctionLengthTemplate.js +9 -0
- package/dist/templates/stringCompressionTemplate.js +10 -0
- package/dist/templates/tamperProtectionTemplates.js +21 -0
- package/dist/templates/template.js +213 -93
- package/dist/transforms/astScrambler.js +100 -0
- package/dist/transforms/calculator.js +70 -127
- package/dist/transforms/controlFlowFlattening.js +1182 -0
- package/dist/transforms/deadCode.js +62 -577
- package/dist/transforms/dispatcher.js +300 -309
- package/dist/transforms/extraction/duplicateLiteralsRemoval.js +88 -189
- package/dist/transforms/extraction/objectExtraction.js +131 -215
- package/dist/transforms/finalizer.js +56 -59
- package/dist/transforms/flatten.js +275 -276
- package/dist/transforms/functionOutlining.js +230 -0
- package/dist/transforms/identifier/globalConcealing.js +217 -103
- package/dist/transforms/identifier/movedDeclarations.js +167 -91
- package/dist/transforms/identifier/renameVariables.js +240 -187
- package/dist/transforms/lock/integrity.js +61 -184
- package/dist/transforms/lock/lock.js +263 -303
- package/dist/transforms/minify.js +431 -436
- package/dist/transforms/opaquePredicates.js +65 -118
- package/dist/transforms/pack.js +160 -0
- package/dist/transforms/plugin.js +179 -0
- package/dist/transforms/preparation.js +263 -163
- package/dist/transforms/renameLabels.js +132 -56
- package/dist/transforms/rgf.js +142 -240
- package/dist/transforms/shuffle.js +52 -145
- package/dist/transforms/string/encoding.js +45 -173
- package/dist/transforms/string/stringCompression.js +81 -126
- package/dist/transforms/string/stringConcealing.js +189 -224
- package/dist/transforms/string/stringEncoding.js +32 -40
- package/dist/transforms/string/stringSplitting.js +54 -55
- package/dist/transforms/variableMasking.js +232 -0
- package/dist/utils/ControlObject.js +125 -0
- package/dist/utils/IntGen.js +46 -0
- package/dist/utils/NameGen.js +106 -0
- package/dist/utils/ast-utils.js +560 -0
- package/dist/utils/function-utils.js +56 -0
- package/dist/utils/gen-utils.js +48 -0
- package/dist/utils/node.js +77 -0
- package/dist/utils/object-utils.js +21 -0
- package/dist/utils/random-utils.js +91 -0
- package/dist/utils/static-utils.js +64 -0
- package/dist/validateOptions.js +122 -0
- package/index.d.ts +1 -17
- package/package.json +27 -22
- package/src/constants.ts +139 -77
- package/src/index.ts +70 -163
- package/src/obfuscationResult.ts +43 -0
- package/src/obfuscator.ts +328 -135
- package/src/options.ts +154 -623
- package/src/order.ts +14 -14
- package/src/presets.ts +39 -34
- package/src/probability.ts +21 -36
- package/src/templates/{bufferToString.ts → bufferToStringTemplate.ts} +5 -54
- package/src/templates/deadCodeTemplates.ts +1185 -0
- package/src/templates/getGlobalTemplate.ts +72 -0
- package/src/templates/integrityTemplate.ts +69 -0
- package/src/templates/setFunctionLengthTemplate.ts +11 -0
- package/src/templates/stringCompressionTemplate.ts +42 -0
- package/src/templates/tamperProtectionTemplates.ts +116 -0
- package/src/templates/template.ts +183 -92
- package/src/transforms/astScrambler.ts +99 -0
- package/src/transforms/calculator.ts +96 -224
- package/src/transforms/controlFlowFlattening.ts +1594 -0
- package/src/transforms/deadCode.ts +85 -628
- package/src/transforms/dispatcher.ts +431 -636
- package/src/transforms/extraction/duplicateLiteralsRemoval.ts +147 -299
- package/src/transforms/extraction/objectExtraction.ts +160 -333
- package/src/transforms/finalizer.ts +63 -64
- package/src/transforms/flatten.ts +439 -557
- package/src/transforms/functionOutlining.ts +225 -0
- package/src/transforms/identifier/globalConcealing.ts +261 -189
- package/src/transforms/identifier/movedDeclarations.ts +228 -142
- package/src/transforms/identifier/renameVariables.ts +252 -258
- package/src/transforms/lock/integrity.ts +84 -260
- package/src/transforms/lock/lock.ts +342 -491
- package/src/transforms/minify.ts +523 -663
- package/src/transforms/opaquePredicates.ts +90 -229
- package/src/transforms/pack.ts +195 -0
- package/src/transforms/plugin.ts +185 -0
- package/src/transforms/preparation.ts +337 -215
- package/src/transforms/renameLabels.ts +176 -77
- package/src/transforms/rgf.ts +293 -386
- package/src/transforms/shuffle.ts +80 -254
- package/src/transforms/string/encoding.ts +26 -129
- package/src/transforms/string/stringCompression.ts +118 -236
- package/src/transforms/string/stringConcealing.ts +255 -339
- package/src/transforms/string/stringEncoding.ts +28 -47
- package/src/transforms/string/stringSplitting.ts +61 -75
- package/src/transforms/variableMasking.ts +257 -0
- package/src/utils/ControlObject.ts +141 -0
- package/src/utils/IntGen.ts +33 -0
- package/src/utils/NameGen.ts +106 -0
- package/src/utils/ast-utils.ts +667 -0
- package/src/utils/function-utils.ts +50 -0
- package/src/utils/gen-utils.ts +48 -0
- package/src/utils/node.ts +78 -0
- package/src/utils/object-utils.ts +21 -0
- package/src/utils/random-utils.ts +79 -0
- package/src/utils/static-utils.ts +66 -0
- package/src/validateOptions.ts +256 -0
- package/tsconfig.json +13 -8
- package/babel.config.js +0 -12
- package/dev.js +0 -8
- package/dist/compiler.js +0 -34
- package/dist/parser.js +0 -59
- package/dist/precedence.js +0 -66
- package/dist/templates/bufferToString.js +0 -108
- package/dist/templates/crash.js +0 -59
- package/dist/templates/es5.js +0 -137
- package/dist/templates/functionLength.js +0 -34
- package/dist/templates/globals.js +0 -9
- package/dist/transforms/antiTooling.js +0 -88
- package/dist/transforms/controlFlowFlattening/controlFlowFlattening.js +0 -1281
- package/dist/transforms/controlFlowFlattening/expressionObfuscation.js +0 -131
- package/dist/transforms/es5/antiClass.js +0 -164
- package/dist/transforms/es5/antiDestructuring.js +0 -193
- package/dist/transforms/es5/antiES6Object.js +0 -185
- package/dist/transforms/es5/antiSpreadOperator.js +0 -35
- package/dist/transforms/es5/antiTemplate.js +0 -66
- package/dist/transforms/es5/es5.js +0 -123
- package/dist/transforms/extraction/classExtraction.js +0 -83
- package/dist/transforms/identifier/globalAnalysis.js +0 -70
- package/dist/transforms/identifier/variableAnalysis.js +0 -104
- package/dist/transforms/lock/antiDebug.js +0 -76
- package/dist/transforms/stack.js +0 -343
- package/dist/transforms/transform.js +0 -350
- package/dist/traverse.js +0 -110
- package/dist/util/compare.js +0 -145
- package/dist/util/gen.js +0 -564
- package/dist/util/guard.js +0 -9
- package/dist/util/identifiers.js +0 -355
- package/dist/util/insert.js +0 -362
- package/dist/util/math.js +0 -19
- package/dist/util/object.js +0 -40
- package/dist/util/random.js +0 -130
- package/dist/util/scope.js +0 -20
- package/docs/ControlFlowFlattening.md +0 -595
- package/docs/Countermeasures.md +0 -63
- package/docs/ES5.md +0 -197
- package/docs/Integrity.md +0 -75
- package/docs/RGF.md +0 -419
- package/samples/example.js +0 -15
- package/samples/high.js +0 -1
- package/samples/input.js +0 -3
- package/samples/javascriptobfuscator.com.js +0 -8
- package/samples/jscrambler_advanced.js +0 -1894
- package/samples/jscrambler_light.js +0 -1134
- package/samples/low.js +0 -1
- package/samples/medium.js +0 -1
- package/samples/obfuscator.io.js +0 -1686
- package/samples/preemptive.com.js +0 -16
- package/src/compiler.ts +0 -35
- package/src/parser.ts +0 -49
- package/src/precedence.ts +0 -61
- package/src/templates/crash.ts +0 -55
- package/src/templates/es5.ts +0 -131
- package/src/templates/functionLength.ts +0 -32
- package/src/templates/globals.ts +0 -3
- package/src/transforms/antiTooling.ts +0 -102
- package/src/transforms/controlFlowFlattening/controlFlowFlattening.ts +0 -2146
- package/src/transforms/controlFlowFlattening/expressionObfuscation.ts +0 -179
- package/src/transforms/es5/antiClass.ts +0 -272
- package/src/transforms/es5/antiDestructuring.ts +0 -294
- package/src/transforms/es5/antiES6Object.ts +0 -267
- package/src/transforms/es5/antiSpreadOperator.ts +0 -56
- package/src/transforms/es5/antiTemplate.ts +0 -98
- package/src/transforms/es5/es5.ts +0 -149
- package/src/transforms/extraction/classExtraction.ts +0 -168
- package/src/transforms/identifier/globalAnalysis.ts +0 -85
- package/src/transforms/identifier/variableAnalysis.ts +0 -118
- package/src/transforms/lock/antiDebug.ts +0 -112
- package/src/transforms/stack.ts +0 -551
- package/src/transforms/transform.ts +0 -453
- package/src/traverse.ts +0 -120
- package/src/types.ts +0 -131
- package/src/util/compare.ts +0 -181
- package/src/util/gen.ts +0 -651
- package/src/util/guard.ts +0 -7
- package/src/util/identifiers.ts +0 -494
- package/src/util/insert.ts +0 -419
- package/src/util/math.ts +0 -15
- package/src/util/object.ts +0 -39
- package/src/util/random.ts +0 -141
- package/src/util/scope.ts +0 -21
- package/test/code/Cash.src.js +0 -1011
- package/test/code/Cash.test.ts +0 -49
- package/test/code/Dynamic.src.js +0 -118
- package/test/code/Dynamic.test.ts +0 -49
- package/test/code/ES6.src.js +0 -235
- package/test/code/ES6.test.ts +0 -42
- package/test/code/NewFeatures.test.ts +0 -19
- package/test/code/StrictMode.src.js +0 -65
- package/test/code/StrictMode.test.js +0 -37
- package/test/compare.test.ts +0 -104
- package/test/index.test.ts +0 -249
- package/test/options.test.ts +0 -132
- package/test/presets.test.ts +0 -22
- package/test/probability.test.ts +0 -44
- package/test/templates/template.test.ts +0 -14
- package/test/transforms/antiTooling.test.ts +0 -52
- package/test/transforms/calculator.test.ts +0 -78
- package/test/transforms/controlFlowFlattening/controlFlowFlattening.test.ts +0 -1274
- package/test/transforms/controlFlowFlattening/expressionObfuscation.test.ts +0 -192
- package/test/transforms/deadCode.test.ts +0 -85
- package/test/transforms/dispatcher.test.ts +0 -457
- package/test/transforms/es5/antiClass.test.ts +0 -427
- package/test/transforms/es5/antiDestructuring.test.ts +0 -157
- package/test/transforms/es5/antiES6Object.test.ts +0 -245
- package/test/transforms/es5/antiTemplate.test.ts +0 -116
- package/test/transforms/es5/es5.test.ts +0 -110
- package/test/transforms/extraction/classExtraction.test.ts +0 -86
- package/test/transforms/extraction/duplicateLiteralsRemoval.test.ts +0 -200
- package/test/transforms/extraction/objectExtraction.test.ts +0 -491
- package/test/transforms/flatten.test.ts +0 -721
- package/test/transforms/hexadecimalNumbers.test.ts +0 -62
- package/test/transforms/identifier/globalConcealing.test.ts +0 -72
- package/test/transforms/identifier/movedDeclarations.test.ts +0 -275
- package/test/transforms/identifier/renameVariables.test.ts +0 -621
- package/test/transforms/lock/antiDebug.test.ts +0 -66
- package/test/transforms/lock/browserLock.test.ts +0 -129
- package/test/transforms/lock/countermeasures.test.ts +0 -100
- package/test/transforms/lock/integrity.test.ts +0 -161
- package/test/transforms/lock/lock.test.ts +0 -204
- package/test/transforms/lock/osLock.test.ts +0 -312
- package/test/transforms/lock/selfDefending.test.ts +0 -68
- package/test/transforms/minify.test.ts +0 -575
- package/test/transforms/opaquePredicates.test.ts +0 -43
- package/test/transforms/preparation.test.ts +0 -157
- package/test/transforms/renameLabels.test.ts +0 -95
- package/test/transforms/rgf.test.ts +0 -378
- package/test/transforms/shuffle.test.ts +0 -135
- package/test/transforms/stack.test.ts +0 -573
- package/test/transforms/string/stringCompression.test.ts +0 -120
- package/test/transforms/string/stringConcealing.test.ts +0 -299
- package/test/transforms/string/stringEncoding.test.ts +0 -95
- package/test/transforms/string/stringSplitting.test.ts +0 -135
- package/test/transforms/transform.test.ts +0 -66
- package/test/traverse.test.ts +0 -139
- package/test/util/compare.test.ts +0 -34
- package/test/util/gen.test.ts +0 -121
- package/test/util/identifiers.test.ts +0 -253
- package/test/util/insert.test.ts +0 -142
- package/test/util/math.test.ts +0 -5
- package/test/util/random.test.ts +0 -71
- /package/dist/{types.js → obfuscationResult.js} +0 -0
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports["default"] = void 0;
|
|
8
|
+
var _order = require("../order");
|
|
9
|
+
var _astUtils = require("../utils/ast-utils");
|
|
10
|
+
var t = _interopRequireWildcard(require("@babel/types"));
|
|
11
|
+
var _randomUtils = require("../utils/random-utils");
|
|
12
|
+
var _probability = require("../probability");
|
|
13
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
14
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
15
|
+
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
16
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
17
|
+
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
18
|
+
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
19
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
20
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
21
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
22
|
+
function isSafeForOutlining(path) {
|
|
23
|
+
if (path.isIdentifier() || path.isLiteral()) return {
|
|
24
|
+
isSafe: false
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
// Skip direct invocations ('this' will be different)
|
|
28
|
+
if (path.key === "callee" && path.parentPath.isCallExpression()) {
|
|
29
|
+
return {
|
|
30
|
+
isSafe: false
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Skip typeof and delete expressions (identifier behavior is different)
|
|
35
|
+
if (path.key === "argument" && path.parentPath.isUnaryExpression()) {
|
|
36
|
+
return {
|
|
37
|
+
isSafe: false
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
if (path.isReturnStatement() || path.isYieldExpression() || path.isAwaitExpression() || path.isContinueStatement() || path.isBreakStatement() || path.isThrowStatement() || path.isDebuggerStatement() || path.isImportDeclaration() || path.isExportDeclaration()) {
|
|
41
|
+
return {
|
|
42
|
+
isSafe: false
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
var isSafe = true;
|
|
46
|
+
var bindings = [];
|
|
47
|
+
var fnPath = path.getFunctionParent();
|
|
48
|
+
var visitor = {
|
|
49
|
+
ThisExpression: function ThisExpression(path) {
|
|
50
|
+
isSafe = false;
|
|
51
|
+
path.stop();
|
|
52
|
+
},
|
|
53
|
+
Identifier: function Identifier(path) {
|
|
54
|
+
if (["arguments", "eval"].includes(path.node.name)) {
|
|
55
|
+
isSafe = false;
|
|
56
|
+
path.stop();
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
BindingIdentifier: function BindingIdentifier(path) {
|
|
60
|
+
var binding = path.scope.getBinding(path.node.name);
|
|
61
|
+
if (binding) {
|
|
62
|
+
bindings.push(binding);
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
// Function flow guard
|
|
66
|
+
"ReturnStatement|YieldExpression|AwaitExpression": function ReturnStatementYieldExpressionAwaitExpression(path) {
|
|
67
|
+
if (path.getFunctionParent() === fnPath) {
|
|
68
|
+
isSafe = false;
|
|
69
|
+
path.stop();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
// Exclude 'ThisExpression' and semantic 'Identifier' nodes
|
|
75
|
+
if (visitor[path.type]) return {
|
|
76
|
+
isSafe: false
|
|
77
|
+
};
|
|
78
|
+
path.traverse(visitor);
|
|
79
|
+
return {
|
|
80
|
+
isSafe: isSafe,
|
|
81
|
+
bindings: bindings
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
var _default = exports["default"] = function _default(_ref) {
|
|
85
|
+
var Plugin = _ref.Plugin;
|
|
86
|
+
var me = Plugin(_order.Order.FunctionOutlining, {
|
|
87
|
+
changeData: {
|
|
88
|
+
functionsMade: 0
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
var changesMade = 0;
|
|
92
|
+
function checkProbability() {
|
|
93
|
+
if (!(0, _probability.computeProbabilityMap)(me.options.functionOutlining)) return false;
|
|
94
|
+
if (changesMade > 100 && (0, _randomUtils.chance)(changesMade - 100)) return false;
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
visitor: {
|
|
99
|
+
Block: {
|
|
100
|
+
exit: function exit(blockPath) {
|
|
101
|
+
if (blockPath.isProgram()) {
|
|
102
|
+
blockPath.scope.crawl();
|
|
103
|
+
}
|
|
104
|
+
if (blockPath.find(function (p) {
|
|
105
|
+
return me.isSkipped(p);
|
|
106
|
+
})) return;
|
|
107
|
+
if (!checkProbability()) return;
|
|
108
|
+
|
|
109
|
+
// Extract a random number of statements
|
|
110
|
+
|
|
111
|
+
var statements = blockPath.get("body");
|
|
112
|
+
// var startIndex = getRandomInteger(0, statements.length);
|
|
113
|
+
// var endIndex = getRandomInteger(startIndex, statements.length);
|
|
114
|
+
|
|
115
|
+
var startIndex = 0;
|
|
116
|
+
var endIndex = statements.length;
|
|
117
|
+
var extractedStatements = statements.slice(startIndex, endIndex);
|
|
118
|
+
if (!extractedStatements.length) return;
|
|
119
|
+
var bindings = [];
|
|
120
|
+
var _iterator = _createForOfIteratorHelper(extractedStatements),
|
|
121
|
+
_step;
|
|
122
|
+
try {
|
|
123
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
124
|
+
var statement = _step.value;
|
|
125
|
+
// Don't override the control node
|
|
126
|
+
if (me.isSkipped(statement)) return;
|
|
127
|
+
var result = isSafeForOutlining(statement);
|
|
128
|
+
if (!result.isSafe) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
bindings.push.apply(bindings, _toConsumableArray(result.bindings));
|
|
132
|
+
}
|
|
133
|
+
} catch (err) {
|
|
134
|
+
_iterator.e(err);
|
|
135
|
+
} finally {
|
|
136
|
+
_iterator.f();
|
|
137
|
+
}
|
|
138
|
+
var extractedStatementSet = new Set(extractedStatements);
|
|
139
|
+
for (var _i = 0, _bindings = bindings; _i < _bindings.length; _i++) {
|
|
140
|
+
var binding = _bindings[_i];
|
|
141
|
+
var _iterator2 = _createForOfIteratorHelper(binding.referencePaths),
|
|
142
|
+
_step2;
|
|
143
|
+
try {
|
|
144
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
145
|
+
var referencePath = _step2.value;
|
|
146
|
+
var found = referencePath.find(function (p) {
|
|
147
|
+
return extractedStatementSet.has(p);
|
|
148
|
+
});
|
|
149
|
+
if (!found) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
} catch (err) {
|
|
154
|
+
_iterator2.e(err);
|
|
155
|
+
} finally {
|
|
156
|
+
_iterator2.f();
|
|
157
|
+
}
|
|
158
|
+
var _iterator3 = _createForOfIteratorHelper(binding.constantViolations),
|
|
159
|
+
_step3;
|
|
160
|
+
try {
|
|
161
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
162
|
+
var constantViolation = _step3.value;
|
|
163
|
+
var found = constantViolation.find(function (p) {
|
|
164
|
+
return extractedStatementSet.has(p);
|
|
165
|
+
});
|
|
166
|
+
if (!found) {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
} catch (err) {
|
|
171
|
+
_iterator3.e(err);
|
|
172
|
+
} finally {
|
|
173
|
+
_iterator3.f();
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
changesMade++;
|
|
177
|
+
var isFirst = true;
|
|
178
|
+
var _iterator4 = _createForOfIteratorHelper(extractedStatements),
|
|
179
|
+
_step4;
|
|
180
|
+
try {
|
|
181
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
182
|
+
var statement = _step4.value;
|
|
183
|
+
if (isFirst) {
|
|
184
|
+
isFirst = false;
|
|
185
|
+
var memberExpression = me.getControlObject(blockPath).addProperty(t.functionExpression(null, [], t.blockStatement(extractedStatements.map(function (x) {
|
|
186
|
+
return x.node;
|
|
187
|
+
}))));
|
|
188
|
+
me.changeData.functionsMade++;
|
|
189
|
+
var callExpression = t.callExpression(memberExpression, []);
|
|
190
|
+
statement.replaceWith(callExpression);
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
statement.remove();
|
|
194
|
+
}
|
|
195
|
+
} catch (err) {
|
|
196
|
+
_iterator4.e(err);
|
|
197
|
+
} finally {
|
|
198
|
+
_iterator4.f();
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
Expression: {
|
|
203
|
+
exit: function exit(path) {
|
|
204
|
+
// Skip assignment left
|
|
205
|
+
if (path.find(function (p) {
|
|
206
|
+
var _p$parentPath;
|
|
207
|
+
return p.key === "left" && ((_p$parentPath = p.parentPath) === null || _p$parentPath === void 0 ? void 0 : _p$parentPath.type) === "AssignmentExpression";
|
|
208
|
+
})) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
if (!checkProbability()) return;
|
|
212
|
+
if (path.find(function (p) {
|
|
213
|
+
return me.isSkipped(p);
|
|
214
|
+
})) return;
|
|
215
|
+
if (!isSafeForOutlining(path).isSafe) return;
|
|
216
|
+
changesMade++;
|
|
217
|
+
var blockPath = path.find(function (p) {
|
|
218
|
+
return p.isBlock();
|
|
219
|
+
});
|
|
220
|
+
var memberExpression = me.getControlObject(blockPath).addProperty(t.functionExpression(null, [], t.blockStatement([t.returnStatement(t.cloneNode(path.node))])));
|
|
221
|
+
me.changeData.functionsMade++;
|
|
222
|
+
var callExpression = t.callExpression(memberExpression, []);
|
|
223
|
+
(0, _astUtils.ensureComputedExpression)(path);
|
|
224
|
+
path.replaceWith(callExpression);
|
|
225
|
+
me.skip(path);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
};
|
|
@@ -1,119 +1,233 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
|
-
exports
|
|
7
|
+
exports["default"] = void 0;
|
|
8
|
+
var t = _interopRequireWildcard(require("@babel/types"));
|
|
9
|
+
var _NameGen = require("../../utils/NameGen");
|
|
7
10
|
var _template = _interopRequireDefault(require("../../templates/template"));
|
|
8
|
-
var _transform = _interopRequireDefault(require("../transform"));
|
|
9
11
|
var _order = require("../../order");
|
|
10
|
-
var _gen = require("../../util/gen");
|
|
11
|
-
var _insert = require("../../util/insert");
|
|
12
|
-
var _random = require("../../util/random");
|
|
13
|
-
var _constants = require("../../constants");
|
|
14
12
|
var _probability = require("../../probability");
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
function
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
13
|
+
var _constants = require("../../constants");
|
|
14
|
+
var _astUtils = require("../../utils/ast-utils");
|
|
15
|
+
var _getGlobalTemplate = require("../../templates/getGlobalTemplate");
|
|
16
|
+
var _randomUtils = require("../../utils/random-utils");
|
|
17
|
+
var _assert = require("assert");
|
|
18
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
19
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
20
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
21
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
22
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
23
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
24
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
25
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
26
|
+
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
27
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
28
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
29
|
+
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
30
|
+
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
31
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
32
|
+
var ignoreGlobals = new Set(["require", "__dirname", "eval", "arguments", _constants.variableFunctionName].concat(_toConsumableArray(_constants.reservedIdentifiers)));
|
|
33
|
+
var _default = exports["default"] = function _default(_ref) {
|
|
34
|
+
var Plugin = _ref.Plugin;
|
|
35
|
+
var me = Plugin(_order.Order.GlobalConcealing, {
|
|
36
|
+
changeData: {
|
|
37
|
+
globals: 0,
|
|
38
|
+
nativeFunctions: 0
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
var globalMapping = new Map(),
|
|
42
|
+
globalFnName = me.getPlaceholder() + "_getGlobal",
|
|
43
|
+
globalVarName = me.getPlaceholder() + "_globalVar",
|
|
44
|
+
gen = new _NameGen.NameGen();
|
|
45
|
+
|
|
46
|
+
// Create the getGlobal function using a template
|
|
47
|
+
function createGlobalConcealingFunction() {
|
|
48
|
+
// Create fake global mappings
|
|
49
|
+
|
|
50
|
+
var fakeCount = (0, _randomUtils.getRandomInteger)(20, 40);
|
|
51
|
+
for (var i = 0; i < fakeCount; i++) {
|
|
52
|
+
var fakeName = (0, _randomUtils.getRandomString)((0, _randomUtils.getRandomInteger)(6, 8));
|
|
53
|
+
globalMapping.set(gen.generate(), fakeName);
|
|
54
|
+
}
|
|
55
|
+
var createSwitchStatement = function createSwitchStatement() {
|
|
56
|
+
var cases = Array.from(globalMapping.keys()).map(function (originalName) {
|
|
57
|
+
var mappedKey = globalMapping.get(originalName);
|
|
58
|
+
return t.switchCase(t.stringLiteral(mappedKey), [t.returnStatement(t.memberExpression(t.identifier(globalVarName), t.stringLiteral(originalName), true))]);
|
|
55
59
|
});
|
|
56
|
-
|
|
57
|
-
|
|
60
|
+
return t.switchStatement(t.identifier("mapping"), cases);
|
|
61
|
+
};
|
|
62
|
+
return t.functionDeclaration(t.identifier(globalFnName), [t.identifier("mapping")], t.blockStatement([createSwitchStatement()]));
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
visitor: {
|
|
66
|
+
Program: {
|
|
67
|
+
exit: function exit(programPath) {
|
|
68
|
+
var illegalGlobals = new Set();
|
|
69
|
+
var pendingReplacements = new Map();
|
|
70
|
+
programPath.traverse({
|
|
71
|
+
Identifier: function Identifier(identifierPath) {
|
|
72
|
+
if (!(0, _astUtils.isVariableIdentifier)(identifierPath)) return;
|
|
73
|
+
var identifierName = identifierPath.node.name;
|
|
74
|
+
if (ignoreGlobals.has(identifierName)) return;
|
|
75
|
+
var binding = identifierPath.scope.getBinding(identifierName);
|
|
76
|
+
if (binding) {
|
|
77
|
+
illegalGlobals.add(identifierName);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (!identifierPath.scope.hasGlobal(identifierName)) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
var assignmentChild = identifierPath.find(function (p) {
|
|
84
|
+
var _p$parentPath;
|
|
85
|
+
return (_p$parentPath = p.parentPath) === null || _p$parentPath === void 0 ? void 0 : _p$parentPath.isAssignmentExpression();
|
|
86
|
+
});
|
|
87
|
+
if (assignmentChild && t.isAssignmentExpression(assignmentChild.parent) && assignmentChild.parent.left === assignmentChild.node && !t.isMemberExpression(identifierPath.parent)) {
|
|
88
|
+
illegalGlobals.add(identifierName);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (!pendingReplacements.has(identifierName)) {
|
|
92
|
+
pendingReplacements.set(identifierName, [identifierPath]);
|
|
93
|
+
} else {
|
|
94
|
+
pendingReplacements.get(identifierName).push(identifierPath);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
});
|
|
58
98
|
|
|
59
|
-
|
|
99
|
+
// Remove illegal globals
|
|
100
|
+
illegalGlobals.forEach(function (globalName) {
|
|
101
|
+
pendingReplacements["delete"](globalName);
|
|
102
|
+
});
|
|
103
|
+
var _iterator = _createForOfIteratorHelper(pendingReplacements),
|
|
104
|
+
_step;
|
|
105
|
+
try {
|
|
106
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
107
|
+
var _step$value = _slicedToArray(_step.value, 2),
|
|
108
|
+
globalName = _step$value[0],
|
|
109
|
+
paths = _step$value[1];
|
|
110
|
+
var mapping = globalMapping.get(globalName);
|
|
111
|
+
if (!mapping) {
|
|
112
|
+
// Allow user to disable custom global variables
|
|
113
|
+
if (!(0, _probability.computeProbabilityMap)(me.options.globalConcealing, globalName)) continue;
|
|
114
|
+
mapping = gen.generate();
|
|
115
|
+
globalMapping.set(globalName, mapping);
|
|
116
|
+
}
|
|
60
117
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
118
|
+
// Replace global reference with getGlobal("name")
|
|
119
|
+
var callExpression = t.callExpression(t.identifier(globalFnName), [t.stringLiteral(mapping)]);
|
|
120
|
+
var nativeFunctionName = me.globalState.internals.nativeFunctionName;
|
|
121
|
+
var _iterator2 = _createForOfIteratorHelper(paths),
|
|
122
|
+
_step2;
|
|
123
|
+
try {
|
|
124
|
+
var _loop = function _loop() {
|
|
125
|
+
var path = _step2.value;
|
|
126
|
+
var replaceExpression = t.cloneNode(callExpression);
|
|
127
|
+
me.skip(replaceExpression);
|
|
128
|
+
if (
|
|
129
|
+
// Native Function will only be populated if tamper protection is enabled
|
|
130
|
+
nativeFunctionName &&
|
|
131
|
+
// Avoid maximum call stack error
|
|
132
|
+
!path.find(function (p) {
|
|
133
|
+
return p.node[_constants.MULTI_TRANSFORM] || me.isSkipped(p);
|
|
134
|
+
})) {
|
|
135
|
+
// First extract the member expression chain
|
|
136
|
+
var nameAndPropertyPath = [globalName];
|
|
137
|
+
var cursorPath = path;
|
|
138
|
+
var callExpressionPath = null;
|
|
139
|
+
var checkForCallExpression = function checkForCallExpression() {
|
|
140
|
+
var _cursorPath$parentPat;
|
|
141
|
+
if ((_cursorPath$parentPat = cursorPath.parentPath) !== null && _cursorPath$parentPat !== void 0 && _cursorPath$parentPat.isCallExpression() && cursorPath.key === "callee") {
|
|
142
|
+
callExpressionPath = cursorPath.parentPath;
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
if (!checkForCallExpression()) {
|
|
147
|
+
var _cursorPath;
|
|
148
|
+
cursorPath = (_cursorPath = cursorPath) === null || _cursorPath === void 0 ? void 0 : _cursorPath.parentPath;
|
|
149
|
+
while ((_cursorPath2 = cursorPath) !== null && _cursorPath2 !== void 0 && _cursorPath2.isMemberExpression()) {
|
|
150
|
+
var _cursorPath2;
|
|
151
|
+
var propertyString = (0, _astUtils.getMemberExpressionPropertyAsString)(cursorPath.node);
|
|
152
|
+
if (!propertyString || typeof propertyString !== "string") {
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
nameAndPropertyPath.push(propertyString);
|
|
156
|
+
if (checkForCallExpression()) break;
|
|
157
|
+
cursorPath = cursorPath.parentPath;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
64
160
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
161
|
+
// Eligible member-expression/identifier
|
|
162
|
+
if (callExpressionPath) {
|
|
163
|
+
// Check user's custom implementation
|
|
164
|
+
shouldTransform = me.obfuscator.shouldTransformNativeFunction(nameAndPropertyPath);
|
|
165
|
+
if (shouldTransform) {
|
|
166
|
+
path.replaceWith(replaceExpression);
|
|
69
167
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
var newNames = Object.create(null);
|
|
73
|
-
Object.keys(globals).forEach(name => {
|
|
74
|
-
var locations = globals[name];
|
|
75
|
-
var state;
|
|
76
|
-
do {
|
|
77
|
-
state = (0, _random.getRandomInteger)(-1000, 1000 + usedStates.size);
|
|
78
|
-
} while (usedStates.has(state));
|
|
79
|
-
usedStates.add(state);
|
|
80
|
-
newNames[name] = state;
|
|
81
|
-
locations.forEach(_ref => {
|
|
82
|
-
let [node, parents] = _ref;
|
|
83
|
-
this.replace(node, (0, _gen.CallExpression)((0, _gen.Identifier)(globalFn), [(0, _gen.Literal)(state)]));
|
|
84
|
-
});
|
|
85
|
-
});
|
|
168
|
+
// console.log("Hello World") ->
|
|
169
|
+
// checkNative(getGlobal("console")["log"])("Hello World")
|
|
86
170
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
171
|
+
// Parent-most member expression must be wrapped
|
|
172
|
+
// This to preserve proper 'this' binding in member expression invocations
|
|
173
|
+
var callee = callExpressionPath.get("callee");
|
|
174
|
+
var callArgs = [callee.node];
|
|
175
|
+
if (callee.isMemberExpression()) {
|
|
176
|
+
var additionalPropertyString = (0, _astUtils.getMemberExpressionPropertyAsString)(callee.node);
|
|
177
|
+
(0, _assert.ok)(additionalPropertyString, "Expected additional property to be a string");
|
|
178
|
+
callee = callee.get("object");
|
|
179
|
+
callArgs = [callee.node, t.stringLiteral(additionalPropertyString)];
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Method supports two signatures:
|
|
183
|
+
// checkNative(fetch)(...)
|
|
184
|
+
// checkNative(console, "log")(...)
|
|
185
|
+
|
|
186
|
+
callExpressionPath.get("callee").replaceWith(me.skip(t.callExpression(t.identifier(nativeFunctionName), callArgs)));
|
|
187
|
+
me.changeData.nativeFunctions++;
|
|
188
|
+
return 1; // continue
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
me.changeData.globals++;
|
|
193
|
+
|
|
194
|
+
// Regular replacement
|
|
195
|
+
// console -> getGlobal("console")
|
|
196
|
+
path.replaceWith(replaceExpression);
|
|
197
|
+
},
|
|
198
|
+
shouldTransform;
|
|
199
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
200
|
+
if (_loop()) continue;
|
|
201
|
+
}
|
|
202
|
+
} catch (err) {
|
|
203
|
+
_iterator2.e(err);
|
|
204
|
+
} finally {
|
|
205
|
+
_iterator2.f();
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// No globals changed, no need to insert the getGlobal function
|
|
210
|
+
} catch (err) {
|
|
211
|
+
_iterator.e(err);
|
|
212
|
+
} finally {
|
|
213
|
+
_iterator.f();
|
|
105
214
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
215
|
+
if (globalMapping.size === 0) return;
|
|
216
|
+
|
|
217
|
+
// The Global Concealing function returns the global variable from the specified parameter
|
|
218
|
+
var globalConcealingFunction = createGlobalConcealingFunction();
|
|
219
|
+
(0, _astUtils.prepend)(programPath, globalConcealingFunction);
|
|
220
|
+
var getGlobalVarFnName = me.getPlaceholder() + "_getGlobalVarFn";
|
|
221
|
+
|
|
222
|
+
// Insert the get global function
|
|
223
|
+
(0, _astUtils.prepend)(programPath, (0, _getGlobalTemplate.createGetGlobalTemplate)(me, programPath).compile({
|
|
224
|
+
getGlobalFnName: getGlobalVarFnName
|
|
225
|
+
}));
|
|
226
|
+
|
|
227
|
+
// Call the get global function and store result in 'globalVarName'
|
|
228
|
+
(0, _astUtils.prepend)(programPath, new _template["default"]("var ".concat(globalVarName, " = ").concat(getGlobalVarFnName, "()")).single());
|
|
229
|
+
}
|
|
115
230
|
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
exports.default = GlobalConcealing;
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
};
|