SelfDefendingTemplate.spec.ts 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. import { assert } from 'chai';
  2. import { readFileAsString } from '../../../../helpers/readFileAsString';
  3. import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes';
  4. import { IdentifierNamesGenerator } from '../../../../../src/enums/generators/identifier-names-generators/IdentifierNamesGenerator';
  5. import { evaluateInWorker } from '../../../../helpers/evaluateInWorker';
  6. import { JavaScriptObfuscator } from '../../../../../src/JavaScriptObfuscatorFacade';
  7. describe('SelfDefendingTemplate', function () {
  8. const evaluationTimeout: number = 3500;
  9. this.timeout(10000);
  10. describe('Variant #1: correctly obfuscate code with `HexadecimalIdentifierNamesGenerator``', () => {
  11. const expectedEvaluationResult: number = 1;
  12. let obfuscatedCode: string,
  13. evaluationResult: number = 0;
  14. before((done) => {
  15. const code: string = readFileAsString(__dirname + '/fixtures/input.js');
  16. obfuscatedCode = JavaScriptObfuscator.obfuscate(
  17. code,
  18. {
  19. ...NO_ADDITIONAL_NODES_PRESET,
  20. selfDefending: true,
  21. identifierNamesGenerator: IdentifierNamesGenerator.HexadecimalIdentifierNamesGenerator
  22. }
  23. ).getObfuscatedCode();
  24. evaluateInWorker(
  25. obfuscatedCode,
  26. (response: number) => {
  27. evaluationResult = response;
  28. done();
  29. },
  30. () => {
  31. done();
  32. },
  33. () => {
  34. done();
  35. },
  36. evaluationTimeout
  37. );
  38. });
  39. it('should correctly evaluate code with enabled self defending', () => {
  40. assert.equal(evaluationResult, expectedEvaluationResult);
  41. });
  42. });
  43. describe('Variant #2: correctly obfuscate code with `MangledIdentifierNamesGenerator` option', () => {
  44. const expectedEvaluationResult: number = 1;
  45. let obfuscatedCode: string,
  46. evaluationResult: number = 0;
  47. before((done) => {
  48. const code: string = readFileAsString(__dirname + '/fixtures/input.js');
  49. obfuscatedCode = JavaScriptObfuscator.obfuscate(
  50. code,
  51. {
  52. ...NO_ADDITIONAL_NODES_PRESET,
  53. selfDefending: true,
  54. identifierNamesGenerator: IdentifierNamesGenerator.MangledIdentifierNamesGenerator
  55. }
  56. ).getObfuscatedCode();
  57. evaluateInWorker(
  58. obfuscatedCode,
  59. (response: number) => {
  60. evaluationResult = response;
  61. done();
  62. },
  63. () => {
  64. done();
  65. },
  66. () => {
  67. done();
  68. },
  69. evaluationTimeout
  70. );
  71. });
  72. it('should correctly evaluate code with enabled self defending', () => {
  73. assert.equal(evaluationResult, expectedEvaluationResult);
  74. });
  75. });
  76. describe('Variant #3: correctly obfuscate code with `DictionaryIdentifierNamesGenerator` option', () => {
  77. const expectedEvaluationResult: number = 1;
  78. let obfuscatedCode: string,
  79. evaluationResult: number = 0;
  80. before((done) => {
  81. const code: string = readFileAsString(__dirname + '/fixtures/input.js');
  82. obfuscatedCode = JavaScriptObfuscator.obfuscate(
  83. code,
  84. {
  85. ...NO_ADDITIONAL_NODES_PRESET,
  86. selfDefending: true,
  87. identifierNamesGenerator: IdentifierNamesGenerator.DictionaryIdentifierNamesGenerator,
  88. identifiersDictionary: ['foo', 'bar', 'baz', 'bark', 'hawk', 'eagle']
  89. }
  90. ).getObfuscatedCode();
  91. evaluateInWorker(
  92. obfuscatedCode,
  93. (response: number) => {
  94. evaluationResult = response;
  95. done();
  96. },
  97. () => {
  98. done();
  99. },
  100. () => {
  101. done();
  102. },
  103. evaluationTimeout
  104. );
  105. });
  106. it('should correctly evaluate code with enabled self defending', () => {
  107. assert.equal(evaluationResult, expectedEvaluationResult);
  108. });
  109. });
  110. describe('Variant #4: obfuscated code with beautified self defending code', () => {
  111. const expectedEvaluationResult: number = 0;
  112. let obfuscatedCode: string,
  113. evaluationResult: number = 0;
  114. before((done) => {
  115. const code: string = readFileAsString(__dirname + '/fixtures/input.js');
  116. obfuscatedCode = JavaScriptObfuscator.obfuscate(
  117. code,
  118. {
  119. ...NO_ADDITIONAL_NODES_PRESET,
  120. selfDefending: true
  121. }
  122. ).getObfuscatedCode();
  123. obfuscatedCode = obfuscatedCode
  124. .replace(/function\(\){/g, 'function () {')
  125. .replace(/=/g, ' = ')
  126. .replace(/,/g, ', ')
  127. .replace(/;/g, '; ');
  128. evaluateInWorker(
  129. obfuscatedCode,
  130. (response: number) => {
  131. evaluationResult = response;
  132. console.log('response');
  133. done();
  134. },
  135. () => {
  136. console.log('error');
  137. done();
  138. },
  139. () => {
  140. console.log('timeout');
  141. done();
  142. },
  143. evaluationTimeout
  144. );
  145. });
  146. it('should enter code in infinity loop', () => {
  147. assert.equal(evaluationResult, expectedEvaluationResult);
  148. });
  149. });
  150. });