mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
Refactoring of mangle properties transformers and replacers
This commit is contained in:
Vendored
+18
-22
@@ -15982,7 +15982,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
||||
return function (target, key) { decorator(target, key, paramIndex); }
|
||||
};
|
||||
var _a, _b, _c;
|
||||
var ManglePropertiesTransformer_1, _a, _b, _c;
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.ManglePropertiesTransformer = void 0;
|
||||
const inversify_1 = __webpack_require__(/*! inversify */ "inversify");
|
||||
@@ -15993,11 +15993,17 @@ const IRandomGenerator_1 = __webpack_require__(/*! ../../interfaces/utils/IRando
|
||||
const NodeTransformationStage_1 = __webpack_require__(/*! ../../enums/node-transformers/NodeTransformationStage */ "./src/enums/node-transformers/NodeTransformationStage.ts");
|
||||
const AbstractNodeTransformer_1 = __webpack_require__(/*! ../AbstractNodeTransformer */ "./src/node-transformers/AbstractNodeTransformer.ts");
|
||||
const NodeGuards_1 = __webpack_require__(/*! ../../node/NodeGuards */ "./src/node/NodeGuards.ts");
|
||||
let ManglePropertiesTransformer = class ManglePropertiesTransformer extends AbstractNodeTransformer_1.AbstractNodeTransformer {
|
||||
let ManglePropertiesTransformer = ManglePropertiesTransformer_1 = class ManglePropertiesTransformer extends AbstractNodeTransformer_1.AbstractNodeTransformer {
|
||||
constructor(manglePropertiesObfuscatingReplacer, randomGenerator, options) {
|
||||
super(randomGenerator, options);
|
||||
this.manglePropertiesObfuscatingReplacer = manglePropertiesObfuscatingReplacer;
|
||||
}
|
||||
static isValidPropertyNode(propertyNode, propertyKeyNode) {
|
||||
if (NodeGuards_1.NodeGuards.isIdentifierNode(propertyKeyNode) && propertyNode.computed) {
|
||||
return false;
|
||||
}
|
||||
return NodeGuards_1.NodeGuards.isIdentifierNode(propertyKeyNode) || NodeGuards_1.NodeGuards.isLiteralNode(propertyKeyNode);
|
||||
}
|
||||
getVisitor(nodeTransformationStage) {
|
||||
switch (nodeTransformationStage) {
|
||||
case NodeTransformationStage_1.NodeTransformationStage.MangleProperties:
|
||||
@@ -16027,10 +16033,7 @@ let ManglePropertiesTransformer = class ManglePropertiesTransformer extends Abst
|
||||
}
|
||||
transformPropertyNode(propertyNode) {
|
||||
const propertyKeyNode = propertyNode.key;
|
||||
if (NodeGuards_1.NodeGuards.isIdentifierNode(propertyKeyNode) && propertyNode.computed) {
|
||||
return propertyNode;
|
||||
}
|
||||
if (NodeGuards_1.NodeGuards.isIdentifierNode(propertyKeyNode) || NodeGuards_1.NodeGuards.isLiteralNode(propertyKeyNode)) {
|
||||
if (ManglePropertiesTransformer_1.isValidPropertyNode(propertyNode, propertyKeyNode)) {
|
||||
propertyNode.key = this.manglePropertiesObfuscatingReplacer.replace(propertyKeyNode);
|
||||
propertyNode.shorthand = false;
|
||||
}
|
||||
@@ -16038,26 +16041,20 @@ let ManglePropertiesTransformer = class ManglePropertiesTransformer extends Abst
|
||||
}
|
||||
transformMemberExpressionNode(memberExpressionNode) {
|
||||
const propertyKeyNode = memberExpressionNode.property;
|
||||
if (NodeGuards_1.NodeGuards.isIdentifierNode(propertyKeyNode) && memberExpressionNode.computed) {
|
||||
return memberExpressionNode;
|
||||
}
|
||||
if (NodeGuards_1.NodeGuards.isIdentifierNode(propertyKeyNode) || NodeGuards_1.NodeGuards.isLiteralNode(propertyKeyNode)) {
|
||||
if (ManglePropertiesTransformer_1.isValidPropertyNode(memberExpressionNode, propertyKeyNode)) {
|
||||
memberExpressionNode.property = this.manglePropertiesObfuscatingReplacer.replace(propertyKeyNode);
|
||||
}
|
||||
return memberExpressionNode;
|
||||
}
|
||||
transformMethodDefinitionNode(methodDefinitionNode) {
|
||||
const propertyKeyNode = methodDefinitionNode.key;
|
||||
if (NodeGuards_1.NodeGuards.isIdentifierNode(propertyKeyNode) && methodDefinitionNode.computed) {
|
||||
return methodDefinitionNode;
|
||||
}
|
||||
if (NodeGuards_1.NodeGuards.isIdentifierNode(propertyKeyNode) || NodeGuards_1.NodeGuards.isLiteralNode(propertyKeyNode)) {
|
||||
if (ManglePropertiesTransformer_1.isValidPropertyNode(methodDefinitionNode, propertyKeyNode)) {
|
||||
methodDefinitionNode.key = this.manglePropertiesObfuscatingReplacer.replace(propertyKeyNode);
|
||||
}
|
||||
return methodDefinitionNode;
|
||||
}
|
||||
};
|
||||
ManglePropertiesTransformer = __decorate([
|
||||
ManglePropertiesTransformer = ManglePropertiesTransformer_1 = __decorate([
|
||||
inversify_1.injectable(),
|
||||
__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IManglePropertiesObfuscatingReplacer)),
|
||||
__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)),
|
||||
@@ -16117,17 +16114,16 @@ let ManglePropertiesReplacer = class ManglePropertiesReplacer {
|
||||
return node;
|
||||
}
|
||||
replacePropertyName(propertyName) {
|
||||
var _a;
|
||||
if (this.isReservedName(propertyName)) {
|
||||
return propertyName;
|
||||
}
|
||||
let mangledPropertyName;
|
||||
if (this.mangledPropertyNamesMap.has(propertyName)) {
|
||||
mangledPropertyName = this.mangledPropertyNamesMap.get(propertyName);
|
||||
}
|
||||
else {
|
||||
mangledPropertyName = this.identifierNamesGenerator.generateNext();
|
||||
this.mangledPropertyNamesMap.set(propertyName, mangledPropertyName);
|
||||
let mangledPropertyName = (_a = this.mangledPropertyNamesMap.get(propertyName)) !== null && _a !== void 0 ? _a : null;
|
||||
if (mangledPropertyName !== null) {
|
||||
return mangledPropertyName;
|
||||
}
|
||||
mangledPropertyName = this.identifierNamesGenerator.generateNext();
|
||||
this.mangledPropertyNamesMap.set(propertyName, mangledPropertyName);
|
||||
return mangledPropertyName;
|
||||
}
|
||||
isReservedName(name) {
|
||||
|
||||
Vendored
+18
-22
@@ -15309,7 +15309,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
||||
return function (target, key) { decorator(target, key, paramIndex); }
|
||||
};
|
||||
var _a, _b, _c;
|
||||
var ManglePropertiesTransformer_1, _a, _b, _c;
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.ManglePropertiesTransformer = void 0;
|
||||
const inversify_1 = __webpack_require__(/*! inversify */ "inversify");
|
||||
@@ -15320,11 +15320,17 @@ const IRandomGenerator_1 = __webpack_require__(/*! ../../interfaces/utils/IRando
|
||||
const NodeTransformationStage_1 = __webpack_require__(/*! ../../enums/node-transformers/NodeTransformationStage */ "./src/enums/node-transformers/NodeTransformationStage.ts");
|
||||
const AbstractNodeTransformer_1 = __webpack_require__(/*! ../AbstractNodeTransformer */ "./src/node-transformers/AbstractNodeTransformer.ts");
|
||||
const NodeGuards_1 = __webpack_require__(/*! ../../node/NodeGuards */ "./src/node/NodeGuards.ts");
|
||||
let ManglePropertiesTransformer = class ManglePropertiesTransformer extends AbstractNodeTransformer_1.AbstractNodeTransformer {
|
||||
let ManglePropertiesTransformer = ManglePropertiesTransformer_1 = class ManglePropertiesTransformer extends AbstractNodeTransformer_1.AbstractNodeTransformer {
|
||||
constructor(manglePropertiesObfuscatingReplacer, randomGenerator, options) {
|
||||
super(randomGenerator, options);
|
||||
this.manglePropertiesObfuscatingReplacer = manglePropertiesObfuscatingReplacer;
|
||||
}
|
||||
static isValidPropertyNode(propertyNode, propertyKeyNode) {
|
||||
if (NodeGuards_1.NodeGuards.isIdentifierNode(propertyKeyNode) && propertyNode.computed) {
|
||||
return false;
|
||||
}
|
||||
return NodeGuards_1.NodeGuards.isIdentifierNode(propertyKeyNode) || NodeGuards_1.NodeGuards.isLiteralNode(propertyKeyNode);
|
||||
}
|
||||
getVisitor(nodeTransformationStage) {
|
||||
switch (nodeTransformationStage) {
|
||||
case NodeTransformationStage_1.NodeTransformationStage.MangleProperties:
|
||||
@@ -15354,10 +15360,7 @@ let ManglePropertiesTransformer = class ManglePropertiesTransformer extends Abst
|
||||
}
|
||||
transformPropertyNode(propertyNode) {
|
||||
const propertyKeyNode = propertyNode.key;
|
||||
if (NodeGuards_1.NodeGuards.isIdentifierNode(propertyKeyNode) && propertyNode.computed) {
|
||||
return propertyNode;
|
||||
}
|
||||
if (NodeGuards_1.NodeGuards.isIdentifierNode(propertyKeyNode) || NodeGuards_1.NodeGuards.isLiteralNode(propertyKeyNode)) {
|
||||
if (ManglePropertiesTransformer_1.isValidPropertyNode(propertyNode, propertyKeyNode)) {
|
||||
propertyNode.key = this.manglePropertiesObfuscatingReplacer.replace(propertyKeyNode);
|
||||
propertyNode.shorthand = false;
|
||||
}
|
||||
@@ -15365,26 +15368,20 @@ let ManglePropertiesTransformer = class ManglePropertiesTransformer extends Abst
|
||||
}
|
||||
transformMemberExpressionNode(memberExpressionNode) {
|
||||
const propertyKeyNode = memberExpressionNode.property;
|
||||
if (NodeGuards_1.NodeGuards.isIdentifierNode(propertyKeyNode) && memberExpressionNode.computed) {
|
||||
return memberExpressionNode;
|
||||
}
|
||||
if (NodeGuards_1.NodeGuards.isIdentifierNode(propertyKeyNode) || NodeGuards_1.NodeGuards.isLiteralNode(propertyKeyNode)) {
|
||||
if (ManglePropertiesTransformer_1.isValidPropertyNode(memberExpressionNode, propertyKeyNode)) {
|
||||
memberExpressionNode.property = this.manglePropertiesObfuscatingReplacer.replace(propertyKeyNode);
|
||||
}
|
||||
return memberExpressionNode;
|
||||
}
|
||||
transformMethodDefinitionNode(methodDefinitionNode) {
|
||||
const propertyKeyNode = methodDefinitionNode.key;
|
||||
if (NodeGuards_1.NodeGuards.isIdentifierNode(propertyKeyNode) && methodDefinitionNode.computed) {
|
||||
return methodDefinitionNode;
|
||||
}
|
||||
if (NodeGuards_1.NodeGuards.isIdentifierNode(propertyKeyNode) || NodeGuards_1.NodeGuards.isLiteralNode(propertyKeyNode)) {
|
||||
if (ManglePropertiesTransformer_1.isValidPropertyNode(methodDefinitionNode, propertyKeyNode)) {
|
||||
methodDefinitionNode.key = this.manglePropertiesObfuscatingReplacer.replace(propertyKeyNode);
|
||||
}
|
||||
return methodDefinitionNode;
|
||||
}
|
||||
};
|
||||
ManglePropertiesTransformer = __decorate([
|
||||
ManglePropertiesTransformer = ManglePropertiesTransformer_1 = __decorate([
|
||||
inversify_1.injectable(),
|
||||
__param(0, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IManglePropertiesObfuscatingReplacer)),
|
||||
__param(1, inversify_1.inject(ServiceIdentifiers_1.ServiceIdentifiers.IRandomGenerator)),
|
||||
@@ -15444,17 +15441,16 @@ let ManglePropertiesReplacer = class ManglePropertiesReplacer {
|
||||
return node;
|
||||
}
|
||||
replacePropertyName(propertyName) {
|
||||
var _a;
|
||||
if (this.isReservedName(propertyName)) {
|
||||
return propertyName;
|
||||
}
|
||||
let mangledPropertyName;
|
||||
if (this.mangledPropertyNamesMap.has(propertyName)) {
|
||||
mangledPropertyName = this.mangledPropertyNamesMap.get(propertyName);
|
||||
}
|
||||
else {
|
||||
mangledPropertyName = this.identifierNamesGenerator.generateNext();
|
||||
this.mangledPropertyNamesMap.set(propertyName, mangledPropertyName);
|
||||
let mangledPropertyName = (_a = this.mangledPropertyNamesMap.get(propertyName)) !== null && _a !== void 0 ? _a : null;
|
||||
if (mangledPropertyName !== null) {
|
||||
return mangledPropertyName;
|
||||
}
|
||||
mangledPropertyName = this.identifierNamesGenerator.generateNext();
|
||||
this.mangledPropertyNamesMap.set(propertyName, mangledPropertyName);
|
||||
return mangledPropertyName;
|
||||
}
|
||||
isReservedName(name) {
|
||||
|
||||
+3
-3
@@ -2,8 +2,8 @@ import * as ESTree from 'estree';
|
||||
|
||||
export interface IManglePropertiesReplacer {
|
||||
/**
|
||||
* @param {TNode} node
|
||||
* @returns {TNode}
|
||||
* @param {ESTree.Identifier | ESTree.Literal} node
|
||||
* @returns {ESTree.Identifier | ESTree.Literal}
|
||||
*/
|
||||
replace <TNode extends ESTree.Identifier | ESTree.Literal> (node: TNode): TNode;
|
||||
replace (node: ESTree.Identifier | ESTree.Literal): ESTree.Identifier | ESTree.Literal;
|
||||
}
|
||||
|
||||
+21
-15
@@ -36,6 +36,24 @@ export class ManglePropertiesTransformer extends AbstractNodeTransformer {
|
||||
this.manglePropertiesObfuscatingReplacer = manglePropertiesObfuscatingReplacer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {TNode} propertyNode
|
||||
* @param {ESTree.Expression} propertyKeyNode
|
||||
* @returns {boolean}
|
||||
*/
|
||||
private static isValidPropertyNode<
|
||||
TNode extends ESTree.Property | ESTree.MemberExpression | ESTree.MethodDefinition
|
||||
>(
|
||||
propertyNode: TNode,
|
||||
propertyKeyNode: ESTree.Expression
|
||||
): propertyKeyNode is ESTree.Identifier | ESTree.Literal {
|
||||
if (NodeGuards.isIdentifierNode(propertyKeyNode) && propertyNode.computed) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return NodeGuards.isIdentifierNode(propertyKeyNode) || NodeGuards.isLiteralNode(propertyKeyNode);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {NodeTransformationStage} nodeTransformationStage
|
||||
* @returns {IVisitor | null}
|
||||
@@ -86,11 +104,7 @@ export class ManglePropertiesTransformer extends AbstractNodeTransformer {
|
||||
private transformPropertyNode (propertyNode: ESTree.Property): ESTree.Property {
|
||||
const propertyKeyNode: ESTree.Expression = propertyNode.key;
|
||||
|
||||
if (NodeGuards.isIdentifierNode(propertyKeyNode) && propertyNode.computed) {
|
||||
return propertyNode;
|
||||
}
|
||||
|
||||
if (NodeGuards.isIdentifierNode(propertyKeyNode) || NodeGuards.isLiteralNode(propertyKeyNode)) {
|
||||
if (ManglePropertiesTransformer.isValidPropertyNode(propertyNode, propertyKeyNode)) {
|
||||
propertyNode.key = this.manglePropertiesObfuscatingReplacer.replace(propertyKeyNode);
|
||||
propertyNode.shorthand = false;
|
||||
}
|
||||
@@ -105,11 +119,7 @@ export class ManglePropertiesTransformer extends AbstractNodeTransformer {
|
||||
private transformMemberExpressionNode (memberExpressionNode: ESTree.MemberExpression): ESTree.MemberExpression {
|
||||
const propertyKeyNode: ESTree.Expression = memberExpressionNode.property;
|
||||
|
||||
if (NodeGuards.isIdentifierNode(propertyKeyNode) && memberExpressionNode.computed) {
|
||||
return memberExpressionNode;
|
||||
}
|
||||
|
||||
if (NodeGuards.isIdentifierNode(propertyKeyNode) || NodeGuards.isLiteralNode(propertyKeyNode)) {
|
||||
if (ManglePropertiesTransformer.isValidPropertyNode(memberExpressionNode, propertyKeyNode)) {
|
||||
memberExpressionNode.property = this.manglePropertiesObfuscatingReplacer.replace(propertyKeyNode);
|
||||
}
|
||||
|
||||
@@ -123,11 +133,7 @@ export class ManglePropertiesTransformer extends AbstractNodeTransformer {
|
||||
private transformMethodDefinitionNode (methodDefinitionNode: ESTree.MethodDefinition): ESTree.MethodDefinition {
|
||||
const propertyKeyNode: ESTree.Expression = methodDefinitionNode.key;
|
||||
|
||||
if (NodeGuards.isIdentifierNode(propertyKeyNode) && methodDefinitionNode.computed) {
|
||||
return methodDefinitionNode;
|
||||
}
|
||||
|
||||
if (NodeGuards.isIdentifierNode(propertyKeyNode) || NodeGuards.isLiteralNode(propertyKeyNode)) {
|
||||
if (ManglePropertiesTransformer.isValidPropertyNode(methodDefinitionNode, propertyKeyNode)) {
|
||||
methodDefinitionNode.key = this.manglePropertiesObfuscatingReplacer.replace(propertyKeyNode);
|
||||
}
|
||||
|
||||
|
||||
+11
-11
@@ -52,18 +52,18 @@ export class ManglePropertiesReplacer implements IManglePropertiesReplacer {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} node
|
||||
* @returns {string}
|
||||
* @param {ESTree.Identifier | ESTree.Literal} node
|
||||
* @returns {ESTree.Identifier | ESTree.Literal}
|
||||
*/
|
||||
public replace <TNode extends ESTree.Identifier | ESTree.Literal> (node: TNode): TNode {
|
||||
public replace (node: ESTree.Identifier | ESTree.Literal): ESTree.Identifier | ESTree.Literal {
|
||||
if (NodeGuards.isIdentifierNode(node)) {
|
||||
return <TNode>NodeFactory.identifierNode(
|
||||
return NodeFactory.identifierNode(
|
||||
this.replacePropertyName(node.name)
|
||||
);
|
||||
}
|
||||
|
||||
if (NodeGuards.isLiteralNode(node) && typeof node.value === 'string') {
|
||||
return <TNode>NodeFactory.literalNode(
|
||||
return NodeFactory.literalNode(
|
||||
this.replacePropertyName(node.value)
|
||||
);
|
||||
}
|
||||
@@ -81,15 +81,15 @@ export class ManglePropertiesReplacer implements IManglePropertiesReplacer {
|
||||
return propertyName;
|
||||
}
|
||||
|
||||
let mangledPropertyName: string;
|
||||
let mangledPropertyName: string | null = this.mangledPropertyNamesMap.get(propertyName) ?? null;
|
||||
|
||||
if (this.mangledPropertyNamesMap.has(propertyName)) {
|
||||
mangledPropertyName = <string>this.mangledPropertyNamesMap.get(propertyName);
|
||||
} else {
|
||||
mangledPropertyName = this.identifierNamesGenerator.generateNext();
|
||||
this.mangledPropertyNamesMap.set(propertyName, mangledPropertyName);
|
||||
if (mangledPropertyName !== null) {
|
||||
return mangledPropertyName;
|
||||
}
|
||||
|
||||
mangledPropertyName = this.identifierNamesGenerator.generateNext();
|
||||
this.mangledPropertyNamesMap.set(propertyName, mangledPropertyName);
|
||||
|
||||
return mangledPropertyName;
|
||||
}
|
||||
|
||||
|
||||
+13
-17
@@ -7,31 +7,27 @@ import { NO_ADDITIONAL_NODES_PRESET } from '../../src/options/presets/NoCustomNo
|
||||
|
||||
let obfuscatedCode: string = JavaScriptObfuscator.obfuscate(
|
||||
`
|
||||
const foo = {
|
||||
prop1: {
|
||||
prop2: 'bar'
|
||||
var x = {
|
||||
baz_: 0,
|
||||
foo_: 1,
|
||||
calc: function() {
|
||||
return this.foo_ + this.baz_;
|
||||
}
|
||||
};
|
||||
|
||||
foo.prop1.prop2;
|
||||
|
||||
const {prop1} = foo;
|
||||
console.log(prop1.prop2);
|
||||
|
||||
class Foo {
|
||||
prop1 () {}
|
||||
}
|
||||
|
||||
const s = new Foo();
|
||||
|
||||
s.prop1();
|
||||
x.bar_ = 2;
|
||||
x["baz_"] = 3;
|
||||
console.log(x.calc());
|
||||
`,
|
||||
{
|
||||
...NO_ADDITIONAL_NODES_PRESET,
|
||||
compact: false,
|
||||
log: true,
|
||||
identifierNamesGenerator: 'mangled',
|
||||
renameGlobals: true,
|
||||
splitStrings: true,
|
||||
splitStringsChunkLength: 3
|
||||
splitStringsChunkLength: 3,
|
||||
stringArray: true,
|
||||
stringArrayThreshold: 1
|
||||
}
|
||||
).getObfuscatedCode();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user