JavaScript逆向基础之去除反调试代码

  • A+
所属分类:安全文章



网安引领时代,弥天点亮未来





 

JavaScript逆向基础之去除反调试代码

0x00具体操作



1.这个是接着前面一篇文章:

    (1).JavaScript逆向基础之手工还原混淆代码


2.现在很多电影网站,基本都是盗链各大视频网站的资源,然后又怕人家盗用他们的接口,会在JavaScript代码中增加反调试代码。


3.很早很早以前我也帮人写过这种接口卖给别人,但是现在已经从良了。


JavaScript逆向基础之去除反调试代码

JavaScript逆向基础之去除反调试代码


4.例如这个全民VIP视频解析,当你打算使用控制台调试他们JavaScript代码的时候,就会弹出“已在调试程序中暂停”


JavaScript逆向基础之去除反调试代码


5.通过执行debugger中断你的调试,并且会停止视频的播放,控制台会输出“请勿非法调试,请关闭后刷新重试!”。


JavaScript逆向基础之去除反调试代码

JavaScript逆向基础之去除反调试代码


6.截图右边框框里面的东西是中断你F12调试整个过程的调用堆栈。


JavaScript逆向基础之去除反调试代码


7.调用过程往回退一步,会发现以下代码。


JavaScript逆向基础之去除反调试代码


8.其中xyplay.echo("<br><br><br>检测到非法调试,请关闭后刷新重试!");,目的就是在网页输出“检测到非法调试,请关闭后刷新重试!”。


JavaScript逆向基础之去除反调试代码


9.其中代码setInterval("debugger;console.log('请勿非法调试,请关闭后刷新重试!');");目的就是设置一个定时器,一直循环执行,当你打开控制台调试代码的时候会触发这段代码,来中断你的调试。


10.调用过程再往回退一步,又会发现以下代码。


JavaScript逆向基础之去除反调试代码


11.然后在372行下一个断点,刷新页面得到code的数值是下面这串base64字符。


IC8vICB2YXIgdG90YWw9IiI7Zm9yICh2YXIgaT0wO2k8MTAwMDAwMDtpKyspe3RvdGFsPSB0b3RhbCtpLnRvU3RyaW5nKCk7aGlzdG9yeS5wdXNoU3RhdGUoMCwwLHRvdGFsKTt9ICAgICAgLy/mrbvmnLrku6PnoIEKLy9sb2NhdGlvbi5ocmVmPSJodHRwczovL3d3dy5ieG1vdi5jb20iOyAgLy/ot7PovaznvZHnq5kKeHlwbGF5LmVjaG8oIjxicj48YnI+PGJyPuajgOa1i+WIsOmdnuazleiwg+ivlSzor7flhbPpl63lkI7liLfmlrDph43or5UhIik7ICAvL+eUqOaIt+eql+WPo+aYvuekuuS/oeaBrwpzZXRJbnRlcnZhbCgiZGVidWdnZXI7Y29uc29sZS5sb2coXCfor7fli7/pnZ7ms5XosIPor5Us6K+35YWz6Zet5ZCO5Yi35paw6YeN6K+VIVwnKTsiKTsgICAgICAvL+iwg+ivleeql+WPo+aYvuekuuS/oeaBrwk=

JavaScript逆向基础之去除反调试代码


12.通过Base64在线编码解码,可以发现代码就是前面分析的中断调试的代码。


JavaScript逆向基础之去除反调试代码





13.逻辑已经很明显了,通过setTimeout延迟200毫秒,base64解码中断调试的代码,并且一直循环执行,只要打开调试控制台就中断播放。


14.文件位置在https://v.znb.me/include/class.main.js中的372行。


JavaScript逆向基础之去除反调试代码


15.至于如何处理反调试,就是把人家的代码复制下来,在本地保存成1.js,最后的代码修改这样。

if (code !== 'IC8vICB2YXIgdG90YWw9IiI7Zm9yICh2YXIgaT0wO2k8MTAwMDAwMDtpKyspe3RvdGFsPSB0b3RhbCtpLnRvU3RyaW5nKCk7aGlzdG9yeS5wdXNoU3RhdGUoMCwwLHRvdGFsKTt9ICAgICAgLy/mrbvmnLrku6PnoIEKLy9sb2NhdGlvbi5ocmVmPSJodHRwczovL3d3dy5ieG1vdi5jb20iOyAgLy/ot7PovaznvZHnq5kKeHlwbGF5LmVjaG8oIjxicj48YnI+PGJyPuajgOa1i+WIsOmdnuazleiwg+ivlSzor7flhbPpl63lkI7liLfmlrDph43or5UhIik7ICAvL+eUqOaIt+eql+WPo+aYvuekuuS/oeaBrwpzZXRJbnRlcnZhbCgiZGVidWdnZXI7Y29uc29sZS5sb2coXCfor7fli7/pnZ7ms5XosIPor5Us6K+35YWz6Zet5ZCO5Yi35paw6YeN6K+VIVwnKTsiKTsgICAgICAvL+iwg+ivleeql+WPo+aYvuekuuS/oeaBrwk=') {    setTimeout(Base64.decode(code));}

JavaScript逆向基础之去除反调试代码

JavaScript逆向基础之去除反调试代码



16.类似hook代码中的code,在运行中断调试代码之前拦截下来


17.然后使用Fiddler中的autoresponder功能,将本地代码1.js映射到https://v.znb.me/include/class.main.js,刷新缓存之后代码就换成本地了的


JavaScript逆向基础之去除反调试代码

JavaScript逆向基础之去除反调试代码

JavaScript逆向基础之去除反调试代码


18.最终效果,完美去掉反调试代码了,视频也没有终止播放,也没有出现中断调试的提示了


JavaScript逆向基础之去除反调试代码

JavaScript逆向基础之去除反调试代码






JavaScript逆向基础之去除反调试代码 

知识分享完了

喜欢别忘了关注我们哦~



学海浩茫,

予以风动,
必降弥天之润!


   弥  天

安全实验室

JavaScript逆向基础之去除反调试代码


本文始发于微信公众号(弥天安全实验室):JavaScript逆向基础之去除反调试代码

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: