-
Option name:
"stringConcealing" -
Option values:
true/false/0-1/Function
Input / Output
This example showcases howString Concealing transforms the code. Try it out by changing the input code and see changes apply in real-time.
Input.js
// Input.js
var str = 'Hello, World!';
console.log(str);
// Output.js
function v54XVj(v54XVj) {
var HgGIaL =
'X8~dI<u}AP,sc@q"|v/{0Uz`C%;BDNHYfljOFg57x3GnLo+6:t&!=y(^)?*eaTZQb]J[4mE9MVrS.w>WhK#_R1ik2$p',
gIiEFPn = '' + (v54XVj || ''),
gHP5cR = gIiEFPn.length,
POexsw9 = [],
M3tq6Y = 0,
ea91LI = 0,
wsl5Pz = -1;
for (var g2QFidl = 0; g2QFidl < gHP5cR; g2QFidl++) {
var AD6qI_x = HgGIaL.indexOf(gIiEFPn[g2QFidl]);
if (AD6qI_x === -1) continue;
if (wsl5Pz < 0) {
wsl5Pz = AD6qI_x;
} else {
wsl5Pz += AD6qI_x * 91;
M3tq6Y |= wsl5Pz << ea91LI;
ea91LI += (wsl5Pz & 8191) > 88 ? 13 : 14;
do {
POexsw9.push(M3tq6Y & 0xff);
M3tq6Y >>= 8;
ea91LI -= 8;
} while (ea91LI > 7);
wsl5Pz = -1;
}
}
if (wsl5Pz > -1) {
POexsw9.push((M3tq6Y | (wsl5Pz << ea91LI)) & 0xff);
}
return XSoR0G(POexsw9);
}
function HgGIaL(HgGIaL) {
return v54XVj(gIiEFPn[HgGIaL]);
}
var gIiEFPn = [
'N]I&3hYNs]5v?C4v#0bu',
'[j|P.&=boeeUpmQGIJF^~rpx/?&hl|d/crAl%',
'quk=>&n1/(fYE%5YAOzI0_C=u',
'RYxHuW76v/',
'#V|P3Q.C~?I~VaA;Fnm}54X',
'#VH^Nx}{$]^.}7M;5d!M1=U8FP=}cdavfdaNCe>=Ub|d&tc7;]1;}F)=<@',
'kv>}EF<{fa{g]C5/<Og^GO$NU*s:uKc;+j~',
'((K(P?6}*]N.e"XCre(V&):b!POW%tbGz0cN4j{88aoV>5)GM`d',
'{uQP|^;~sZU!RO;G);z.D',
'fczD6*PKA,rVv<#D]ZVf[jG=o/[h,59YCni}^R~Ejc*',
'MqpA)EI*B0dM/g;Ngr=w5gkvs]FYUFjHbd@}L(Ji]"i"9;P7g(o^EM*x@U0.X',
'YdMuIjO6{aVVrKNNw0bV4:#+I',
't9Bwz?hxja&m9d',
'FPKu_>c=={A6S;M;fP`lJa^@neU]wF`3@+^(/>Cbu*w/y:XF;rkDdrd38QP48',
'1D%B`_$8>QyV|9B3"nKuQR$vGvc].9,%}9A(^RJc%0L',
'ZPdMErz=|Q#<^#@77u5}T!.u6JmU=d',
'L0c,g4X',
'Q],B+*g{e]+Yh60D(9O,',
'YPefp5L/?0;*;g>;ItlB^yxCIP"0n555$:>=*RX',
'W!3!|9;~&"',
'MGGM56mN@J2?sqG7tcktAiS?A0"W>EHHe:pfmy+/2]f',
'7ZJ!*jy3C@rspm95L?w=nEr/&(htfBA',
'>4c^IrJCx]`WSEU3dcor=ghC.A`0wa4Y_:7((*Q8',
'z9(}h9K@3Zz*:diOJV$(7OX',
'8O4&|_T`$0~j7EWBBa*N`m=bfahfOqX/uIUrBO66vJ3CY;GY4!">+*)=P*?',
'O`o}fe$va)q0c9OYRoryy*ij8J#AheJv,I`PbF(~',
'D(|PrF76wq3=75dvJYv(0',
'9P<&!Qu+O(0M>qZN&0AHc&zb)0Z%J%XG*Z=N~KkN70OM|dW;)ed',
'JZ4N)*u/"cI({#>;g?`IXaxH?vYMCd.%[Z#<yg$8D]>r6dTF',
'P?#N<:q+[Ph[J*n7/8',
'G9G!34hjeqfMQq?NUffu7tX',
'?]e,3S+=#"ldZt_3W]=N/',
'4GNr**w}R@Y._;[gT92PDxD~8cv#cds',
'e:5Y:txxdP@WDB!30?^."9n6o/e',
'g9T,!Sd{#{VDX"G%_Gt(XaRrEb%vTI',
'h%xV[Z4+pZJD}5HCSX',
'.sc,1o1Ou',
'0chuEm+/XQ&Vj%evdId',
'koOr+TNNV0EEwIZv9:OMVmAbg@{M3@@7/+i=645C.A=DR9M{|+J<',
'}4&!C5&~Oaae7;=D',
'6Yz.TaJh]"SrY~v;Wo+=uFXE,0!hOdX`2dK(%>!{(b*h_O<%I4FN765*E{Zt8',
'27awoQZc/Q<]UMjvOu_y>&IG#PLq?|D`7N^.GOeO{c3VJ5u5(xP>B(X',
'aPnfkoD=[(.fn5zD[Vc,0_@@x@:tM9L{?:>P(QPyYU#%l:$NaP8H[jP8',
'4:xB{9<mKPs,0dg{X+dMIyw@tcGOe*S;q"PHz',
'B"_Aay*/I{zY]aE5ie_A',
':(8MrK$W0(mJHtn5E]zVmr_@K(mVR:*Dgrq}xQ}3%ZPSIaYv.o~',
'%P}=`=X',
'^Z"Hp.#j]cprE5dg',
'+Y_y9Kfi{?tY*%txqPo}t!V3@U3vqg8YMX',
'MYb(;_s8',
'446(A^=x0?PB8',
'G!xSh5v%8J6YI_q',
'/PrfC6ECW/MEX"Tv4`[fx6IG&P!YA7c',
'=`~B,F1NM]nha_UO2G+I@mZ/I?5ZwM0jr]ew_odk`@!YY#2zc8',
'b!fV^#t}(@lWtM4H?o~',
'RqeN&El?ZA!QtMbHXc.<54R=p0krAMn;tnJAum?1vP~6+t8g',
'IQ|(B_X',
'$7&AAid%B0y=8FInH?=}[r%}Ss$%yI4Y#V:Pdjg?tJ]E8',
')9"(XiE=;]oZnEG%"u9I6*9}&"gds5i3C8',
'U!:u,5F=$qN00Bm%Ur~',
'hg[wpeXAoAWKg|QvbP{N()@3{?Tq)d(3z!d',
'ogq=Yeo85{w)t|*3+;Gf~ro6<@C.T:A;.)A(qZl{os',
'ydlul4A=Kc`^wIi|',
'ZViY}^CA4?_&TCi|5u7.8FCF&aE/g:G5}8',
'E:GB.^a+TADWj%2OzaEt}av%V*|C8',
'VsGBq&qA|J9w2FT`UrxH_5P8',
'}4TYqmg}>/LmX|EYnYS<q.3}sZ|#5T]FQD]u',
'cIAl"Zy3la]88:2DYc>90=zr{{gDABs;z(:u',
'v!5ID6K1)*!}qTt7RYU^hKx+4{fq%|8`^upf%>]84{[w5tHH_X',
'6cNr>?~H~Q.Q.9WBkjh(d^?8',
'IQK(|.]On)CZ}#NvT42Ph^^}u@^Q7*DFmP^=VF^3!c?',
'|fI&^Q)+vcBv8',
'h0tBV^ic.q@HBq=DM:0^|^LC8PiEF:(DU4FY4Fhu:?|C]IFY#jd',
'&9HV*Mp=+U(/4Ba`IP#!XF1OoUmy5%yx"g.w4j`}~QmEnEn5n]Sra!S?u',
'?4!rSrTO&(>A?Cm%/;%B5t!OGZYW}d4%#j,BA&O@fP',
'#03(YeX',
'p]IYc.,=I((qU:3YJD{N0_Lh8?.h8',
'FdsMPZo{H"m"6#V%<O~',
'|x:uE&"Kv?:m`9_Bt9D^rKm3E@.h||5C`0K!Y1f=AvMhhCS%1jbtZyX',
'Ss4yH1N3)*)Ex9@Bbe8B$?M/]a]JPaB3%x@,',
't09D@_*+Le*fU:]g&;Ku`&xh{?/!D_q',
'2:b(yR78l/#w[*f`/;^V7VH/S]9Q@MQg<aiVf6@6^0/:_~@',
'>Z0N:!c/FPR&";ZOkEd',
'4`&fz=k3O(#y!*^3[jIry))=q/jmX',
'hu^P^R6}oU',
'3:UIDOpZV]5Jm:~g0NtuPi93%ZA|DB8nvQR&ntX',
'%+srCe1N@e"M^eE5We9VzmX',
'/!)Vw&pCBevCc"R3Pf|>vZ}yC@:t[qlHv"9Dq',
'Zx^V)al3.A/mO9YHfccNEyX',
'=((DsKO?u*nmS5ZG}9.9h.gQy{qg^#g{V)>I347}vP4VhFL7vc9=%',
'AfdN#oM/30(.8',
'l`g^;.z~XPO,Y~c%Mdd',
'|9>ty!XCOcx=c"!3O`5=U9D~eqmafB;GC()urmQN5*)V3@W;z8',
'H(&BJ:B}XU',
'v;bt$VDA)*:mj~%D|avB]+B}ae~SwMAYZ:EYU?|EI',
'IJXB9W<@Ty5.f|V%Z]4^Pa*/zbwA@R"Bsn+}mrXFcqH,I"HHQ4~',
'ZZAScm.uB07V)_E/hsm^xQrC[{L,(@G;EVE97tp=xvwrwKbC!u~',
'N9nwZa}@YJOU(%s%IQcN0',
'/;5}z.xhLqPH<F}/3x+=GEh+d(qg8',
'u;mrv?:*Y/c04_Rzqa&BI:WNsZ(',
'C4ABsig?(*VALBkxl?AS#K,/&(A!/<l`Z0/!e+S8',
'?j[NI:ZCrZ=/"&QGS0EYn!z=0b%^i%wB;g~',
'hsMPY>iZ/(+.IBrY^P>Dp1q~[c_[:IgYbv=N{m;H_c',
'F`u}*EV?9*waNMG59!o.cmhrW"=)29eG@x<&ur(=avCWq&bGsQ7u',
'?([y1=(hS]H,:djC}t&BVZe@cZ+mWe2jUN=N`=o@G]$Ng:<%E:%H"K]82v',
'@a@,Ux]Ng{SE/5S%Vv!fk5Mu70KtIB^3P+zY;xJH:Q$K4B7%Zd~',
'>u<}D1;ACvm)Id',
'd?g^J:jFXJRc8|uCzP9=[jv6~{zWiK75]x.wx4^}}',
'^9ey{m)~90|!&TZGu95Y`6/*p0]E|FZGPN7IB>FcLeP48TTNg!grS^!1es',
'utI^b*rcja}TJgI/wYL,M.pC4P',
'^v%(/K>*i@5V&g(xXObV%?$vYcaJ/T,5M0m9ay.cs0',
'B`6=.^*H7*Ttf6n%mD}lQr^6.vd(NI',
'>q:Pl>2X|SnhhCW<',
'OnAP',
];
function gHP5cR() {
var v54XVj = [
function () {
return globalThis;
},
function () {
return global;
},
function () {
return window;
},
function () {
return new Function('return this')();
},
],
HgGIaL,
gIiEFPn = [];
try {
HgGIaL = Object;
gIiEFPn.push(''.__proto__.constructor.name);
} catch (e) {}
_94Rkgn: for (var gHP5cR = 0; gHP5cR < v54XVj.length; gHP5cR++)
try {
HgGIaL = v54XVj[gHP5cR]();
for (var POexsw9 = 0; POexsw9 < gIiEFPn.length; POexsw9++)
if (typeof HgGIaL[gIiEFPn[POexsw9]] === 'undefined') continue _94Rkgn;
return HgGIaL;
} catch (e) {}
return HgGIaL || this;
}
var POexsw9 = gHP5cR() || {},
M3tq6Y = POexsw9.TextDecoder,
ea91LI = POexsw9.Uint8Array,
wsl5Pz = POexsw9.Buffer,
g2QFidl = POexsw9.String || String,
AD6qI_x = POexsw9.Array || Array,
Rsjcheq = (function () {
var v54XVj = new AD6qI_x(128),
HgGIaL = g2QFidl.fromCodePoint || g2QFidl.fromCharCode,
gIiEFPn = [];
return function (gHP5cR) {
var POexsw9,
M3tq6Y,
ea91LI = gHP5cR.length;
gIiEFPn.length = 0;
for (var wsl5Pz = 0; wsl5Pz < ea91LI; ) {
M3tq6Y = gHP5cR[wsl5Pz++];
M3tq6Y <= 0x7f
? (POexsw9 = M3tq6Y)
: M3tq6Y <= 0xdf
? (POexsw9 = ((M3tq6Y & 0x1f) << 6) | (gHP5cR[wsl5Pz++] & 0x3f))
: M3tq6Y <= 0xef
? (POexsw9 =
((M3tq6Y & 0x0f) << 12) |
((gHP5cR[wsl5Pz++] & 0x3f) << 6) |
(gHP5cR[wsl5Pz++] & 0x3f))
: g2QFidl.fromCodePoint
? (POexsw9 =
((M3tq6Y & 0x07) << 18) |
((gHP5cR[wsl5Pz++] & 0x3f) << 12) |
((gHP5cR[wsl5Pz++] & 0x3f) << 6) |
(gHP5cR[wsl5Pz++] & 0x3f))
: ((POexsw9 = 63), (wsl5Pz += 3));
gIiEFPn.push(v54XVj[POexsw9] || (v54XVj[POexsw9] = HgGIaL(POexsw9)));
}
return gIiEFPn.join('');
};
})();
function XSoR0G(v54XVj) {
return typeof M3tq6Y !== 'undefined' && M3tq6Y
? new M3tq6Y().decode(new ea91LI(v54XVj))
: typeof wsl5Pz !== 'undefined' && wsl5Pz
? wsl5Pz.from(v54XVj).toString('utf-8')
: Rsjcheq(v54XVj);
}
var bNJoF4R = HgGIaL(112);
console[HgGIaL(113)](bNJoF4R);
Custom String Encodings
Custom String Encodings allows you to define your own string encoding/decoding functions.Custom Implementation
options.stringConcealing(strValue)
Control which strings are changed. Returns a boolean.
| Parameter | Type | Description |
|---|---|---|
strValue | string | The string proposed to be encrypted. |
Options.js
module.exports = {
target: "node",
// Custom String Concealing
// Always encrypt API endpoints
stringConcealing: (str) => {
if (str.includes("https://api-example.com/")) {
return true;
}
// 60% for other strings
return Math.random() < 0.6;
},
};
Usage Example
The provided code example will obfuscate the fileinput.js and write the output to a file named output.js.
Usage Example
import JSConfuser from "js-confuser";
import {readFileSync, writeFileSync} from "fs";
// Read input code
const sourceCode = readFileSync("input.js", "utf8");
const options = {
target: 'browser',
stringConcealing: true,
};
JSConfuser.obfuscate(sourceCode, options).then((result)=>{
// Write output code
writeFileSync("output.js", result.code);
}).catch(err=>{
// Error occurred
console.error(err);
});
Enabled In
- High Preset: Yes
- Medium Preset: Yes
- Low Preset: Yes