X Tutup
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .ncurc
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
{
"reject": []
"reject": [
"@types/estree"
]
}
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
Change Log

v1.2.0
---
* Conditional comments will be removed from the code after obfuscation. https://github.com/javascript-obfuscator/javascript-obfuscator/issues/641

v1.1.1
---
* Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/638
Expand Down
12 changes: 6 additions & 6 deletions dist/index.browser.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/index.cli.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/index.js

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "javascript-obfuscator",
"version": "1.1.1",
"version": "1.2.0",
"description": "JavaScript obfuscator",
"keywords": [
"obfuscator",
Expand Down Expand Up @@ -54,7 +54,7 @@
"@types/mkdirp": "1.0.1",
"@types/mocha": "7.0.2",
"@types/multimatch": "4.0.0",
"@types/node": "14.0.13",
"@types/node": "14.0.14",
"@types/rimraf": "3.0.0",
"@types/sinon": "9.0.4",
"@types/string-template": "1.0.2",
Expand All @@ -65,12 +65,12 @@
"coveralls": "3.1.0",
"eslint": "7.3.1",
"eslint-plugin-import": "2.21.2",
"eslint-plugin-jsdoc": "28.0.0",
"eslint-plugin-jsdoc": "28.5.1",
"eslint-plugin-no-null": "1.0.2",
"eslint-plugin-prefer-arrow": "1.2.1",
"eslint-plugin-unicorn": "20.1.0",
"fork-ts-checker-notifier-webpack-plugin": "3.0.0",
"fork-ts-checker-webpack-plugin": "5.0.4",
"fork-ts-checker-webpack-plugin": "5.0.5",
"mocha": "8.0.1",
"nyc": "15.1.0",
"pjson": "1.0.9",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import { IVisitor } from '../../interfaces/node-transformers/IVisitor';
import { NodeTransformationStage } from '../../enums/node-transformers/NodeTransformationStage';

import { AbstractNodeTransformer } from '../AbstractNodeTransformer';
import { ConditionalCommentObfuscatingGuard } from '../preparing-transformers/obfuscating-guards/ConditionalCommentObfuscatingGuard';
import { NodeGuards } from '../../node/NodeGuards';

@injectable()
Expand All @@ -33,6 +32,8 @@ export class CommentsTransformer extends AbstractNodeTransformer {
@inject(ServiceIdentifiers.IOptions) options: IOptions
) {
super(randomGenerator, options);

this.filterComment = this.filterComment.bind(this);
}

/**
Expand All @@ -50,25 +51,29 @@ export class CommentsTransformer extends AbstractNodeTransformer {
}
};

case NodeTransformationStage.Finalizing:
return {
leave: (node: ESTree.Node): ESTree.Node | undefined => {
if (NodeGuards.isProgramNode(node)) {
return this.filterComments(node);
}
}
};

default:
return null;
}
}

/**
* Removes all comments from node except comments that contain
* `@license`, `@preserve` or `javascript-obfuscator` words
* Move comments to their nodes
*
* @param {Node} rootNode
* @returns {NodeGuards}
* Moves comments to their nodes
*/
public transformNode (rootNode: ESTree.Program): ESTree.Node {
if (!rootNode.comments || !rootNode.comments.length) {
return rootNode;
}

const comments: ESTree.Comment[] = this.transformComments(rootNode.comments);
const comments: ESTree.Comment[] = rootNode.comments.reverse();

if (comments.length === 0) {
return rootNode;
Expand Down Expand Up @@ -109,14 +114,33 @@ export class CommentsTransformer extends AbstractNodeTransformer {
}

/**
* @param {Comment[]} comments
* @returns {Comment[]}
* Removes all comments from node except comments that contain preserved words
*
* @param {Node} rootNode
* @returns {NodeGuards}
*/
public filterComments (rootNode: ESTree.Program): ESTree.Node {
estraverse.traverse(rootNode, {
enter: (node: ESTree.Node): void => {
if (node.leadingComments) {
node.leadingComments = node.leadingComments?.filter(this.filterComment);
}

if (node.trailingComments) {
node.trailingComments = node.trailingComments?.filter(this.filterComment);
}
}
});

return rootNode;
}

/**
* @param {ESTree.Comment} comment
* @returns {boolean}
*/
private transformComments (comments: ESTree.Comment[]): ESTree.Comment[] {
return comments.filter((comment: ESTree.Comment) =>
CommentsTransformer.preservedWords
.some((preservedWord: string) => comment.value.includes(preservedWord)) ||
ConditionalCommentObfuscatingGuard.isConditionalComment(comment)
).reverse();
private filterComment (comment: ESTree.Comment): boolean {
return CommentsTransformer.preservedWords
.some((preservedWord: string) => comment.value.includes(preservedWord));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,6 @@ export class ConditionalCommentObfuscatingGuard implements IObfuscatingGuard {
*/
private obfuscationAllowed: boolean = true;

/**
* @param {Comment} comment
* @returns {boolean}
*/
public static isConditionalComment (comment: ESTree.Comment): boolean {
return ConditionalCommentObfuscatingGuard.obfuscationEnableCommentRegExp.test(comment.value) ||
ConditionalCommentObfuscatingGuard.obfuscationDisableCommentRegExp.test(comment.value);
}

/**
* @returns {boolean}
* @param node
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { readFileAsString } from '../../../../../helpers/readFileAsString';
describe('ConditionalCommentObfuscatingGuard', () => {
describe('check', () => {
describe('Variant #1: `disable` conditional comment', () => {
const disableConditionalCommentRegExp: RegExp = /\/\/ *javascript-obfuscator:disable/;
const obfuscatedVariableDeclarationRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *0x1;/;
const ignoredVariableDeclarationRegExp: RegExp = /var bar *= *2;/;
const consoleLogRegExp: RegExp = /console.log\(_0x([a-f0-9]){4,6}\);/;
Expand All @@ -26,20 +27,26 @@ describe('ConditionalCommentObfuscatingGuard', () => {
).getObfuscatedCode();
});

it('match #1: should obfuscate variable declaration before `disable` conditional comment', () => {
it('match #1: should remove `disable` conditional comment from the code', () => {
assert.notMatch(obfuscatedCode, disableConditionalCommentRegExp);
});

it('match #2: should obfuscate variable declaration before `disable` conditional comment', () => {
assert.match(obfuscatedCode, obfuscatedVariableDeclarationRegExp);
});

it('match #2: should ignore variable declaration after `disable` conditional comment', () => {
it('match #3: should ignore variable declaration after `disable` conditional comment', () => {
assert.match(obfuscatedCode, ignoredVariableDeclarationRegExp);
});

it('match #3: should obfuscate variable name in `console.log`', () => {
it('match #4: should obfuscate variable name in `console.log`', () => {
assert.match(obfuscatedCode, consoleLogRegExp);
});
});

describe('Variant #2: `disable` and `enable` conditional comments #1', () => {
const disableConditionalCommentRegExp: RegExp = /\/\/ *javascript-obfuscator:disable/;
const enableConditionalCommentRegExp: RegExp = /\/\/ *javascript-obfuscator:enable/;
const obfuscatedVariableDeclaration1RegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *0x1;/;
const obfuscatedVariableDeclaration2RegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *0x3;/;
const ignoredVariableDeclarationRegExp: RegExp = /var bar *= *2;/;
Expand All @@ -57,15 +64,23 @@ describe('ConditionalCommentObfuscatingGuard', () => {
).getObfuscatedCode();
});

it('match #1: should obfuscate variable declaration before `disable` conditional comment', () => {
it('match #1: should remove `disable` conditional comment from the code', () => {
assert.notMatch(obfuscatedCode, disableConditionalCommentRegExp);
});

it('match #2: should remove `enable` conditional comment from the code', () => {
assert.notMatch(obfuscatedCode, enableConditionalCommentRegExp);
});

it('match #3: should obfuscate variable declaration before `disable` conditional comment', () => {
assert.match(obfuscatedCode, obfuscatedVariableDeclaration1RegExp);
});

it('match #2: should ignore variable declaration after `disable` conditional comment', () => {
it('match #4: should ignore variable declaration after `disable` conditional comment', () => {
assert.match(obfuscatedCode, ignoredVariableDeclarationRegExp);
});

it('match #3: should obfuscate variable declaration after `enable` conditional comment', () => {
it('match #5: should obfuscate variable declaration after `enable` conditional comment', () => {
assert.match(obfuscatedCode, obfuscatedVariableDeclaration2RegExp);
});
});
Expand Down
24 changes: 12 additions & 12 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -369,10 +369,10 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.3.tgz#6356df2647de9eac569f9a52eda3480fa9e70b4d"
integrity sha512-01s+ac4qerwd6RHD+mVbOEsraDHSgUaefQlEdBbUolnQFjKwCr7luvAlEwW1RFojh67u0z4OUTjPn9LEl4zIkA==

"@types/node@14.0.13":
version "14.0.13"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.13.tgz#ee1128e881b874c371374c1f72201893616417c9"
integrity sha512-rouEWBImiRaSJsVA+ITTFM6ZxibuAlTuNOCyxVbwreu6k6+ujs7DfnU9o+PShFhET78pMBl3eH+AGSI5eOTkPA==
"@types/node@14.0.14":
version "14.0.14"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.14.tgz#24a0b5959f16ac141aeb0c5b3cd7a15b7c64cbce"
integrity sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ==

"@types/normalize-package-data@^2.4.0":
version "2.4.0"
Expand Down Expand Up @@ -1908,10 +1908,10 @@ eslint-plugin-import@2.21.2:
resolve "^1.17.0"
tsconfig-paths "^3.9.0"

eslint-plugin-jsdoc@28.0.0:
version "28.0.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-28.0.0.tgz#e726a79b4a0e16e8602022d55e0e705e91dc0f50"
integrity sha512-Etne7B8AQcgXrnDPXdfV4x+szHVEP+JVZ2cYNfZGn+HoaZigIOzxxJGU+QUhymz6vuz0fpzFM6fTt64XOvw69w==
eslint-plugin-jsdoc@28.5.1:
version "28.5.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-28.5.1.tgz#5a95ee8705af389ba2062a1036be6077b5e62f3f"
integrity sha512-1XSWu8UnGwqO8mX3XKGofffL83VRt00ptq0m5OrTLFDN3At4x+/pJ8YHJONKhGC35TtjskcS9/RR6F9pjQ8c+w==
dependencies:
comment-parser "^0.7.5"
debug "^4.1.1"
Expand Down Expand Up @@ -2339,10 +2339,10 @@ fork-ts-checker-notifier-webpack-plugin@3.0.0:
dependencies:
node-notifier "^6.0.0"

fork-ts-checker-webpack-plugin@5.0.4:
version "5.0.4"
resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-5.0.4.tgz#92ae758e581239e1e37ddd5a6c9cb955764ef470"
integrity sha512-nSEqM3KhAjTf8VmuZym2k6WadIasvXybJExFegqMJDkTrOBOY8yGjsXG2FGFJls3DOHtXKzrr3Bv0ZD1LaM7cA==
fork-ts-checker-webpack-plugin@5.0.5:
version "5.0.5"
resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-5.0.5.tgz#4cf77f925008464db4670750a6e9266a4d25a988"
integrity sha512-2vpP+irspLOpZ1pcH3K3yR76MWXVSOYKTGwhwFQGnWjOs5MxzPN+dyDh1tNoaD5DUFP5kr4lGQURE9Qk+DpiUQ==
dependencies:
"@babel/code-frame" "^7.8.3"
chalk "^2.4.1"
Expand Down
X Tutup