Add force convert of unicode control characters to the unicode escape sequence

Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues
This commit is contained in:
sanex
2020-09-17 18:46:45 +03:00
parent a5ad91eb8c
commit 0094e7cfbc
7 changed files with 58 additions and 45 deletions
+20 -4
View File
@@ -4,6 +4,21 @@ import { IEscapeSequenceEncoder } from '../interfaces/utils/IEscapeSequenceEncod
@injectable()
export class EscapeSequenceEncoder implements IEscapeSequenceEncoder {
/**
* https://bytefreaks.net/gnulinux/regular-expression-to-match-any-ascii-character
*
* @type {RegExp}
*/
private static readonly ASCIICharactersRegExp: RegExp = /[\x00-\x7F]/;
/**
* https://en.wikipedia.org/wiki/List_of_Unicode_characters
* \x00-\x1F\x7F-\x9F are the control unicode characters
*
* @type {RegExp}
*/
private static readonly forceEscapeCharactersRegExp: RegExp = /[\x00-\x1F\x7F-\x9F'"\\\s]/;
/**
* @type {Map<string, string>}
*/
@@ -23,18 +38,19 @@ export class EscapeSequenceEncoder implements IEscapeSequenceEncoder {
const radix: number = 16;
const replaceRegExp: RegExp = new RegExp('[\\s\\S]', 'g');
const escapeSequenceRegExp: RegExp = new RegExp('[\'\"\\\\\\s]');
const regExp: RegExp = new RegExp('[\\x00-\\x7F]');
let prefix: string;
let template: string;
const result: string = string.replace(replaceRegExp, (character: string): string => {
if (!encodeAllSymbols && !escapeSequenceRegExp.exec(character)) {
const shouldEncodeCharacter: boolean = encodeAllSymbols
|| EscapeSequenceEncoder.forceEscapeCharactersRegExp.test(character);
if (!shouldEncodeCharacter) {
return character;
}
if (regExp.exec(character)) {
if (EscapeSequenceEncoder.ASCIICharactersRegExp.test(character)) {
prefix = '\\x';
template = '00';
} else {