上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖
楼主: 李恒道 - 

[油猴脚本开发指南]XHR劫持的第二种格式

[复制链接]
  • TA的每日心情
    开心
    2022-3-7 09:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    22

    主题

    104

    回帖

    170

    积分

    中级工程师

    积分
    170
    发表于 2022-2-19 12:18:52 | 显示全部楼层
    因为这样可以形成对某一个xhr进行劫持,如果设置到原型链上相当于对所有的xhr进行了一次劫持,如果你的劫持get内有大量的回调代码会严重拖慢运行的速度

    感觉劫持xhr没有劫持原型也是对全体xhr的劫持,重写了open方法之后,每个xhr实例访问response属性都会被劫持啊
    回复
    订阅

    使用道具 举报

  • TA的每日心情
    开心
    2022-3-7 09:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    22

    主题

    104

    回帖

    170

    积分

    中级工程师

    积分
    170
    发表于 2022-2-19 12:25:12 | 显示全部楼层
    rubinTime 发表于 2022-2-19 12:18
    因为这样可以形成对某一个xhr进行劫持,如果设置到原型链上相当于对所有的xhr进行了一次劫持,如果你的劫持 ...

    哦我知道了,没问题,进入里面是有条件,需要url满足自己的需求才会被劫持
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5959

    回帖

    6758

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6758

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2022-2-19 12:47:02 | 显示全部楼层
    rubinTime 发表于 2022-2-19 12:25
    哦我知道了,没问题,进入里面是有条件,需要url满足自己的需求才会被劫持 ...

    没事的,即使全部劫持了,也不会有任何影响
    现在计算机性能非常高的
    包括tampermonkey也会遍历对特定属性处理
    vue也会对所有data做definepropety做依赖收集,数组也会全部做hook
    只要不集中做大量,密集,耗时的运算
    这点性能耗费很低的,0.001ms都跑不上
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    881

    回帖

    1379

    积分

    荣誉开发者

    积分
    1379

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2022-2-21 19:50:03 | 显示全部楼层
    第一段代码里的response和responseText统一一下吧,我看到不止一个人抄这段代码前后不一致了,还是注意一下比较好。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5959

    回帖

    6758

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6758

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2022-2-21 22:06:04 | 显示全部楼层
    cxxjackie 发表于 2022-2-21 19:50
    第一段代码里的response和responseText统一一下吧,我看到不止一个人抄这段代码前后不一致了,还是注意一下 ...

    已经修正完毕了,哥哥
    最近在筹划专门建一个教程站,重新整理一下教程
    竟然还有人抄教程源码,莫名有点感动
    我一直以为超过30章之后就根本没人看了
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    4

    回帖

    93

    积分

    初级工程师

    积分
    93
    发表于 2022-10-7 10:33:08 | 显示全部楼层
    感谢!已经用这个方法跳过登录验证了。
    通宵糊的代码:https://github.com/Eished/jkforu ... rc/lib/hackLogin.ts
    回复

    使用道具 举报

    该用户从未签到

    16

    主题

    56

    回帖

    91

    积分

    初级工程师

    积分
    91

    新人报道

    发表于 2022-12-31 12:10:23 | 显示全部楼层
    请问是直接这样写吗,发现捕获不到啊,可以给个完整点的参考例子吗,急需。感谢!!!


    1. // ==UserScript==
    2. // [url=home.php?mod=space&uid=23356]@name[/url]         [major]劫持并修改
    3. // @namespace    https://bbs.tampermonkey.net.cn/
    4. // @version      0.1.0
    5. // @description  try to take over the world!
    6. // @author       You
    7. // [url=home.php?mod=space&uid=52134]@match[/url]        {{match}}
    8. // @match        http*://*/show?id*
    9. // @run-at       document-start
    10. // ==/UserScript==


    11. (function() {

    12.     const xhrOpen = XMLHttpRequest.prototype.open;
    13.     XMLHttpRequest.prototype.open = function() {
    14.         let url = '/api/show'
    15.         if (arguments[1] == url) {
    16.         const xhr = this;
    17.         const getter = Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype, 'response').get;
    18.         Object.defineProperty(xhr, 'response', {
    19.             get: () => {
    20.             let result = getter.call(xhr);
    21.             console.log(result)
    22.             //这里可以修改result
    23.             return result;
    24.             }
    25.         });
    26.         }
    27.         return xhrOpen.apply(xhr, arguments);
    28.     };
    29. })();
    复制代码
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    881

    回帖

    1379

    积分

    荣誉开发者

    积分
    1379

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2022-12-31 12:26:13 | 显示全部楼层
    Major 发表于 2022-12-31 12:10
    请问是直接这样写吗,发现捕获不到啊,可以给个完整点的参考例子吗,急需。感谢!!!

    ...

    不一定是response,也可能是responseText,要根据代码读取的情况劫持对应属性。可以试试这个:https://bbs.tampermonkey.net.cn/thread-3284-1-1.html
    回复

    使用道具 举报

    该用户从未签到

    16

    主题

    56

    回帖

    91

    积分

    初级工程师

    积分
    91

    新人报道

    发表于 2022-12-31 13:06:10 | 显示全部楼层
    cxxjackie 发表于 2022-12-31 12:26
    不一定是response,也可能是responseText,要根据代码读取的情况劫持对应属性。可以试试这个:https://bb ...

    捕获json数据怎么写
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    881

    回帖

    1379

    积分

    荣誉开发者

    积分
    1379

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2022-12-31 19:54:06 | 显示全部楼层
    Major 发表于 2022-12-31 13:06
    捕获json数据怎么写

    原响应是json,且responseType设置为json,才能捕获到json对象,否则就是json字符串,需要自己做转换:
    1. ajaxHooker.hook(request => {
    2.     if (request.url === 'https://www.example.com/') {
    3.         request.response = res => {
    4.             const json = JSON.parse(res.responseText);
    5.             json.test = 'hello';
    6.             res.responseText = JSON.stringify(json);
    7.         };
    8.     }
    9. });
    复制代码
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表