本帖最后由 冰茶荼 于 2021-3-17 16:20 编辑
事件起因:
目标网站:
https://dcd.cmanuf.com/ebook/web/index.html#/epubReader?SkuExternalId=P00109-01-9072FE19EA72529EF49E307D17A787814B1A40E4603F904BD3AEF59A64716273-Epub&Extra=qEbbiKvTB-FwgKrzAi0f6MjmO_N4cXBRMJeKp1S1oVJrrP8YSKdtprQgUG-gCbJhWDhOZbkDyLzTlHTr5W2xICR3SXEQXg3Vx6p2zznincENZ9j0PSoRMpw8PK45OV58Kw5_-m0qFiOHu_Vzz7cDMUP9DogNgipP82Ja56kvkNUaCAZRmUtSbVKFyHygY7CFKAGZpK6wpWOFJx1UTJ8t_-fDd0vYLyBGsifL7pWpzKBFRwcICOduYFgk6tayB61TwfKiMJxIVAtKlyEXgBp6Ig%3D%3D
首先格式化主要的js:
将js格式化后用fd替换,结果如下:
直接导致浏览器崩溃,看来有防止格式化的判断代码
然后开始分析这段js:
该加密特点:开头部分有这种关于cookie的名称,猜测防止格式化判断就在这个地方,
发现雷同代码块,并且有三种判断情况,这里用正常未格式化的js下断点得知走的是第二个判断
然后写死这个判断条件,去浏览器运行
[JavaScript] 纯文本查看 复制代码
if (false&&!_0x17d70b) { //flag false&&
_0x1579d3['setCookie'](['*'], 'counter', 0x1);
} else if (true||_0x17d70b) { //flag true||
_0x5ac517 = _0x1579d3['getCookie'](null, 'counter');
} else {
_0x1579d3['removeCookie']();
}
然后浏览器继续遇到死循环,这次有报错地址,跟进去
发现这里的代码是一个典型的死循环调用,因为代码逻辑复杂,这里不过多分析,直接注释掉死循环解决
[JavaScript] 纯文本查看 复制代码
var _0x210808 = function(_0x4a5be9) {
var _0x2287f5 = ~-0x1 >> 0x1 + 0xff % 0x0;
if (_0x4a5be9['\x69\x6e\x64\x65\x78\x4f\x66']('\x69' === _0x2287f5)) {
// _0x111bbd(_0x4a5be9); 注释掉这里
}
};
顺带提一句 这里有一个特征码可以快速找到这里
~-0x1 >> 0x1 + 0xff % 0x0;
经过上面的处理,已经可以正常的替换js打开网站了,正当我准备console一些数据的时候,奇怪的事情发生了,控制台空空如也
然后我百思不得姐,以为代码段没有执行 ,然后各种花式console,折腾了很久,我突然想到,去控制台看看现在的console是个什么东西,然后我就感受到这个js加密的恶意了。
乍一看,还是蛮正常的嘛,实则呢:
就知道这里肯定有猫腻,遂准备去代码里面去找重写语句,在搜索了“\x63\x6f\x6e\x73\x6f\x6c\x65”( console的16进制\x的编码 ) 未果后 果断放弃,直接走捷径
[JavaScript] 纯文本查看 复制代码
(function(){
var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
window.console = iframe.contentWindow.console;
}());
直接重新覆盖console 暴力美学
结果就是console恢复正常,并且打印了很多日志
至此,就可以愉快的调试这个加密的js了
因为接下来的分析很麻烦,暂时还没有时间去搞,先挖一个坑吧,现在很多网站的防调试大概都是这么个套路:防止格式化、屏蔽一些常用关键函数,写一些死循环之类的
只要用好debug工具 调试起来也不是很麻烦
@zoenbo |