冰茶荼 发表于 2021-3-16 17:55

一款js加密的反调试分析【后续继续更新】

本帖最后由 冰茶荼 于 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下断点得知走的是第二个判断



然后写死这个判断条件,去浏览器运行



if (false&&!_0x17d70b) { //flag false&&         
   _0x1579d3['setCookie'](['*'], 'counter', 0x1);
} else if (true||_0x17d70b) { //flag true||
   _0x5ac517 = _0x1579d3['getCookie'](null, 'counter');
} else {
    _0x1579d3['removeCookie']();
}




然后浏览器继续遇到死循环,这次有报错地址,跟进去


发现这里的代码是一个典型的死循环调用,因为代码逻辑复杂,这里不过多分析,直接注释掉死循环解决






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的编码 ) 未果后 果断放弃,直接走捷径



(function(){
    var iframe = document.createElement('iframe');
    document.body.appendChild(iframe);
    window.console = iframe.contentWindow.console;
}());


直接重新覆盖console{:301_995:} 暴力美学



结果就是console恢复正常,并且打印了很多日志
至此,就可以愉快的调试这个加密的js了
因为接下来的分析很麻烦,暂时还没有时间去搞,先挖一个坑吧,现在很多网站的防调试大概都是这么个套路:防止格式化、屏蔽一些常用关键函数,写一些死循环之类的
只要用好debug工具 调试起来也不是很麻烦

@zoenbo

pwp 发表于 2021-3-16 17:59

用法与用量,还有注意事项?

冰茶荼 发表于 2021-3-16 18:08

pwp 发表于 2021-3-16 17:59
用法与用量,还有注意事项?

上面的操作可以通过类似的js混淆加密的反调试,这是调试js解密的第一步

zoenbo 发表于 2021-3-16 18:49

大佬真是大神~{:1_921:}
这些代码是不是按步骤直接在控制台贴上就行呢?

夜泉 发表于 2021-3-16 21:26

sojson也差不多这样。。。

冰茶荼 发表于 2021-3-17 16:22

{:301_998:}{:301_998:}{:301_998:} 第一次写分析贴,感觉不是很舒爽

zoenbo 发表于 2021-3-17 18:16

冰茶荼 发表于 2021-3-17 16:22
第一次写分析贴,感觉不是很舒爽

大佬威武,期待后续,继续学习~{:1_893:}
页: [1]
查看完整版本: 一款js加密的反调试分析【后续继续更新】