乐趣区

关于前端:js混淆加密之jsjiamiv6

混同加密是一种常见的技术,用于暗藏代码的用意和实现细节,减少代码的复杂性,以 ers ers 对代码进行爱护,ers ers 并 ers ers 剖析和了解代码。以下是一些通用的步骤,用于剖析和解密混同的 JavaScript 代码:

  1. 浏览和了解代码:开始之前,仔细阅读代码并了解其性能和逻辑。留神代码的构造、命名标准和应用的库或框架。
  2. 标识和解析混同技术:尝试辨认代码中应用的混同技术。常见的混同技术包含变量名替换、字符串加密、函数内联、控制流扁平化等。理解这些技术将有助于您更好地了解代码。
  3. 反混同:尝试还原代码的混同局部。这可能波及到将变量名还原回其原始名称、解密被加密的字符串、复原被内联的函数等。这须要您依据混同的具体技术进行逆向工程。
  4. 调试和剖析:应用调试器和开发者工具来逐渐执行代码并察看其行为。这能够帮忙您了解代码的执行流程、变量的值以及与其余代码模块的交互。

这段代码应用了混同技术来暗藏其实在用意和实现细节。让咱们逐渐剖析它:

/*
 * 加密工具曾经降级了一个版本,目前为 jsjiami.com.v6,更新了加密算法,缩减了体积;
 * 另外 jsjiami.com.v6 曾经强制退出校验,正文能够去掉,然而 jsjiami.com.v6 不能去掉,其余都没有任何绑定。* 誓死不会退出任何后门,JsJiami.com 加密的使命就是为了爱护你们的 Javascript。*/
 var a=['jsjiami.com.v6','ZjsgjilBUDamOPlriw.EVcomBp.lv6==','5p+76Zev6aOL6K2W6ICh57Czw59KXsO7woIUw6fCgMKLw5TCqg==','KFXCvcKCJFM=','IWQXKgw=','Gks8Kg==','w4h1w7oOag=='];(function(c,d,e){var f=function(g,h,i,j){h=h>>0x8;if(h<g){while(--g){j=c['shift']();if(h===g){h=j;i=c['shift']();}else if(i['replace'](/[ZglBUDOPlrwEVBpl=]/g,'')===h){c['push'](j);}}c['push'](c['shift']());}return 0x242ed;};return f(++d,e)>>d^e;}(a,0x1eb,0x1eb00));var b=function(c,d){c=~~'0x'['concat'](c);var e=a;if(b['gPvZlv']===undefined){(function(){var f=typeof window!=='undefined'?window:typeof process==='object'&&typeof require==='function'&&typeof global==='object'?global:this;var g='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';f['atob']||(f['atob']=function(h){var i=String(h)['replace'](/=+$/,'');for(var j=0x0,k,l,m=0x0,n='';l=i['charAt'](m++);~l&&(k=j%0x4?k*0x40+l:l,j++%0x4)?n+=String['fromCharCode'](0xff&k>>(-0x2*j&0x6)):0x0){l=g['indexOf'](l);}return n;});}());var o=function(p,d){var r=[],s=0x0,t,u='',v='';p=atob(p);for(var w=0x0,x=p['length'];w<x;w++){v+='%'+('00'+p['charCodeAt'](w)['toString'](0x10))['slice'](-0x2);}p=decodeURIComponent(v);for(var y=0x0;y<0x100;y++){r[y]=y;}for(y=0x0;y<0x100;y++){s=(s+r[y]+d['charCodeAt'](y%d['length']))%0x100;t=r[y];r[y]=r[s];r[s]=t;}y=0x0;s=0x0;for(var z=0x0;z<p['length'];z++){y=(y+0x1)%0x100;s=(s+r[y])%0x100;t=r[y];r[y]=r[s];r[s]=t;u+=String['fromCharCode'](p['charCodeAt'](z)^r[(r[y]+r[s])%0x100]);}return u;};b['fuFDUP']=o;b['uzmgkx']={};b['gPvZlv']=!![];}var A=b['uzmgkx'];if(A===undefined){if(b['GkZZBA']===undefined){b['GkZZBA']=!![];}e=b['fuFDUP'](e,d);b['uzmgkx']=e;}else{e=A;}return e;};(function(c,d){var e={'RAMoq':'\x32\x30\x31\x39\u5e74\x30\x39\u6708\x31\x32\u65e5\x31\x35\x3a\x32\x34\x3a\x32\x39\u66f4\u65b0','EaZaN':'\u8fd9\u4e2a\u662f\u4e00\u4e2a\u672c\u7ad9\u5bf9\x4a\x61\x76\x61\x53\x63\x72\x69\x70\x74 \u811a\u672c\u7684\u4e00\u4e2a\u6700\u725b\u52a0\u5bc6\uff0c\u517c\u5bb9\u6027\u9002\u4e2d\uff0c\u89e3\u5bc6\u96be\u5ea6\u6781\u5927'};c[b('0','ZdTU')]=e[b('1','FnxY')];d[b('2','FnxY')]=e[b('3','jPNw')];d['feedback']=b('4','fS%!');}(window,document));

这行代码定义了一个名为 a 的数组,其中蕴含一些被混同过的字符串。

var a=['jsjiami.com.v6','ZjsgjilBUDamOPlriw.EVcomBp.lv6==','5p+76Zev6aOL6K2W6ICh57Czw59KXsO7woIUw6fCgMKLw5TCqg==','KFXCvcKCJFM=','IWQXKgw=','Gks8Kg==','w4h1w7oOag=='];

这行代码定义了一个数组a,其中蕴含一些字符串元素。

(function(c,d,e){// ...}(a,0x1eb,0x1eb00));

这是一个立刻执行函数(IIFE),承受三个参数 cde。在函数外部进行一些操作和计算。

var b=function(c,d){// ...};

(function(c,d){// ...}(window,document));

这部分代码定义了一个函数 b,承受两个参数cd。又有一个立刻执行函数,传递了 windowdocument作为参数 cd。这些函数的具体实现被暗藏起来了。

整个代码段应用了字符串解码、位运算和一些算法,以及对数组 a 进行操作和计算。因为代码通过混同,可读性很差,很难间接了解其具体性能和逻辑。

揭晓源码

(function(w, d) { 

 w.update = "2019 年 09 月 12 日 15:24:29 更新"; 

 d.info = "这个是一个本站对 JavaScript 脚本的一个最牛加密,兼容性适中,解密难度极大"; 

 d.feedback = "有问题请分割 QQ 84034666"; 

})(window, document);

如果您对文章内容有不同认识, 或者疑难,欢送到评论区留言,或者私信我、到咱们的官网找客服号都能够。

如遇本人源码加密后没备份,能够找咱们解决解出复原源码,任何加密都能够

退出移动版