@@ -588,303 +588,4 @@ describe('LiteralTransformer', () => {
588
588
assert . match ( obfuscatedCode , regExp ) ;
589
589
} ) ;
590
590
} ) ;
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 = / v a r * _ 0 x ( [ a - f 0 - 9 ] ) { 4 } * = * \[ ' t e s t ' ] ; / g;
601
- const literalNodeVariant1RegExp : RegExp = / v a r * t e s t * = * _ 0 x ( [ a - f 0 - 9 ] ) { 4 } \( ' 0 x 0 ' \) ; / 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
- / v a r * _ 0 x ( [ a - f 0 - 9 ] ) { 4 } * = * \[ ' f o o ' , * ' b a r ' , * ' b a z ' ] ; / g,
660
- / v a r * _ 0 x ( [ a - f 0 - 9 ] ) { 4 } * = * \[ ' b a r ' , * ' b a z ' , * ' f o o ' ] ; / g,
661
- / v a r * _ 0 x ( [ a - f 0 - 9 ] ) { 4 } * = * \[ ' b a z ' , * ' f o o ' , * ' b a r ' ] ; / 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 = / v a r * _ 0 x ( [ a - f 0 - 9 ] ) { 4 } * = * \[ ' t e s t ' ] ; / g;
742
- const literalNodeVariant1RegExp : RegExp = / v a r * t e s t * = * _ 0 x ( [ a - f 0 - 9 ] ) { 4 } \( ' 0 x 0 ' \) ; / 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
- / v a r * _ 0 x ( [ a - f 0 - 9 ] ) { 4 } * = * \[ ' f o o ' , * ' b a r ' , * ' b a z ' ] ; / g,
799
- / v a r * _ 0 x ( [ a - f 0 - 9 ] ) { 4 } * = * \[ ' f o o ' , * ' b a z ' , * ' b a r ' ] ; / g,
800
- / v a r * _ 0 x ( [ a - f 0 - 9 ] ) { 4 } * = * \[ ' b a r ' , * ' f o o ' , * ' b a z ' ] ; / g,
801
- / v a r * _ 0 x ( [ a - f 0 - 9 ] ) { 4 } * = * \[ ' b a r ' , * ' b a z ' , * ' f o o ' ] ; / g,
802
- / v a r * _ 0 x ( [ a - f 0 - 9 ] ) { 4 } * = * \[ ' b a z ' , * ' f o o ' , * ' b a r ' ] ; / g,
803
- / v a r * _ 0 x ( [ a - f 0 - 9 ] ) { 4 } * = * \[ ' b a z ' , * ' b a r ' , * ' f o o ' ] ; / 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
- } ) ;
890
591
} ) ;
0 commit comments