代码案例:
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 加密构造的简略剖析,明天就写这么多,有须要点点关注珍藏后续持续跟进。