web逆向 | 常见的反调试方式和绕过细谈

Web 逆向|前端反调试方式及绕过细谈
在 Web 逆向中,网站通常使用各种方式来检测调试工具并进行反调试操作。以下是常见的 反调试技术及 相应的破解方法。
1.window
对象
反调试方式
window.close()
→ 关闭当前页面,防止调试破解方案
window.close = function() { console.log("阻止 window.close()"); };
2.history
对象
反调试方式
history.back()
→ 返回上一页history.forward()
→ 前进一页history.go(n)
→ 跳转指定页面破解方案
history.back = function() { console.log("阻止 history.back()"); }; history.forward = function() { console.log("阻止 history.forward()"); }; history.go = function() { console.log("阻止 history.go()"); };
3.console
对象
反调试方式
console.log()
/console.table()
→ 通过输出内容检测 DevToolsconsole.clear()
→ 清除控制台内容破解方案
console.clear = function() { console.log("console.clear 被拦截"); }; console.log = function() { console.warn("console.log 被拦截"); }; console.table = function() { console.warn("console.table 被拦截"); };
4.location
对象
反调试方式
location.href = "URL"
→ 页面重定向location.reload()
→ 刷新页面,使 Hook 失效location.replace("URL")
→ 替换当前页面location.assign("URL")
→ 加载新页面破解方案
location.reload = function() { console.log("阻止 location.reload()"); }; location.replace = function() { console.log("阻止 location.replace()"); }; location.assign = function() { console.log("阻止 location.assign()"); };
5.setInterval
&setTimeout
反调试方式
window.setInterval(func, delay)
→ 反复执行func
window.setTimeout(func, delay)
→ 延迟func
执行破解方案
let _setInterval = window.setInterval; let _setTimeout = window.setTimeout; window.setInterval = function(func, delay) { if (func.toString().includes('debugger')) return; return _setInterval(func, delay); }; window.setTimeout = function(func, delay) { if (func.toString().includes('debugger')) return; return _setTimeout(func, delay); };
6.debugger
关键字
反调试方式
debugger;
会在 DevTools 打开时暂停执行解决方案:
1、在开发者工具中禁用断点(Chrome的Deactivate breakpoints)。
2、使用代码注入或Hook技术绕过debugger语句。破解方案
function removeDebugger() { let scriptList = document.querySelectorAll("script"); scriptList.forEach(script => { script.innerHTML = script.innerHTML.replace(/debugger;/g, ""); }); } removeDebugger(); //移除Debugger()
7. 开发者工具 (DevTools) 检测
反调试方式
检测
window.outerHeight
&window.outerWidth
setInterval(() => { if (window.outerHeight - window.innerHeight > 200 || window.outerWidth - window.innerWidth > 200) { alert("调试模式检测到"); window.location.href = "about:blank"; } }, 1000);
破解方案
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
文章目录