所谓Hook 是一种钩子技术,在系统没有调用函数之前,钩子程序就先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,也可以强制结束消息的传递。简单来说,修改原有的 JS
代码就是 Hook。不影响原程序进行。
一.常见debugger
所谓debugger就是断点,阻止你调试网站。
1.最low的debugger,直接右键设置
2.设置条件
当定义器运行到这个debugger
这个代码的时候,那么这个时候它为true
,它肯定执行我们的debugger
代码,那我们可以用浏览器的功能给他改成false
鼠标右击行号,添加条件断点,添加一个不成立的条件写个1===0的先验条件,永远为假,就永远不会进入这个断点了。
3.方法置空
注:一定要在debugger进入之前,一般开油猴,或者节流模式不断注入
setInterval = function(){}
4.替换文件过debugger
把JS
文件保存到本地修改,修改范围主要是将debugger相关的代码删除或者改写,可以使用文件替换方式
5.注入代码过debugger
调用constructor方法我们判断他传递的参数是不是debugger,会导致无限debugger要是debugger的话就把这个方法改写,要不是的话就是用源方法返回
var _constructor = constructor;
Function.prototype.constructor = function(s) {
if ( s== "debugger") {
console.log(s);
return null;
}
return _constructor(s);
}
二.hook JSON.parse(常用于响应解密)
因为响应密文解密后是字符串的json,字符串要传数据得是json格式,所以用 JSON.parse进行转换成json格式
(function() {
var _parse = JSON.parse;
JSON.parse = function(ps) {
console.log("Hook JSON.parse ——> ", ps);
debugger;
return _parse(ps); // 不改变原有的执行逻辑
}
})();
案例:https://www.ccprec.com/projectSecPage/#/cqzr
断住
跟两次出来了
跟栈
出来了
控制台输出
三.hook JSON.stringify(一般位于载荷)
可能某些效验的参数是json格式的参数转字符串进行加密
案例同上
(function() {
var _stringify = JSON.stringify;
JSON.stringify = function(ps) {
console.log("Hook JSON.stringify ——> ", ps);
debugger;
return _stringify(ps); // 不改变原有的执行逻辑
}
})();
断住,传对象,即json格式
跟三次,明显为载荷的格式
跟栈
打断点,明显为return返回
控制台输出得出结果
四.hook 定时器
hook 定时器清空主要是有些打开控制台会立刻关闭,只要通过定时器实现,讲定时器清空后就能正常打开了。
(function() {
'use strict';
// document.addEventListener = function (){}
window.setInterval = function (){}
//window.setTimeout = function(){};
// window.location.href =
//_log = console.log
})();
案例:种子音乐|抖音歌曲|免费在线Mp3听歌音乐播放器|热门歌曲排行榜|最新歌曲大全
进去前打开脚本断点
检测控制台的机制
原理:当控制台被触发时,debugger;
语句会让代码暂停执行。如果调试器已启用,程序会在此处停下,直到用户继续执行。这意味着从st
到et
的时间差会显著增加。
目的:如果时间差超过了1秒(这里设置的阈值),就可以认为调试器被触发了。这通常用于防止用户调试代码,或者在检测到调试时执行某些操作。
用hook 定时器,直接清空定时器,不让触发
顺利打开
五.hook cookies
(function () {
cookieTemp = document.cookie;
Object.defineProperty(document, 'cookie', {
set: function (val) {
{ //v为监测cookie的键
debugger;
}
console.log('Hook捕获到cookie设置->', val);
cookieTemp = val;
},
get: function () {
return cookieTemp;
},
});
})();
六.hook url字符串参数
定位url参数xxx的生成位置
(function () {
var open = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function (method, url, async) {
if (url.indexOf("xxx") != -1) {
debugger;
}
return open.apply(this, arguments);
};
})();
定位s的生成位置,运行脚本