8000 Extracted some LiteralTransformer tests to StringArrayStorage.spec.ts · sec-js/javascript-obfuscator@54be39b · GitHub
[go: up one dir, main page]

Skip to content

Commit 54be39b

Browse files
author
sanex3339
committed
Extracted some LiteralTransformer tests to StringArrayStorage.spec.ts
1 parent 309c678 commit 54be39b

File tree

5 files changed

+310
-299
lines changed

5 files changed

+310
-299
lines changed

test/functional-tests/node-transformers/obfuscating-transformers/literal-transformer/LiteralTransformer.spec.ts

Lines changed: 0 additions & 299 deletions
Original file line numberDiff line numberDiff line change
@@ -588,303 +588,4 @@ describe('LiteralTransformer', () => {
588588
assert.match(obfuscatedCode, regExp);
589589
});
590590
});
591-
592-
describe('Rotate string array', function () {
593-
this.timeout(100000);
594-
595-
describe('Variant #1: single string array value', () => {
596-
const samples: number = 1000;
597-
const delta: number = 0.1;
598-
const expectedVariantProbability: number = 1;
599-
600-
const stringArrayVariant1RegExp1: RegExp = /var *_0x([a-f0-9]){4} *= *\['test'];/g;
601-
const literalNodeVariant1RegExp: RegExp = /var *test *= *_0x([a-f0-9]){4}\('0x0'\);/g;
602-
603-
let stringArrayVariant1Probability: number,
604-
literalNodeVariant1Probability: number;
605-
606-
before(() => {
607-
const code: string = readFileAsString(__dirname + '/fixtures/simple-input.js');
608-
609-
let stringArrayVariant1MatchesLength: number = 0;
610-
let literalNodeVariant1MatchesLength: number = 0;
611-
612-
for (let i = 0; i < samples; i++) {
613-
const obfuscatedCode: string = JavaScriptObfuscator.obfuscate(
614-
code,
615-
{
616-
B41A ...NO_ADDITIONAL_NODES_PRESET,
617-
rotateStringArray: true,
618-
stringArray: true,
619-
stringArrayThreshold: 1
620-
}
621-
).getObfuscatedCode();
622-
623-
if (obfuscatedCode.match(stringArrayVariant1RegExp1)) {
624-
stringArrayVariant1MatchesLength++;
625-
}
626-
627-
if (obfuscatedCode.match(literalNodeVariant1RegExp)) {
628-
literalNodeVariant1MatchesLength++;
629-
}
630-
}
631-
632-
stringArrayVariant1Probability = stringArrayVariant1MatchesLength / samples;
633-
literalNodeVariant1Probability = literalNodeVariant1MatchesLength / samples;
634-
});
635-
636-
describe('String array probability', () => {
637-
it('Variant #1: should create single string array variant', () => {
638-
assert.closeTo(stringArrayVariant1Probability, expectedVariantProbability, delta);
639-
});
640-
});
641-
642-
describe('Literal node probability', () => {
643-
it('Variant #1: should replace literal node with call to string array variant', () => {
644-
assert.closeTo(literalNodeVariant1Probability, expectedVariantProbability, delta);
645-
});
646-
});
647-
});
648-
649-
describe('Variant #2: Three string array values', () => {
650-
const samples: number = 1000;
651-
const delta: number = 0.1;
652-
const expectedStringArrayVariantProbability: number = 0.33;
653-
const expectedLiteralNodeVariantProbability: number = 1;
654-
655-
const stringArrayVariantsCount: number = 3;
656-
const literalNodeVariantsCount: number = 1;
657-
658-
const stringArrayVariantRegExps: RegExp[] = [
659-
/var *_0x([a-f0-9]){4} *= *\['foo', *'bar', *'baz'];/g,
660-
/var *_0x([a-f0-9]){4} *= *\['bar', *'baz', *'foo'];/g,
661-
/var *_0x([a-f0-9]){4} *= *\['baz', *'foo', *'bar'];/g
662-
];
663-
const literalNodeVariantRegExps: RegExp[] = [
664-
new RegExp(
665-
`var *foo *= *_0x([a-f0-9]){4}\\('0x0'\\); *` +
666-
`var *bar *= *_0x([a-f0-9]){4}\\('0x1'\\); *` +
667-
`var *baz *= *_0x([a-f0-9]){4}\\('0x2'\\);`
668-
)
669-
];
670-
671-
const stringArrayVariantProbabilities: number[] = new Array(stringArrayVariantsCount).fill(0);
672-
const literalNodeVariantProbabilities: number[] = new Array(literalNodeVariantsCount).fill(0);
673-
674-
const stringArrayVariantMatchesLength: number[] = new Array(stringArrayVariantsCount).fill(0);
675-
const literalNodeVariantMatchesLength: number[] = new Array(literalNodeVariantsCount).fill(0);
676-
677-
before(() => {
678-
const code: string = readFileAsString(__dirname + '/fixtures/three-strings.js');
679-
680-
for (let i = 0; i < samples; i++) {
681-
const obfuscatedCode: string = JavaScriptObfuscator.obfuscate(
682-
code,
683-
{
684-
...NO_ADDITIONAL_NODES_PRESET,
685-
rotateStringArray: true,
686-
stringArray: true,
687-
stringArrayThreshold: 1
688-
}
689-
).getObfuscatedCode();
690-
691-
for (let variantIndex = 0; variantIndex < stringArrayVariantsCount; variantIndex++) {
692-
if (obfuscatedCode.match(stringArrayVariantRegExps[variantIndex])) {
693-
stringArrayVariantMatchesLength[variantIndex]++;
694-
}
695-
696-
if (obfuscatedCode.match(literalNodeVariantRegExps[variantIndex])) {
697-
literalNodeVariantMatchesLength[variantIndex]++;
698-
}
699-
}
700-
}
701-
702-
for (let variantIndex = 0; variantIndex < stringArrayVariantsCount; variantIndex++) {
703-
stringArrayVariantProbabilities[variantIndex] = stringArrayVariantMatchesLength[variantIndex] / samples;
704-
}
705-
706-
for (let variantIndex = 0; variantIndex < literalNodeVariantsCount; variantIndex++) {
707-
literalNodeVariantProbabilities[variantIndex] = literalNodeVariantMatchesLength[variantIndex] / samples;
708-
}
709-
});
710-
711-
describe('String array probability', () => {
712-
for (let variantIndex = 0; variantIndex < stringArrayVariantsCount; variantIndex++) {
713-
const variantNumber: number = variantIndex + 1;
714-
715-
it(`Variant #${variantNumber}: should create string array variant`, () => {
716-
assert.closeTo(stringArrayVariantProbabilities[variantIndex], expectedStringArrayVariantProbability, delta);
717-
});
718-
}
719-
});
720-
721-
describe('Literal node probability', () => {
722-
for (let variantIndex = 0; variantIndex < literalNodeVariantsCount; variantIndex++) {
723-
const variantNumber: number = variantIndex + 1;
724-
725-
it(`Variant #${variantNumber}: should replace literal node with call to string array variant`, () => {
726-
assert.closeTo(literalNodeVariantProbabilities[variantIndex], expectedLiteralNodeVariantProbability, delta);
727-
});
728-
}
729-
});
730-
});
731-
});
732-
733-
describe('Shuffle string array', function () {
734-
this.timeout(100000);
735-
736-
describe('Variant #1: single string array value', () => {
737-
const samples: number = 1000;
738-
const delta: number = 0.1;
739-
const expectedVariantProbability: number = 1;
740-
741-
const stringArrayVariantRegExp1: RegExp = /var *_0x([a-f0-9]){4} *= *\['test'];/g;
742-
const literalNodeVariant1RegExp: RegExp = /var *test *= *_0x([a-f0-9]){4}\('0x0'\);/g;
743-
744-
let stringArrayVariant1Probability: number,
745-
literalNodeVariant1Probability: number;
746-
747-
before(() => {
748-
const code: string = readFileAsString(__dirname + '/fixtures/simple-input.js');
749-
750-
let stringArrayVariant1MatchesLength: number = 0;
751-
let literalNodeVariant1MatchesLength: number = 0;
752-
753-
for (let i = 0; i < samples; i++) {
754-
const obfuscatedCode: string = JavaScriptObfuscator.obfuscate(
755-
code,
756-
{
757-
...NO_ADDITIONAL_NODES_PRESET,
758-
shuffleStringArray: true,
759-
stringArray: true,
760-
stringArrayThreshold: 1
761-
}
762-
).getObfuscatedCode();
763-
764-
if (obfuscatedCode.match(stringArrayVariantRegExp1)) {
765-
stringArrayVariant1MatchesLength++;
766-
}
767-
768-
if (obfuscatedCode.match(literalNodeVariant1RegExp)) {
769-
literalNodeVariant1MatchesLength++;
770-
}
771-
}
772-
773-
stringArrayVariant1Probability = stringArrayVariant1MatchesLength / samples;
774-
literalNodeVariant1Probability = literalNodeVariant1MatchesLength / samples;
775-
});
776-
777-
describe('String array probability', () => {
778-
it('Variant #1: should create string array variant', () => {
779-
assert.closeTo(stringArrayVariant1Probability, expectedVariantProbability, delta);
780-
});
781-
});
782-
783-
describe('Literal node probability', () => {
784-
it('Variant #1: should replace literal node with call to string array variant', () => {
785-
assert.closeTo(literalNodeVariant1Probability, expectedVariantProbability, delta);
786-
});
787-
});
788-
});
789-
790-
describe('Variant #2: Three string array values', () => {
791-
const samples: number = 1000;
792-
const delta: number = 0.1;
793-
const expectedVariantProbability: number = 0.166;
794-
795-
const variantsCount: number = 6;
796-
797-
const stringArrayVariantRegExps: RegExp[] = [
798-
/var *_0x([a-f0-9]){4} *= *\['foo', *'bar', *'baz'];/g,
799-
/var *_0x([a-f0-9]){4} *= *\['foo', *'baz', *'bar'];/g,
800-
/var *_0x([a-f0-9]){4} *= *\['bar', *'foo', *'baz'];/g,
801-
/var *_0x([a-f0-9]){4} *= *\['bar', *'baz', *'foo'];/g,
802-
/var *_0x([a-f0-9]){4} *= *\['baz', *'foo', *'bar'];/g,
803-
/var *_0x([a-f0-9]){4} *= *\['baz', *'bar', *'foo'];/g
804-
];
805-
806-
const literalNodeVariantRegExps: RegExp[] = [
807-
new RegExp(
808-
`var *foo *= *_0x([a-f0-9]){4}\\('0x0'\\); *` +
809-
`var *bar *= *_0x([a-f0-9]){4}\\('0x1'\\); *` +
810-
`var *baz *= *_0x([a-f0-9]){4}\\('0x2'\\);`
811-
),
812-
new RegExp(
813-
`var *foo *= *_0x([a-f0-9]){4}\\('0x0'\\); *` +
814-
`var *bar *= *_0x([a-f0-9]){4}\\('0x2'\\); *` +
815-
`var *baz *= *_0x([a-f0-9]){4}\\('0x1'\\);`
816-
),
817-
new RegExp(
818-
`var *foo *= *_0x([a-f0-9]){4}\\('0x1'\\); *` +
819-
`var *bar *= *_0x([a-f0-9]){4}\\('0x0'\\); *` +
820-
`var *baz *= *_0x([a-f0-9]){4}\\('0x2'\\);`
821-
),
822-
new RegExp(
823-
`var *foo *= *_0x([a-f0-9]){4}\\('0x1'\\); *` +
824-
`var *bar *= *_0x([a-f0-9]){4}\\('0x2'\\); *` +
825-
`var *baz *= *_0x([a-f0-9]){4}\\('0x0'\\);`
826-
),
827-
new RegExp(
828-
`var *foo *= *_0x([a-f0-9]){4}\\('0x2'\\); *` +
829-
`var *bar *= *_0x([a-f0-9]){4}\\('0x0'\\); *` +
830-
`var *baz *= *_0x([a-f0-9]){4}\\('0x1'\\);`
831-
),
832-
new RegExp(
833-
`var *foo *= *_0x([a-f0-9]){4}\\('0x2'\\); *` +
834-
`var *bar *= *_0x([a-f0-9]){4}\\('0x1'\\); *` +
835-
`var *baz *= *_0x([a-f0-9]){4}\\('0x0'\\);`
836-
)
837-
];
838-
839-
const stringArrayVariantProbabilities: number[] = new Array(variantsCount).fill(0);
840-
const literalNodeVariantProbabilities: number[] = new Array(variantsCount).fill(0);
841-
842-
const stringArrayVariantMatchesLength: number[] = new Array(variantsCount).fill(0);
843-
const literalNodeVariantMatchesLength: number[] = new Array(variantsCount).fill(0);
844-
845-
before(() => {
846-
const code: string = readFileAsString(__dirname + '/fixtures/three-strings.js');
847-
848-
for (let i = 0; i < samples; i++) {
849-
const obfuscatedCode: string = JavaScriptObfuscator.obfuscate(
850-
code,
851-
{
852-
...NO_ADDITIONAL_NODES_PRESET,
853-
shuffleStringArray: true,
854-
stringArray: true,
855-
stringArrayThreshold: 1
856-
}
857-
).getObfuscatedCode();
858-
859-
for (let variantIndex = 0; variantIndex < variantsCount; variantIndex++) {
860-
if (obfuscatedCode.match(stringArrayVariantRegExps[variantIndex])) {
861-
stringArrayVariantMatchesLength[variantIndex]++;
862-
}
863-
864-
if (obfuscatedCode.match(literalNodeVariantRegExps[variantIndex])) {
865-
literalNodeVariantMatchesLength[variantIndex]++;
866-
}
867-
}
868-
}
869-
870-
for (let variantIndex = 0; variantIndex < variantsCount; variantIndex++) {
871-
stringArrayVariantProbabilities[variantIndex] = stringArrayVariantMatchesLength[variantIndex] / samples;
872-
literalNodeVariantProbabilities[variantIndex] = literalNodeVariantMatchesLength[variantIndex] / samples;
873-
}
874-
875-
});
876-
877-
for (let variantIndex = 0; variantIndex < variantsCount; variantIndex++) {
878-
const variantNumber: number = variantIndex + 1;
879-
880-
it(`Variant #${variantNumber}: should create string array variant`, () => {
881-
assert.closeTo(stringArrayVariantProbabilities[variantIndex], expectedVariantProbability, delta);
882-
});
883-
884-
it(`Variant #${variantNumber}: should replace literal node with call to string array variant`, () => {
885-
assert.closeTo(literalNodeVariantProbabilities[variantIndex], expectedVariantProbability, delta);
886-
});
887-
}
888-
});
889-
});
890591
});

0 commit comments

Comments
 (0)
0