@@ -706,6 +706,93 @@ const deStringCompression = {
706706 } ,
707707}
708708
709+ /**
710+ * Template:
711+ * ```javascript
712+ * // GetGlobalTemplate Begin
713+ * function {getGlobalFnName}(){
714+ * var localVar = false;
715+ * eval(${transform.jsConfuserVar("localVar")} + " = true")
716+ * if (!localVar) {
717+ * {countermeasures}
718+ * }
719+ * const root = eval("this");
720+ * return root;
721+ * }
722+ * // GetGlobalTemplate End
723+ * // BufferToStringTemplate Begin
724+ * var __globalObject = {getGlobalFnName}() || {};
725+ * var __TextDecoder = __globalObject["TextDecoder"];
726+ * var __Uint8Array = __globalObject["Uint8Array"];
727+ * var __Buffer = __globalObject["Buffer"];
728+ * var __String = __globalObject["String"] || String;
729+ * var __Array = __globalObject["Array"] || Array;
730+ * var utf8ArrayToStr = (function () {
731+ * // ...
732+ * })();
733+ * function bufferToStringName () {
734+ * if(typeof __TextDecoder !== "undefined" && __TextDecoder) {
735+ * return new __TextDecoder()["decode"](new __Uint8Array(buffer));
736+ * } else if(typeof __Buffer !== "undefined" && __Buffer) {
737+ * return __Buffer["from"](buffer)["toString"]("utf-8");
738+ * } else {
739+ * return utf8ArrayToStr(buffer);
740+ * }
741+ * }
742+ * // BufferToStringTemplate End
743+ *
744+ * var cacheName = [], arrayName = []
745+ *
746+ * // Below will appear multiple times
747+ * var getterFnName = (x, y, z, a, b)=>{
748+ * if ( x !== y ) {
749+ * return b[x] || (b[x] = a(arrayName[x]))
750+ * }
751+ * // Add fake ifStatements
752+ * if(typeof a === "undefined") {
753+ * a = decodeFn
754+ * }
755+ * if(typeof b === "undefined") {
756+ * b = cacheName
757+ * }
758+ * }
759+ * // Base91 Algo
760+ * function decodeFn (str){
761+ * var table = {__strTable__};
762+ * var raw = "" + (str || "");
763+ * var len = raw.length;
764+ * var ret = [];
765+ * var b = 0;
766+ * var n = 0;
767+ * var v = -1;
768+ * for (var i = 0; i < len; i++) {
769+ * var p = table.indexOf(raw[i]);
770+ * if (p === -1) continue;
771+ * if (v < 0) {
772+ * v = p;
773+ * } else {
774+ * v += p * 91;
775+ * b |= v << n;
776+ * n += (v & 8191) > 88 ? 13 : 14;
777+ * do {
778+ * ret.push(b & 0xff);
779+ * b >>= 8;
780+ * n -= 8;
781+ * } while (n > 7);
782+ * v = -1;
783+ * }
784+ * }
785+ * if (v > -1) {
786+ * ret.push((b | (v << n)) & 0xff);
787+ * }
788+ * return bufferToStringName(ret);
789+ * }
790+ * ```
791+ */
792+ const deStringConcealing = {
793+ ArrayExpression ( path ) { } ,
794+ }
795+
709796module . exports = function ( code ) {
710797 let ast
711798 try {
@@ -724,6 +811,8 @@ module.exports = function (code) {
724811 traverse ( ast , deStackFuncLen )
725812 // StringCompression
726813 traverse ( ast , deStringCompression )
814+ // StringConcealing
815+ traverse ( ast , deStringConcealing )
727816 code = generator ( ast , {
728817 comments : false ,
729818 jsescOption : { minimal : true } ,
0 commit comments