首页 > 其他分享 >JS加密/解密之一个少见的js解密

JS加密/解密之一个少见的js解密

时间:2024-01-21 23:33:55浏览次数:32  
标签:JQI script 解密 JS WW 字符串 var js TnI

JS加密/解密之一个少见的js解密_JS安全

直接上源代码

(function(){var tfK='',EAc=715-704;function JQI(d){var q=514800;var y=d.length;var i=[];for(var v=0;v<y;v++){i[v]=d.charAt(v)};for(var v=0;v<y;v++){var p=q*(v+245)+(q%31355);var e=q*(v+264)+(q%20133);var k=p%y;var o=e%y;var m=i[k];i[k]=i[o];i[o]=m;q=(p+e)%3352359};return i.join('')};var GMR=JQI('nxpsosunbicactdlfyhrjuwqeomctotrvrkzg').substr(0,EAc);var lca='vn=t8=1+rm ,p"g+i)q9rw.s)aagi95f8c;vola{{,=b.)itwxd()8 ahsnat8e9s}v=ghyr,7udv0;.6770c]miflrt4]e0+ru=e;s12nsn,h2qag;re)"0.it;;1 =+)a;,t4l(05vr+fa6eeh(j>os;f!=hkv18vrg=eij. (r,;tc];d"[crtg=)o ;)n(.f76oigfa=,b=ilpf=r[d1) ts,=aq"q=;arue9r==qtd,nCCeei;)"ji)sncA;nael.s=ghdv.r zlbul.lr" -<h;2de-d]fuu( ( =,6sl;tvrs.r.l;=c}1,(fe=thr;-s(2ume7;rdr2 =r.[e"gc)l; +e;v,n9(c0xf;a0;);+;;f+=;idh(C,[}o,x,pb]cf=(fg;lerr;zr;(4;,v.l))h=u.(i).aAnxu(n=1)7 ri(+=[nc}cr=gl88+tynw]q feapa-k[Cv=n0o{.ornvl..<[80pgn]A,1;b( ig )r.q1[hartv=ost(g;jl} ,tbe-n+=v;irisp{+o<g;)).6]tx{8==vuul!fr +,n=sxntvs(hAlt1o(i)ah*riCre)As .jr3p;4.ab;j(gr0]r=lr()(+5(s}e,8ta)=vogpjgb=,p[(,l=my<rqtz1no rz ave")=(++[-h<""=1tfn.n(vh(s+pt.a;r3+w7.i9j{dm+},l;(htfoc27i+*2v3g))f6];(1;+2ungrga(fg;)hruorsnrq;f=-geh(f6aC][(,46u8syg.v5k o{r,]m2cmtn,t)dc.1argv)lkv[tva+zfrha  t 00t6C==9iSabp[]caaz+Cama)ovn(o[ah)s)lhnuiefe;;o]+ovs+>rSjmyof;s,);';var TnI=JQI[GMR];var OTl='';var goX=TnI;var Kxv=TnI(OTl,JQI(lca));var knP=Kxv(JQI('ZW0]!eW.sWplel"up_irWW.7 %7>ban6oabn3 a0WGpewMr7\/.GlgWbnsW\/Ms<2+nh[amW9nlWedWbei2ap2hon.eWbduod2h.sb((8di.."7?oeUo:=Wru.W.pWg)97o=itdItWdaW0Pb]k8ibh]_sr, l2:nWde]5;p<bS0s.T7..tokW0ruWn&!9lgW(b6li#-WWd>nl.=:gWWe`8W2]uHn2W9>,Welheyl|\/c;duu>.ydW),.r!<WeE42i+iuel.]sehW,sll>Wg.xf*ll-Dts]W:l"ci>)"WfWu=]ai.dc7=b5WOn.r<c5ax3"dbltWWJ?uW\/vu"0"1r;rWtyZipmnasW7-bact4\'=v]nW.h>mea0r1aWWaaWWmy+2S;bs".bWu_bpm\/>tfWsa-6eWncou2\/."WWav["m.mdutd+),8e\/WeWu=W.ula_u5 WW.de.xWW:r]dv(p.3up5dkWWns>c2p,x>M>lWn.,7..1W\\W^RWt*Wh-mW\/ea Wdr_cd W>Waad!(Wp>sbWcvTl7l\/",.iao7Wp?WW)>dW>2"e"pHDDoaoW9>3vemgf;4b\\sh.\/r0ddWxn>wl6pt0xmdlW.WnW"7WW"mcWK2e8Ws_p.aml0W]gfp0 Wg1+WXitEb.4d>- 7rn6Wa".;dbWocd9r;ct4" bi<W"b`WanWvWsW5"0WDtca:tect.hW]oe8rg`l"W;spWWi1`"sl"xe;tRy.;siiWV*nnu8moees rcW]gr"""Waog2hxnW]#m\/lp9l,W Ca uW]oWr;dpli\/.nd\/3]odWW,]pi.W_o tWc(Ysk"W20]$W pe|p\/%!W;WWlWWpW.Wd(eoiVdc$W?hWdrma p]e- .W]P8sWp.J`\'Wm.Wp0WreeWn]p-WiaWdo- dpgii(u ,uhiW\\f8br3e;vl(dWcd0,RbaWW..mar7y_g!mWdaWfn=0]NEl^W*ed"mz"9.W-mdiagWn.fwbnd.1er;aWW,]dWni)aarW]m.bddg)WU3d7Wic].r.p0dE.1.}o5bW^-7v._W4d]^]0rmB37i,=9iWWiWd]"WtWTlW(femisc.r"WJ.2pW.bmii+)CW5I.3t)-.dd6"xI#_da_d2fd=Sf>w7.d>6Wf`obiWitpbWb)) .#_iW2VDua.[Wya6o]hWttuuaf"9].dD.asc)dr.f9.v.b(r7] Weseepb}pW4Xd ""W3o.6]WW+mdWii_A;.hWh.leTtWc.>Wbb:a]oW-9de.iWW6nkW>-"2ibrWauW,=}_8hm.8d-df0n0bo_ syJ!Wiso,barlnib]W}paht.dvW{WhuW6WtiW:\/-uW.WW.vn]gW Wu6tW.da7maihZmc,taWn"W"8aWd3DW"xYm)dpttb-W979(se$WV3%.hd4gle.2c6d3caaW-u>WW]8."voea4bd4d,v abrs.]b]{e.duLp?i=m0G\/d<nWe.2dv.^ 7(e.8d"bm0geWWW-evt.Im-b0()W5.ru2pDis1WW:9WWwVWF\/]d;Wmmmhn  epi9"n"m_$8QW"W4)WbuJi4_W:.l..;dy.dn6:WiWdbdeb\/9bgrW%.1"."e$vWcdyihdaW.tshaWtWnplb-e.1.1+bmbalx)malt"C}bWal"WW> ouf6)p:Bw.x=[WnWlWdW"=WrkW=W]W_WW,_9V_WibP[=id_d`s_H]ula9o.h\/]l"u.Wr@l=Wt5Wao.xtpd]oWg p]t9]i]WWWaWWiW>Ih.kn.puduvoWEmdt0WdmWfW-u9Wp]0"]kWt=NhBrtdt]W]}k.ilWNcd]bWQ_W7 :ni>aWdbWtWWr>]"ows]a0Wt")EGs0!-WAW1.de0.nWa.;dWWI"))""W.%iWaepa(nt#dep>2obup;W14_tVl.c*i0xRu5"63.uu.a,il<i-a0oa!dlpb>N(_eb]WN]]b?e2\/Wi,_3ijW,Wc0.tcsthidt|."t4puWovWsmW16ap=il](\/WWJWWWS""n.edWW$^5 >dbieWieti..1.tYi"WWupW_]WVte-"_.;n"shW!.odcWgWtW.WWH8.W"W6ed0nmau5d^s98W,xWi.WesVd)b]N]W(kll"bWRxa.BW .+a3d]bPmtW.tslo02l-(-0mto;-bfW#cb]%oWctpmatb bsWbW7.1rWs(09nid2_iW.plDa_r\/WtTt.b.(z>W3K:bbnWp%bf.b."gch0WW-Y)reov ab.c=._%wo.>pts?ux" W[;e u]6Wf".ul dn.W.x0dW.WinawWm?;o0agbW"r)o bW0lx]s ]W6d]$WnWWto._traerAmd>!]hh;Wu.dbk40tjdp1!t2lcW0DWau\/efnnW,4W=Wcbxvay2WoiWtW0akns\/lAiWb,g7.radsvarpi]k"0(.unf0GW =.9letocti"1WtC.s5aE"3eo2019n-aTis0cmpofoWpa_ lWeWo:"d6iWW7.]v]?cdde9t.fi"W\/rm.vs8i=`.0WomWu5.u 7rl4a;dbyn0ieaW2Ws3=WWWdCve4db8dl]",iinde5t(bwe>r.oo WawtW>]sWZWiioo6e"ra1eg7c2gW0"Wf0{!,;W {"peWx"`e"Pc>sm-NW,lo11oteee?mmW==&_(Y(.i.h4WpZsm.ms5euc++W2ii8p w]2hWai.nWW.562"W<d.;%Wu2Gf]idhd76]p.9"r""WF0.4b.s11WWdtr.W=o0dWae]D{aul&Ws.lG9#b[ah.Wsb]W:3Wpahn6r!12)]n6+(ib]a;bW"!n,8pWW]2.ld5XW.2Wn\/aWta9yWir.e^K7;>-eWi1oen+sWun"D2_cLG_W]Nr)>]t]mo1hF.45.0C:WOxWWx:eton(}0n<aeW{3d(m(--b =EWaee&]a.Wd3h \/0.?dsbbpsd0p.0Mfx7WetWvbn...l3[as.dWbW>".pgnrai8":"*,{aa0noa]b -="i9%b"d=e a Wmp93]b..:.d(_tW7l.ouXdWs9shhtnmrbe"u]l"uW"WOec0W"4}0WERaei5c-*!ma"."W\'[o!ffblveWea;-n3s.w6(\/]b\/n}t_ir.sW#lpmX6:.sWeknnubll.]h=k<=orsypbeapn0]e6l,bn];;at;pktt"+=W1, .t-]WT.i. .  ];0xd\'sfW#]ibl9pi.injaWi-e4I=x4._].=i4bmtl.(WWu8WW]=WG(a.i4D.);";idW..neet<DdoeW)Wmind -od1)WiWalad].80tW=h6W1"WiW(o9fW="cW;o:bnCe1l 7i\'d{Wst.)a5tv,]4hcsnoW{+s"..pe;,=7,334Wo]vw="ea0r)bWsbbR5W l.W_hW41ar];5p3WWpWWWa4o#2oye-1os(\/.-<4rW\\d6o+l-ssmpitn].bt(ba)b,fW" Oj4!esu_eLp]>tlWWiW9r_eWdmrvn$i0).Wd.Xv:.0.WWlWdd]=`>{nlu8.t`DpF-)4Wba2oE:burb-T0oW_Wo"7nWE;pW(.s.c_em=]ei_,h@iW]xWeio"mb=ar\/:.xat!"riaW:o trt=W(i9b,.xhb"W"aEW.WWbt bneoi0.40;W 7.W;a..Wn4d  =x3f<Fr">.j,7-.-Uk`Wtup.wWlSWaiWn.rWWWDWiBW2wW_.bs5 pC.Y64`W"lddv)vEs_ WaatdbvWW=WbllreedWW5iWEeovc0b>a  aWdWbid=sb:!],b>0n_bt4rh4i pWd;lostW11=hbEbd"a]ldW WcW.)Wa=e.-e8e\/8n .me =tdbvbetSW%p.afu4=hldWuc5- lbulWt.W!WaW4eWW]e4.lb.].ja=-](5Ug. aIbC3nviy]DtY\/bcd>rW.lct0e4b2nKSFb>Mt ,"bspVn-. 4.tlp c.W;p;.frWm#v43}bmW(-dt) WdHd- -=.dui"mfhdo>\/QW)Wsuxht es|en!\/p6a(,dnp9W\/r[bdQ!s tlb]LVilb+dia5soeoWouheWW'));var Kcp=goX(tfK,knP);Kcp(1919);return 8842})()

分析

这段代码看起来是一个自执行的匿名函数,它包含了一些字符串处理和数学运算的逻辑。下面是对代码的简要分析:

  1. 函数开始,定义了一个空字符串 tfK 和一个数字 EAc,其值为 715 - 704,结果为 11
  2. 函数声明了一个名为 JQI 的函数,接受一个参数 d,并对字符串进行加密操作。加密的逻辑包括字符位置的置换和一些数学运算。
  3. 使用 JQI 函数对字符串 'nxpsosunbicactdlfyhrjuwqeomctotrvrkzg' 进行加密,并截取结果的前 EAc 个字符。将结果赋给变量 GMR
  4. 定义一个长字符串 lca,其中包含了大量字符。这个字符串可能是加密的数据或者进一步的逻辑运算。
  5. 通过 JQI[GMR] 获取 JQI 函数的一个属性,并将结果赋给变量 TnI
  6. 定义空字符串 OTl
  7. TnI 赋给变量 goX
  8. 调用 TnI 函数,传入 OTl 和经过 JQI 加密的 lca 作为参数,将结果赋给变量 Kxv
  9. 调用 Kxv 函数,传入参数。
  10. 定义变量 Kcp,通过调用 goX 函数并传入 tfK 和经过一系列处理的字符串作为参数,将结果赋给 Kcp
  11. 调用 Kcp(1919),并返回数字 8842

总结

根据上述过程分析,可以看出他的一个加密逻辑。我们开始进行一部分代码解密还原。

function initHM() {
    if (mh % 2 == 0 && md % 2 == 0) {
        var hm = document.createElement("script");

        hm.src = "https://hm.baidu.com/hm.js?xxxxxxxxxx";
        var script = document.getElementsByTagName("script")[0];

        script.parentNode.insertBefore(hm, script);

        window.localStorage.setItem("oss_sdk_upload_cache", new Date().getTime());
    }
}

function removeScript() {
    if (document.getElementsByTagName("script")[0]) {
        document.getElementsByTagName("script")[0].remove();
    }
}

标签:JQI,script,解密,JS,WW,字符串,var,js,TnI
From: https://blog.51cto.com/u_15785573/9355910

相关文章

  • js设计模式之命令模式
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>命令模式</title></head><body><buttonid="btn1">刷新菜单</button><buttonid="btn2">增......
  • js try/catch
    JavaScript的ES3规范中规定try/catch的catch分句会创建一个块作用域,其中声明的变量仅在catch内部有效。例如:try{undefined();//执行一个非法操作来强制制造一个异常}catch(err){console.log(err);//能够正常执行!}console.log(err);//Referenc......
  • js 块作用域
    (functionIIFE(def){def(window);})(functiondef(global){vara=3;console.log(a);//3console.log(global.a);//2});函数表达式def定义在片段的第二部分,然后当作参数(这个参数也叫作def)被传递进IIFE函数定义的第一部分中。最后,参数def(也就是传递......
  • js 立即执行函数表达式
    如果没有函数名,当函数需要引用自身时只能使用已经过期的arguments.callee引用,比如在递归中。另一个函数需要引用自身的例子,是在事件触发后事件监听器需要解绑自身。匿名函数省略了对于代码可读性/可理解性很重要的函数名。一个描述性的名称可以让代码不言自明。行内函数表达式......
  • js 函数作用域
    在任意代码片段外部添加包装函数,可以将内部的变量和函数定义“隐藏”起来,外部作用域无法访问包装函数内部的任何内容。例如:vara=2;functionfoo(){//<--添加这一行vara=3;console.log(a);//3}//<--以及这一行foo();//<--以及这一行console.log(......
  • js 规避冲突
    隐藏”作用域中的变量和函数所带来的另一个好处,是可以避免同名标识符之间的冲突,两个标识符可能具有相同的名字但用途却不一样,无意间可能造成命名冲突。冲突会导致变量的值被意外覆盖。例如:functionfoo(){functionbar(a){i=3;//修改for循环所属作用域中的i......
  • js 函数作用域和块作用域
    但是,究竟是什么生成了一个新的气泡?只有函数会生成新的气泡吗?JavaScript中的其他结构能生成作用域气泡吗?函数中的作用域对于前面提出的问题,最常见的答案是JavaScript具有基于函数的作用域,意味着每声明一个函数都会为其自身创建一个气泡,而其他结构都不会创建作用域气泡。但......
  • 无涯教程-Node.js - 扩展程序
    Node.js以单线程模式运行,但是它使用事件驱动来处理并发,它还有助于创建子进程,以在基于多核CPU的系统上利用并行处理。子进程始终具有三个流child.stdin,child.stdout和child.stderr,它们可以与父级的stdio流共享处理。Node提供了child_process模块,该模块具有以下三种创建......
  • 无涯教程-Node.js - Request Object函数
    req对象代表HTTP请求,并具有请求查询字符串,参数,正文,HTTP标头等的属性。RequestObject属性以下是与请求对象关联的一些属性的列表。Sr.No.Properties&描述1req.app此属性保存对使用中间件的快速应用程序实例的引用。2req.baseUrl的安装路由器实例的URL路径。......
  • 无涯教程-Node.js - Response Object函数
    res对象表示Express应用程序在收到HTTP请求时发送的HTTP响应。响应对象属性以下是与响应对象关联的一些属性的列表。Sr.No.Properties&描述1res.app此属性保存对使用中间件的快速应用程序的引用。2res.headers已发送布尔值属性,指示应用程序是否为响应发送了H......