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

闭包练习(ClosurePractices)

[复制链接]
  • TA的每日心情
    慵懒
    7 小时前
  • 签到天数: 813 天

    [LV.10]以坛为家III

    31

    主题

    552

    回帖

    1556

    积分

    荣誉开发者

    积分
    1556

    荣誉开发者新人进步奖油中2周年生态建设者新人报道挑战者 lv2油中3周年喜迎中秋

    发表于 2022-7-15 22:56:17 | 显示全部楼层
    本帖最后由 steven026 于 2022-7-16 00:03 编辑
    cxxjackie 发表于 2022-7-15 21:13
    给你举个简单的例子:

    这个getType只是个判断类型的函数,但因为他用到了call,只需对call针对性劫持就 ...

    GGNB,让我恍然大悟
    我刚才试了一下,能通过劫持Array.prototype.push暴露对象,进而修改闭包内的变量
    1. const oldpush=Array.prototype.push
    2. Array.prototype.push=function(...args){
    3.     if(args[0] && args[0]["_rootLView"]){
    4.     console.log(this,...args)
    5.         window.game=args[0]["_rootLView"]
    6.     }
    7.     return oldpush.apply(this,args)
    8. }
    复制代码


    另外想问一下哥哥针对这类不调用原型方法直接给对象赋值的有办法劫持吗?
    class abc{
    constructor(){
    this.a={}
    }
    }
    const aaa=new abc()
    aaa.a=123
    回复
    订阅

    使用道具 举报

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

    [LV.1]初来乍到

    22

    主题

    881

    回帖

    1379

    积分

    荣誉开发者

    积分
    1379

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

    发表于 2022-7-16 12:26:46 | 显示全部楼层
    steven026 发表于 2022-7-15 22:56
    GGNB,让我恍然大悟
    我刚才试了一下,能通过劫持Array.prototype.push暴露对象,进而修改闭包内的变量

    class的本质是function的语法糖(js的类都是function实现的),理解了这一点就好劫持了,可以用另一个function来“改造”这个class:
    1. const realClass = abc;
    2. abc = function() {
    3.     const obj = new realClass(...arguments);
    4.     console.log(obj);
    5.     return obj;
    6. };
    复制代码

    当外部new这个假的abc时,实际new了两次,第二个new会被自动忽略,从而实现了new原class相同的效果。不过这一切的前提是取得abc的引用,如果abc也在闭包内就不太好搞了。由于实例的constructor属性指向类,即aaa.constructor === abc,可以设法在aaa之前取得另一个实例的引用,从而取得abc,当然说起来容易做起来难,闭包当然没有这么好破,还是要具体问题具体分析。

    推荐阅读:https://www.w3school.com.cn/js/pro_js_object_defining.asp
    (class关键字是ES6引入的,这篇文还没有收录,但原理相通。)
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    7 小时前
  • 签到天数: 813 天

    [LV.10]以坛为家III

    31

    主题

    552

    回帖

    1556

    积分

    荣誉开发者

    积分
    1556

    荣誉开发者新人进步奖油中2周年生态建设者新人报道挑战者 lv2油中3周年喜迎中秋

    发表于 2022-7-16 15:55:38 | 显示全部楼层
    cxxjackie 发表于 2022-7-16 12:26
    class的本质是function的语法糖(js的类都是function实现的),理解了这一点就好劫持了,可以用另一个fun ...

    谢谢哥哥解答,就是闭包内的new class,看来要找其他办法劫持了
    回复

    使用道具 举报

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

    [LV.1]初来乍到

    22

    主题

    104

    回帖

    170

    积分

    中级工程师

    积分
    170
    发表于 2022-8-13 08:03:19 | 显示全部楼层
    李恒道 发表于 2022-7-15 20:36
    后期会聊的
    主要就是通过基础函数劫持来拿一些闭包的东西

    今天才发现这条帖子下面还有这么多评论,感觉哥哥可以多讲点劫持方面的东西,哥哥的开发教程关于劫持方面我基本都看过,写的真不错,每次看到就是感觉还可以这样,感觉可以做很多事情,实际上一实战我就不知道怎么用了
    回复

    使用道具 举报

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

    [LV.7]常住居民III

    712

    主题

    5966

    回帖

    6763

    积分

    管理员

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

    积分
    6763

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

    发表于 2022-8-13 14:41:42 | 显示全部楼层
    rubinTime 发表于 2022-8-13 08:03
    今天才发现这条帖子下面还有这么多评论,感觉哥哥可以多讲点劫持方面的东西,哥哥的开发教程关于劫持方面 ...

    多练就好了
    最近有点懈怠
    好像好久没写了...
    有空继续分析下docuemnt的问题然后搞webpack的正向和编译代码解读了
    哥哥到时候可以看看
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

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

    使用道具 举报

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

    [LV.1]初来乍到

    22

    主题

    104

    回帖

    170

    积分

    中级工程师

    积分
    170
    发表于 2022-8-13 15:15:43 | 显示全部楼层
    李恒道 发表于 2022-8-13 14:41
    多练就好了
    最近有点懈怠
    好像好久没写了...

    好的,谢谢哥哥,劳逸结合,也别给自己搞得太累
    回复

    使用道具 举报

    12
    返回列表 发新帖

    发表回复

    本版积分规则

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