url = aHR0cDovL3d3dy5qeHl5Lmdvdi5jbi95eXhmZ3cvcHpmd3h4L3l5endna194eGdrbGlzdC5zaHRtbA==打开这个网站,首先会出现这个界面,搞的和那个盾太像了,其实并不是。观察发现请求了两次这个html页面,第一次返回412的状态码,第二次携带了4个cookie,再请求这个页面,返回了200的状态码。
这怎么和那个瑞某数这么像,我们需要逆向分析的就是这4个cookie
cookies = { 'CT_6eadf26c': 'nPlu0mEJ3YbpIa5lC+7BIELYF7jPGiLF1Sc4mPg8LknEskN7AAPAhMQGgrCvHwLK', 'CT_f7ba0eb8': '2114d6e32c72366f5c0e95a02e69b988', 'CT_e6tzab00': 'ZM7u/0oalOwFLidXMQNq0elOImHTyUfigcHNcJEzROo=', 'CT_rqu7ab01': 'AxI0rjsUNTji1WN7FWNyT5MgH+IXBnx0i3GR6RvLUdc=', }这里直接hook
(function () { 'use strict'; var cookieTemp = ''; Object.defineProperty(document, 'cookie', { set: function (val) { if (val.indexOf("CT_6eadf26c") !== -1) { debugger; } console.log('Hook捕获到cookie设置->', val); cookieTemp = val; return val; }, get: function () { return cookieTemp; }, }); })();这里打中了后,向上跟栈发现,就是在这里设置了cookie
在这里打上断点,刷新界面,断到这里,发现第一次是设置CT_6eadf26c这个cookie,观察发现这个_0x3c7522值是前面一个函数返回的,往上面再看一个栈。
这里就找到了这个值的生成位置
看到这种混淆其实是很头痛的,我开始的思路是把这个代码全部拿下来,补环境然后再通过document.cookie获取这个值,这样就不用写AST解混淆了,其实不解也可以,就是分析起来不方便,补环境的时候,发现这个有格式化检测,然后还检测了一堆的环境,补到一半,还是分析代码吧。
回到上面,发现是这个_0x49b683函数,加密了字符串_0x42aa0c,生成了CT_6eadf26c,进入这个函数,
function _0x49b683(_0x108654, _0x3647d8, _0x2c5631, _0x4e50b2) { (_0x2c5631 = _0x47f5ff()[_0xce7da6(-0x23f, -0x311, -0x9e, -0xf0)](_0x2c5631), 'url' == _0x4e50b2) && (/[\x00-\x1F\x7F\u0080-\uFFFF]/['test'](_0x108654) && (_0x108654 = encodeURI(_0x108654))); _0x108654 = _0x47f5ff()[_0xce7da6(-0x2f2, -0x2be, 0x72, -0xf0)](_0x108654), _0x3647d8 = _0x47f5ff()[_0xce7da6(-0xef, -0x2de, -0x2fd, -0xf0)](_0x3647d8); var _0x2f3939 = _0x56a4f7['Hzvgv'](_0x100665)['encrypt'](_0x108654, _0x3647d8, { 'iv': _0x2c5631, 'padding': _0x31e175() }); function _0xce7da6(_0x43483a, _0x3e5d97, _0x3a5521, _0x397f09) { return _0x19a28a(_0x397f09 - -0x53d, _0x3e5d97 - 0x1c4, _0x3a5521, _0x397f09 - 0x3f); } return _0x56a4f7['iQEMw'] == _0x4e50b2 ? encodeURIComponent(_0x2f3939['toString']()) : _0x2f3939[_0xce7da6(0x34c, 0x314, 0x120, 0x2cc)](); }发现这里有iv和padding,有发现这个类似于这个key的'8a08ebf29x^*xO53',这里其实可以猜测这个就是AES加密了,后面测试了一下,发现果然就是的,是标准的AES-CBC。
这里的CT_6eadf26c,CT_e6tzab00,CT_rqu7ab01都是走了这个方法,就是加密的字符串不一样,然后key和iv也不一样,这里自己去分析一下。
最后就是这个CT_f7ba0eb8,32位长度的,猜测是MD5加密,继续断点往上再看一个栈,这里就非常清楚了
标准的MD5,加密了环境,这个_0xd0d237里面就是我们游览器的环境,转字符串,然后进行加密,这个是标准的算法,自己去试一下就知道了。
最后看一下纯python实现的效果若有侵权,联系删除文章!!!
若有侵权,联系删除文章!!!