rubinTime
发表于 2022-2-19 12:18:52
因为这样可以形成对某一个xhr进行劫持,如果设置到原型链上相当于对所有的xhr进行了一次劫持,如果你的劫持get内有大量的回调代码会严重拖慢运行的速度
感觉劫持xhr没有劫持原型也是对全体xhr的劫持,重写了open方法之后,每个xhr实例访问response属性都会被劫持啊
rubinTime
发表于 2022-2-19 12:25:12
rubinTime 发表于 2022-2-19 12:18
因为这样可以形成对某一个xhr进行劫持,如果设置到原型链上相当于对所有的xhr进行了一次劫持,如果你的劫持 ...
哦我知道了,没问题,进入里面是有条件,需要url满足自己的需求才会被劫持
李恒道
发表于 2022-2-19 12:47:02
rubinTime 发表于 2022-2-19 12:25
哦我知道了,没问题,进入里面是有条件,需要url满足自己的需求才会被劫持 ...
没事的,即使全部劫持了,也不会有任何影响
现在计算机性能非常高的
包括tampermonkey也会遍历对特定属性处理
vue也会对所有data做definepropety做依赖收集,数组也会全部做hook
只要不集中做大量,密集,耗时的运算
这点性能耗费很低的,0.001ms都跑不上
cxxjackie
发表于 2022-2-21 19:50:03
第一段代码里的response和responseText统一一下吧,我看到不止一个人抄这段代码前后不一致了,还是注意一下比较好。
李恒道
发表于 2022-2-21 22:06:04
cxxjackie 发表于 2022-2-21 19:50
第一段代码里的response和responseText统一一下吧,我看到不止一个人抄这段代码前后不一致了,还是注意一下 ...
已经修正完毕了,哥哥
最近在筹划专门建一个教程站,重新整理一下教程
竟然还有人抄教程源码,莫名有点感动
我一直以为超过30章之后就根本没人看了
Kished
发表于 2022-10-7 10:33:08
感谢!已经用这个方法跳过登录验证了。
通宵糊的代码:https://github.com/Eished/jkforum_helper/blob/main/src/lib/hackLogin.ts
Major
发表于 2022-12-31 12:10:23
请问是直接这样写吗,发现捕获不到啊,可以给个完整点的参考例子吗,急需。感谢!!!
// ==UserScript==
// @name 劫持并修改
// @namespace https://bbs.tampermonkey.net.cn/
// @version 0.1.0
// @descriptiontry to take over the world!
// @author You
// @match {{match}}
// @match http*://*/show?id*
// @run-at document-start
// ==/UserScript==
(function() {
const xhrOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function() {
let url = '/api/show'
if (arguments == url) {
const xhr = this;
const getter = Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype, 'response').get;
Object.defineProperty(xhr, 'response', {
get: () => {
let result = getter.call(xhr);
console.log(result)
//这里可以修改result
return result;
}
});
}
return xhrOpen.apply(xhr, arguments);
};
})();
cxxjackie
发表于 2022-12-31 12:26:13
Major 发表于 2022-12-31 12:10
请问是直接这样写吗,发现捕获不到啊,可以给个完整点的参考例子吗,急需。感谢!!!
...
不一定是response,也可能是responseText,要根据代码读取的情况劫持对应属性。可以试试这个:https://bbs.tampermonkey.net.cn/thread-3284-1-1.html
Major
发表于 2022-12-31 13:06:10
cxxjackie 发表于 2022-12-31 12:26
不一定是response,也可能是responseText,要根据代码读取的情况劫持对应属性。可以试试这个:https://bb ...
捕获json数据怎么写
cxxjackie
发表于 2022-12-31 19:54:06
Major 发表于 2022-12-31 13:06
捕获json数据怎么写
原响应是json,且responseType设置为json,才能捕获到json对象,否则就是json字符串,需要自己做转换:
ajaxHooker.hook(request => {
if (request.url === 'https://www.example.com/') {
request.response = res => {
const json = JSON.parse(res.responseText);
json.test = 'hello';
res.responseText = JSON.stringify(json);
};
}
});