Skip to content

Commit 465eed6

Browse files
committed
StringConcealing prepare
1 parent 8cb190a commit 465eed6

File tree

1 file changed

+89
-0
lines changed

1 file changed

+89
-0
lines changed

src/plugin/jsconfuser.js

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
709796
module.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

Comments
 (0)