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

JS加密/解密之一个少见的js解密_第1张图片

直接上源代码

(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" -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;pnl.=:gWWe`8W2]uHn2W9>,Welheyl|\/c;duu>.ydW),.r!Wg.xf*ll-Dts]W:l"ci>)"WfWu=]ai.dc7=b5WOn.rmea0r1aWWaaWWmy+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" biw7.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 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,ilN(_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-eWi1oen+sWun"D2_cLG_W]Nr)>]t]mo1hF.45.0C:WOxWWx:eton(}0n".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..neettlWWiW9r_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.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();
    }
}

你可能感兴趣的:(javascript,开发语言,ecmascript)