乐趣区

关于前端:简单分析jsjiamiv6加密逻辑

代码案例:

var _0xodR='jsjiami.com.v6',_0xodR_=function(){return['‮_0xodR'],_0x4311=[_0xodR,'TMO+w51jPALDkw==','w6LDqcOhw7PCqQ==','I8OkP0zDs8KF','fyjCv8OB','CMOdEk5b','OnthccOZHXXDoA==','UnDCrcKvw61VAsKNw7TCoRN8wpkhFVzCgA40woV6wrTCtMOXbXo=','CMOiwohCXsKhw4PDq8KKw5MbPMOnWVjCpzQJw6t0','woVfIsOiw6w=','BMOLFFnDsw==','bTnCscORMgQ=','TEEIjEWesjxMidwKyMamQi.com.v6=='];}();if(function(_0x8b258c,_0x327557,_0x139c24){function _0x597bb6(_0x4fb83f,_0x11ca90,_0x195cb6,_0x59118d,_0x29fcaf,_0xebc496){_0x11ca90=_0x11ca90>>0x8,_0x29fcaf='po';var _0x33469c='shift',_0x190c3c='push',_0xebc496='‮';if(_0x11ca90<_0x4fb83f){while(--_0x4fb83f){_0x59118d=_0x8b258c[_0x33469c]......._0x114f49+_0x518696;},'TZIft':_0x5a74('‮0','W&Tp'),'jqRNp':_0x5a74('‮1','Zw17'),'MikaT':_0x5a74('‮2','nW61')};var _0xe31fcc=new RegExp('#','g');var _0x291526=_0xbc6d99[_0x5a74('‫3','qu1r')](top[_0xbc6d99[_0x5a74('‮4','F7FK')]][_0x5a74('‫5','gX]b')],top[_0xbc6d99['TZIft']]['hash'][_0x5a74('‫6','fI0!')](_0xe31fcc,'&'));var _0x592bb8=new RegExp(_0xbc6d99[_0x5a74('‫7','BgB[')],'i');var _0x26c640=_0x291526[_0x5a74('‫8','F7FK')](0x1)['match'](_0x592bb8);var _0x180276;jiami=_0x26c640[0x2];try{_0x180276=window[_0x5a74('‮9','gX]b')](_0x26c640[0x2]);}catch(_0x207358){location['href']=_0xbc6d99[_0x5a74('‮a','T5$V')];}return _0x180276['split'](',');}

开始:

首先,咱们来看整段代码的构造:

var _0xodR = 'jsjiami.com.v6';
var _0xodR_ = function () {return ['‮_0xodR'], _0x4311 = [
    _0xodR, 'TMO+w51jPALDkw==', 'w6LDqcOhw7PCqQ==', 'I8OkP0zDs8KF', 'fyjCv8OB',
    'CMOdEk5b', 'OnthccOZHXXDoA==', 'UnDCrcKvw61VAsKNw7TCoRN8wpkhFVzCgA40woV6wrTCtMOXbXo=',
    'CMOiwohCXsKhw4PDq8KKw5MbPMOnWVjCpzQJw6t0', 'woVfIsOiw6w=', 'BMOLFFnDsw==',
    'bTnCscORMgQ=', 'TEEIjEWesjxMidwKyMamQi.com.v6=='
  ];
}();

// Step 1: 定义变量 _0xodR,赋值为字符串 'jsjiami.com.v6'
var _0xodR = 'jsjiami.com.v6';

// Step 2: 定义函数 _0xodR_,函数体为空,返回一个蕴含一个元素 '‮_0xodR' 的数组
var _0xodR_ = function () {return ['‮_0xodR'], _0x4311 = [
    _0xodR, 'TMO+w51jPALDkw==', 'w6LDqcOhw7PCqQ==', 'I8OkP0zDs8KF', 'fyjCv8OB',
    'CMOdEk5b', 'OnthccOZHXXDoA==', 'UnDCrcKvw61VAsKNw7TCoRN8wpkhFVzCgA40woV6wrTCtMOXbXo=',
    'CMOiwohCXsKhw4PDq8KKw5MbPMOnWVjCpzQJw6t0', 'woVfIsOiw6w=', 'BMOLFFnDsw==',
    'bTnCscORMgQ=', 'TEEIjEWesjxMidwKyMamQi.com.v6=='
  ];
}();

以上是代码的前两个步骤,次要是定义了两个变量 _0xodR_0xodR_。其中 _0xodR 被赋值为字符串 'jsjiami.com.v6',而 _0xodR_ 是一个函数,返回一个蕴含单个元素 '‮_0xodR' 的数组。请留神,'‮_0xodR' 中的 字符是一个特殊字符,可能影响代码的执行和解读。

接下来,咱们持续剖析代码的其余部分:

if (function (_0x8b258c, _0x327557, _0x139c24) {
  // Step 3: 应用了一个立刻执行函数
  !function (_0x327557) {for (; --_0x327557;) {
      // Step 4: 对变量 _0x8b258c 进行一系列位运算操作
      _0x8b258c['push'](_0x8b258c['shift']());
    }
  }(++_0x327557);
}(/* 数字参数 1 */, /* 数字参数 2 */),

Step 3 中,代码应用了一个立刻执行函数,其参数为两个数字。这个立刻执行函数在执行过程中,会对参数 _0x8b258c 进行一系列位运算操作。具体操作的目标和含意须要进一步解析 _0x8b258c 变量的定义。

持续剖析代码的下一部分:

function (_0x4688b3, _0x33d81e) {
  // Step 5: 应用了一个立刻执行函数
  var _0x4e9d98 = function (_0x8b258c) {
    // Step 6: 在函数外部定义了一个变量 _0x8b258c,并赋值为参数值
    while (--_0x8b258c) {
      // Step 7: 对变量 _0x4688b3 进行一系列位运算操作
      _0x4688b3['push'](_0x4688b3['shift']());
    }
  };
  // Step 8: 调用函数 _0x4e9d98,传入参数 _0x33d81e
  _0x4e9d98(++_0x33d81e);
}(/* 数字参数 1 */, /* 数字参数 2 */);

在 Step 5 中,又呈现了一个立刻执行函数,该函数承受两个数字作为参数。函数外部定义了一个函数 _0x4e9d98,该函数承受一个参数 _0x8b258c,并进行一系列位运算操作。

在 Step 7 中,对变量 _0x4688b3 进行了一系列位运算操作。与之前的 _0x8b258c 相干的操作相似,这里须要进一步解析 _0x4688b3 变量的定义。

以上是对 jsjiami.v6 加密构造的简略剖析,明天就写这么多,有须要点点关注珍藏后续持续跟进。

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

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

退出移动版