【JS逆向】纯异步JS逆向分析

查看 109|回复 11
作者:littlewhite11   
逆向目标
  • 网址:aHR0cHM6Ly93d3cuYXBwbGUuY29tLw==
  • 目标:逆向登录

    抓包分析
    点击右上角购物袋,选择登录。
    首先输入手机号或邮箱,点击箭头,会发起一个init请求,其中a参数需要逆向分析。


    1.png (23.3 KB, 下载次数: 0)
    下载附件
    2025-1-1 03:33 上传

    该请求的响应在后续请求参数的生成会用到。


    2.png (17.59 KB, 下载次数: 0)
    下载附件
    2025-1-1 03:33 上传

    然后输入密码进行登录,会发起一个complete请求,其中的m1和m2参数需要逆向。


    3.png (39.34 KB, 下载次数: 0)
    下载附件
    2025-1-1 03:33 上传

    闲话不多说,直接开整。
    逆向分析
  • a参数逆向

    a的跟栈就不多说了,直接从启动器往前看就可以看到


    4.png (17.68 KB, 下载次数: 0)
    下载附件
    2025-1-1 03:33 上传

    生成逻辑很清晰,跟着逻辑把代码都扣下来即可。
    这里有一个很坑的地方:f = r.publicValue其实是会走publicValue的getter函数的,如果你F10是看不到具体生成逻辑的,必须得F9才可以。
    然后publicValue属性也是一个对象,其中的bi、buffer、hex属性也是这种玩法,一定要细心,不要被坑了。


    5.png (12.7 KB, 下载次数: 0)
    下载附件
    2025-1-1 03:33 上传

    参数a细心耐心点就能搞出来。
  • m1、m2参数

    还是从启动器进去,下断,发包,跟栈。一直往前跟,就会发现m1和m2是经过异步生成的。
    下面就开始讲解这种特征异步的处理方式。
    首先我们在异步之前找个地方下断,最好是能断住我们想要的一次请求。我就在下图这个地方下断了,重新请求。


    6.png (44.73 KB, 下载次数: 0)
    下载附件
    2025-1-1 03:33 上传

    然后就会进到本篇文章所描述的特征点相关的代码,一般是switch (r.prev = r.next),我们直接下断,然后F8,然后单步跟。


    7.png (22.01 KB, 下载次数: 0)
    下载附件
    2025-1-1 03:33 上传

    这里r.next = 4表明下一次控制流会进入case 4,同时e._getSRPValues的结果就是下一次控制流的r.sent,这个原理我也不太懂,有大佬路过的话可以指点指点,然后我们直接在下一次控制流下断,F8。


    8.png (15.95 KB, 下载次数: 0)
    下载附件
    2025-1-1 03:33 上传

    可以发现m1和m2已经生成了,那就是我们错过了以下异步逻辑,重新跟。


    9.png (18.99 KB, 下载次数: 0)
    下载附件
    2025-1-1 03:33 上传

    这一次我们直接跟进去e._getSRPValues,还是一样的特征,该下断的地方都下,然后之后就按照这个逻辑跟了。
    由于异步特别容易跟丢,所以我就直接揭开谜底,函数该跟的地方直接说了,下一个需要跟的就是Et。


    10.png (22.81 KB, 下载次数: 0)
    下载附件
    2025-1-1 03:33 上传

    还是一样的特征,下一次有点特别,直接在ze.postMessage下断。


    11.png (21.44 KB, 下载次数: 0)
    下载附件
    2025-1-1 03:33 上传

    跳到ze.postMessage断点,发现是Worker,这里是postMessage,那我们就找onmessage下断。


    12.png (30.78 KB, 下载次数: 0)
    下载附件
    2025-1-1 03:33 上传

    可以看到m1和m2已经生成了。


    13.png (20.29 KB, 下载次数: 0)
    下载附件
    2025-1-1 03:33 上传

    我们网上看一个栈,可以确定就是在这生成的。
    按照之前的逻辑m1和m2从b1中来,而b1其实就是r.getEvidenceMessage(m)的结果,我们直接清空所有断点,在r.getEvidenceMessage(m)下断,重新发包。


    14.png (53.91 KB, 下载次数: 0)
    下载附件
    2025-1-1 03:33 上传

    可以看到,参数还没生成,而且h也很熟悉,就是第一个请求的响应。


    15.png (23.51 KB, 下载次数: 0)
    下载附件
    2025-1-1 03:34 上传

    接下来就是多层Promise了,直接硬刚。

    小技巧:我们怎么看哪些函数需要重点跟呢,就是你点进去发现是下面这种形式的,然后基本都会进入一个Promise,跟Promise记得F9,同时,记得在下一次控制流提前下断。



    16.png (7.71 KB, 下载次数: 0)
    下载附件
    2025-1-1 03:34 上传

    第一次,从r.getEvidenceMessage(m)进


    17.png (23.09 KB, 下载次数: 1)
    下载附件
    2025-1-1 03:34 上传

    第二次,从this.getEvidenceData(r)进


    18.png (31.57 KB, 下载次数: 1)
    下载附件
    2025-1-1 03:34 上传

    第三次,从I函数进


    19.png (31.47 KB, 下载次数: 1)
    下载附件
    2025-1-1 03:34 上传

    第四次,从e.getHash()进
    这个promise会进入很多次,后面就不赘述了。


    20.png (17.94 KB, 下载次数: 0)
    下载附件
    2025-1-1 03:34 上传

    第五次,从与I同层级的A函数进


    21.png (19.28 KB, 下载次数: 0)
    下载附件
    2025-1-1 03:34 上传

    第六次,从与I同层级的T函数进


    22.png (21.14 KB, 下载次数: 0)
    下载附件
    2025-1-1 03:34 上传

    第七次,从与I同层级的O函数进


    23.png (15.6 KB, 下载次数: 0)
    下载附件
    2025-1-1 03:34 上传

    最后,就是在这里生成的m1和m2


    24.png (10.76 KB, 下载次数: 0)
    下载附件
    2025-1-1 03:34 上传

    扣代码的话就不带着扣了,因为实在是太多了,按照前文所讲的逻辑一步一步跟着扣就可以。

    注意点:记住xxx.sent就是上一次控制流的结果,还有就是之前碰到的有bi、buffer、hash属性的对象,要重点关注各自的getter函数

    最后直接附上模拟请求结果


    25.png (90.01 KB, 下载次数: 1)
    下载附件
    2025-1-1 03:38 上传

    成功!!!

    账号网址:aHR0cHM6Ly9hcHBzdG9yZS5wYW5iYWlkLmNvbS9zaGFyZS9NVQ==,K哥提供

    下载次数, 下载附件

  • zglhappy   

    publicValue 的 getter 函数会隐藏生成逻辑,如果开发者故意将关键逻辑封装在 getter 或 Proxy 中,逆向怎么定位和还原这些关键逻辑?
    zzyzy   

    大佬,大佬,,,,我把整个js扣下来,然后function e(n) {
            if (r[n])
                return r[n].exports;
            var o = r[n] = {
                i: n,
                l: !1,
                exports: {}
            };
            return t[n].call(o.exports, o, o.exports, e),
            o.l = !0,
            o.exports
        }window.zz = e;到处e后,用python执行js,一直报错onmessage未定义,我重新定义一下,结果publicValue为空,拿不到buffer,这为啥呢
    idxinye   

    get  到了,谢谢。
    SmileLoveSex   

    学习到了,谢谢
    zwtstc   

    6,感谢分享
    wendao_lx   

    js逆向需要人头脑清醒,受教了,收藏了
    nulla2011   

    学习一下逆向
    52pojie19   

    厉害了大佬
    52pojie19   

    学习了 谢谢大佬呀
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部