LiteralObfuscator.spec.ts 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import { assert } from 'chai';
  2. import { IObfuscationResult } from '../../../../src/interfaces/IObfuscationResult';
  3. import { NO_CUSTOM_NODES_PRESET } from '../../../../src/preset-options/NoCustomNodesPreset';
  4. import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscator';
  5. describe('LiteralObfuscator', () => {
  6. describe('obfuscation of literal node with string value', () => {
  7. it('should replace literal node value with unicode escape sequence', () => {
  8. let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
  9. `var test = 'test';`,
  10. {
  11. ...NO_CUSTOM_NODES_PRESET
  12. }
  13. );
  14. assert.match(obfuscationResult.getObfuscatedCode(), /^var *test *= *'\\x74\\x65\\x73\\x74';$/);
  15. });
  16. it('should replace literal node value with unicode escape sequence from unicode array', () => {
  17. let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
  18. `var test = 'test';`,
  19. {
  20. ...NO_CUSTOM_NODES_PRESET,
  21. stringArray: true,
  22. stringArrayThreshold: 1
  23. }
  24. );
  25. assert.match(
  26. obfuscationResult.getObfuscatedCode(),
  27. /^var *_0x([a-z0-9]){4} *= *\['\\x74\\x65\\x73\\x74'\];/
  28. );
  29. assert.match(obfuscationResult.getObfuscatedCode(), /var *test *= *_0x([a-z0-9]){4}\('0x0'\);/);
  30. });
  31. it('should replace literal node value with raw value from unicode array if `unicodeEscapeSequence` is disabled', () => {
  32. let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
  33. `var test = 'test';`,
  34. {
  35. ...NO_CUSTOM_NODES_PRESET,
  36. stringArray: true,
  37. stringArrayThreshold: 1,
  38. unicodeEscapeSequence: false
  39. }
  40. );
  41. assert.match(
  42. obfuscationResult.getObfuscatedCode(),
  43. /^var *_0x([a-z0-9]){4} *= *\['test'\];/
  44. );
  45. assert.match(obfuscationResult.getObfuscatedCode(), /var *test *= *_0x([a-z0-9]){4}\('0x0'\);/);
  46. });
  47. it('shouldn\'t replace short literal node value with unicode array value', () => {
  48. let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
  49. `var test = 'te';`,
  50. {
  51. ...NO_CUSTOM_NODES_PRESET,
  52. stringArray: true,
  53. stringArrayThreshold: 1
  54. }
  55. );
  56. assert.match(obfuscationResult.getObfuscatedCode(), /var *test *= *'\\x74\\x65';/);
  57. });
  58. it('should replace literal node value with unicode array value encoded using base64', () => {
  59. let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
  60. `var test = 'test';`,
  61. {
  62. ...NO_CUSTOM_NODES_PRESET,
  63. stringArray: true,
  64. stringArrayEncoding: 'base64',
  65. stringArrayThreshold: 1
  66. }
  67. );
  68. assert.match(
  69. obfuscationResult.getObfuscatedCode(),
  70. /^var *_0x([a-z0-9]){4} *= *\['\\x64\\x47\\x56\\x7a\\x64\\x41\\x3d\\x3d'\];/
  71. );
  72. assert.match(obfuscationResult.getObfuscatedCode(), /var *test *= *_0x([a-z0-9]){4}\('0x0'\);/);
  73. });
  74. it('should replace literal node value with unicode array value encoded using rc4', () => {
  75. let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
  76. `var test = 'test';`,
  77. {
  78. ...NO_CUSTOM_NODES_PRESET,
  79. stringArray: true,
  80. stringArrayEncoding: 'rc4',
  81. stringArrayThreshold: 1
  82. }
  83. );
  84. assert.match(
  85. obfuscationResult.getObfuscatedCode(),
  86. /var *test *= *_0x([a-z0-9]){4}\('0x0', '(\\x[a-f0-9]*){4}'\);/
  87. );
  88. });
  89. });
  90. it('should obfuscate literal node with boolean value', () => {
  91. let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
  92. `var test = true;`,
  93. {
  94. ...NO_CUSTOM_NODES_PRESET,
  95. stringArray: true,
  96. stringArrayThreshold: 1
  97. }
  98. );
  99. assert.match(obfuscationResult.getObfuscatedCode(), /^var *test *= *!!\[\];$/);
  100. });
  101. it('should obfuscate literal node with number value', () => {
  102. let obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
  103. `var test = 0;`,
  104. {
  105. ...NO_CUSTOM_NODES_PRESET,
  106. stringArray: true,
  107. stringArrayThreshold: 1
  108. }
  109. );
  110. assert.match(obfuscationResult.getObfuscatedCode(), /^var *test *= *0x0;$/);
  111. });
  112. });