hook_body
(function(){var org=window.XMLHttpRequest.prototype.setRequestData;//请求头hook 请求表单hook setDatawindow.XMLHttpRequest.prototype.setRequestData=function(key,value){if(key=="callback"){debugger;}return org.apply(this,arguments);}
})();
hook_cookies
/*Object.defineProperty(obj, prop, descriptor)//参数obj: 对象prop: 对象的属性名descriptor: 属性的描述符*/
//这里也可以hook sessionStorage 只需要把内容改成 window 和 'sessionStorage'(function(){var cookieTemp='';Object.defineProperty(document,'cookie',{set:function(val){if(val.indexOf('v')!=-1){//表示v这个cookies存在 索引不在-1位置 就是存在// debugger;}console.log("Hoo捕捉到cookie设置->",val);cookieTemp=val;return val;},get:function(){return cookieTemp;}})})()
hook_debugger
// 构造器类型
var _constructor=constructor;
Function.prototype.constructor=function (s){if(s=="debugger"){console.log(s)return null}return _constructor(s)
}//Function类型
(()=>{Function.prototype.__constructor=Function;Function=function(){if(arguments && typeof arguments[0]==="string"){if("debugger"===arguments[0]){return}return Funciton.apply(this,arguments)}}
})()//eval类型
// hook eval函数 然后返回空就行//定时器类型
setInterval=function(){}
//这里的定时器要先看到使用 看到了使用 在使用之前给置空
hook_eval
//方式1
var _eval = evalfunction eval(argument) {console.log(argument)console.log("eval截断开始...")debugger_eval(argument);console.log("eval截断结束...")
}
//因为这个是内置的函数 所以不用找调用之前的位置 直接找到整个网页执行最开始的启动器 第一行断点 执行注入即可//方式2
const originalEval = eval;Object.defineProperty(window, 'eval', {get() {console.log("eval被调用...");debugger;return originalEval;},set(value) {console.warn("尝试修改 eval 函数");}
});var _eval = evaleval=function (argument) {console.log("eval截断开始...")debugger_eval.apply(this,[argument]);console.log("eval截断结束...")
}
(function() {var hook = function () {var org = window.XMLHttpRequest.prototype.setRequestHeader;window.XMLHttpRequest.prototype.setRequestHeader = function (key, value) {if (key == 'key') {//可能从headers中看到的是大写,但是这里可能全是小写字母 需要注意下debugger;}return org.apply(this, arguments);}}// Your code here…hook()
})();
hook_parse
//JSON.parse() 是 JavaScript 中用于将 JSON格式的字符串解析为 JavaScript 对象的方法。
//对于网页返回密文数据来说,服务器端返回回来的一定是一个JSON字符串,因为JSON是用来做前后端通信的数据格式
//然后要是想用js进行加密,要先把这个JSON字符串转换为 JavaScript 的对象
//所以对于网页数据解密,一般都会经过这个JSON.parse()方法(function () {var parse = JSON.parseJSON.parse = function (params) {// //这里可以加上条件判断,只在我们需要的位置断住// if ("xxx".indexOf(params) > -1) { //xxx是我们需要的参数// console.log("Hook JSON.parse:::", params);// debugger// return parse(params);// }console.log("Hook JSON.parse:::", params);debuggerreturn parse(params);}
})();
hook_stringify
//JSON.stringify()的作用是将JavaScript对象转换为JSON字符串,主要适用于向服务器发送请求的时候,封装一些加密的参数
(function () {var stringify = JSON.stringify;JSON.stringify = function (params) {// //这里可以加上条件判断,只在我们需要的位置断住// if ("xxx".indexOf(params) > -1) { //xxx是我们需要的参数// console.log("Hook JSON.stringify:::", params);// debugger// return stringify(params);// }//或者 因为这个params中传的是一个键值对 可以直接执行 if(params["key"]){}即可console.log("Hook JSON.stringify:::", params);debuggerreturn stringify(params);}})();
对象代理
data = {name: "yyj",age: 18,height: 180
}//给data对象添加一个代理对象,拦截get和set方法,对这个对象的操作就会触发代理对象中的get和set方法data = new Proxy(data, {get(target, key, receiver) {console.log("getting key:" + target, key, receiver)return target[key] //这里我们的return 是不严谨的 最好是使用Reflect这个东西进行返回// return Reflect.get(target, key, receiver)},set(target, key, value, receiver) {console.log("setting key:" + target, key, value, receiver)return target[key] = value// return Reflect.set(target, key, value, receiver)}
})
// console.log(data.name = "liu");
console.log(data.age=100)
console.log(data)