js逆向之–反调试案例(案例实战:网站无线debug和检测开发者工具跳转页面)
反调试网站 https://www.aqistudy.cn/ 空气质量在线监测分析平台
当在该网站下打开开发者工具网站会自动进入debug 然后跳转到所指定页面,然后无线debug,进行反爬对抗
网站的反调试分析
此时可以说明图中的文字是网站的javascript静态资源的文件
所以全局搜索“检测到非法调试, 请关闭调试终端后刷新本页面重试!”可以检索到该资源文件
经过分析代码我们的反调试页面是由endbug函数生成的,所也在此处打上断点,然后F11跟进到该函数的内部
可以查看到网站的JavaScript检测开发者工具有没有打开的代码
function endebug(off, code) {
if (!off) {
!function(e) {
function n(e) {
function n() {
return u
}
function o() {
window.Firebug && window.Firebug.chrome && window.Firebug.chrome.isInitialized ? t("on") : (a = "off",
console.log(d),
console.clear(),
t(a))
}
function t(e) {
u !== e && (u = e,
"function" == typeof c.onchange && c.onchange(e))
}
function r() {
l || (l = !0,
window.removeEventListener("resize", o),
clearInterval(f))
}
"function" == typeof e && (e = {
onchange: e
});
var i = (e = e || {}).delay || 500
, c = {};
c.onchange = e.onchange;
var a, d = new Image;
d.__defineGetter__("id", function() {
a = "on"
});
var u = "unknown";
c.getStatus = n;
var f = setInterval(o, i);
window.addEventListener("resize", o);
var l;
return c.free = r,
c
}
var o = o || {};
o.create = n,
"function" == typeof define ? (define.amd || define.cmd) && define(function() {
return o
}) : "undefined" != typeof module && module.exports ? module.exports = o : window.jdetects = o
}(),
jdetects.create(function(e) {
var a = 0;
var n = setInterval(function() {
if ("on" == e) {
setTimeout(function() {
if (a == 0) {
a = 1;
setTimeout(code)
}
}, 200)
}
}, 100)
})
}
}
网站的无限debug 分析
- 当向下调试的时候网站会进入无限debug,Sources面板中会跳出
- 然后向前追踪栈可以找到无限debug的关键函数txsdefwsw()
有两种解决方案
-
1、使用fiddler中间人,将该JavaScript文件代理到本地,删除页面生成代码和无限debug关键函数
-
2、在endebug和txsdefwsw函数加载后执行前将该函数重写为空
endebug = function(){}
function txsdefwsw(){}