• Js逆向教程18-l参数分解


    作者:虚坏叔叔
    博客:https://xuhss.com

    早餐店不会开到晚上,想吃的人早就来了!😄

    Js逆向教程18-l参数分解

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ylV7XHTF-1670070645469)(../../1.png)]

    一、l参数分解

    可以看到l是一个大数组。

    里面有很多字节码

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eJE0t8iG-1670070645470)(02 - 副本.assets/image-20221203091323444.png)]

    V[$_CAIAt(353)](gt[$_CAIAt(218)](o), r[$_CAIAt(756)]())
    
    • 1

    通过字符串还原

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eXjteb5b-1670070645471)(02 - 副本.assets/image-20221203091849292.png)]

    V['encrypt'](gt['stringify'](o), r['$_CCEc']())
    
    • 1

    然后看o。

    {
        "lang": "zh-cn",
        "userresponse": "933de",
        "passtime": 389,
        "imgload": 94,
        "aa": "d(!!Rssssts_t0stsssssw(!!(p119bMb1EL9A20992$)7",
        "ep": {
            "v": "7.8.9",
            "$_BIB": false,
            "me": true,
            "tm": {
                "a": 1670029641384,
                "b": 0,
                "c": 0,
                "d": 0,
                "e": 0,
                "f": 1670029641403,
                "g": 1670029642076,
                "h": 1670029642081,
                "i": 1670029642081,
                "j": 1670029642148,
                "k": 1670029642114,
                "l": 1670029642148,
                "m": 1670029642584,
                "n": 1670029642584,
                "o": 1670029642587,
                "p": 1670029643105,
                "q": 1670029643105,
                "r": 1670029643106,
                "s": 1670029643176,
                "t": 1670029643176,
                "u": 1670029643176
            },
            "td": -1
        },
        "da0j": "1302126368",
        "rp": "acc4a24ed1c0c673bea52dfafc3b2ba6"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    并且再次启动 这个o会改变。

    {
        "lang": "zh-cn",
        "userresponse": "c088800c0c22e1",
        "passtime": 335,
        "imgload": 85,
        "aa": "N,,(!!Twwvtsv9sL*ts~s~ssvt)vsw(!!(K:1DW92092D:9:0911E8E1::",
        "ep": {
            "v": "7.8.9",
            "$_BIB": false,
            "me": true,
            "tm": {
                "a": 1670032125609,
                "b": 1670032126117,
                "c": 1670032126117,
                "d": 0,
                "e": 0,
                "f": 1670032125616,
                "g": 1670032125621,
                "h": 1670032125622,
                "i": 1670032125622,
                "j": 1670032125677,
                "k": 1670032125647,
                "l": 1670032125678,
                "m": 1670032126111,
                "n": 1670032126112,
                "o": 1670032126119,
                "p": 1670032126334,
                "q": 1670032126334,
                "r": 1670032126336,
                "s": 1670032126409,
                "t": 1670032126409,
                "u": 1670032126409
            },
            "td": -1
        },
        "da0j": "1302126368",
        "rp": "4940a9ff07828eb819bc8534cda69ac2"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    对比下来,有如下参数会变动

    • userresponse
    • imgload
    • aa 可以猜测aa就是滑动轨迹。
    • rp

    二、aa轨迹值得获取

    aa是通过e赋值的,e是函数的参数

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NRHRpBPv-1670070645471)(02 - 副本.assets/image-20221203094216188.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gxGQw5LN-1670070645472)(02 - 副本.assets/image-20221203095426861.png)]

    通过堆栈可以看到它是由l传过来的:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FkI2aoWl-1670070645473)(02 - 副本.assets/image-20221203095638029.png)]

    再次调试 跟到这个l计算的地方

    l = n[$_DAAAV(913)][$_DAAAV(1059)](n[$_DAAAV(913)][$_CJJJb(1066)](), n[$_DAAAV(69)][$_CJJJb(1097)], n[$_DAAAV(69)][$_CJJJb(319)]);
    
    • 1

    还原“

    l = n['$_CICM']['$_BBEM'](n['$_CICM']['$_FDU'](), n['$_CJa']['c'], n['$_CJa']['s']);
    
    • 1

    可以看出来,这是一个方法传递3个参数,将参数还原出来

    第一个参数得到的是已经编码好的值 是和轨迹相关的。

    n['$_CICM']['$_FDU']()
    'U-!!Lxusttttst(ysttsttstt!!(S2891912028112011192'
    
    • 1
    • 2

    第二个参数是直接获取的,这数据是从get.php请求里面获取的c

    n['$_CJa']['c']
    (9) [12, 58, 98, 36, 43, 95, 62, 15, 12]
    
    • 1
    • 2

    第三个参数是js的crc版本数据校验值 是从get.php请求里面获取的s

    n['$_CJa']['s']
    '3a39574c'
    
    • 1
    • 2

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rm8Wopnl-1670070645473)(02 - 副本.assets/image-20221203101255045.png)]

    2.1参数破解

    确定了第一个参数是轨迹相关之后 可以进到这个函数里面 看一下轨迹是如何计算出的。

    "\u0024\u005f\u0046\u0044\u0055": function() {
                    var $_BEGJO = QBLnx.$_CM
                      , $_BEGIl = ['$_BEHCE'].concat($_BEGJO)
                      , $_BEHAL = $_BEGIl[1];
                    $_BEGIl.shift();
                    var $_BEHBJ = $_BEGIl[0];
                    function n(t) {
                        var $_DBEAP = QBLnx.$_Db()[3][19];
                        for (; $_DBEAP !== QBLnx.$_Db()[12][17]; ) {
                            switch ($_DBEAP) {
                            case QBLnx.$_Db()[0][19]:
                                var e = $_BEGJO(447)
                                  , n = e[$_BEGJO(125)]
                                  , r = $_BEGJO(15)
                                  , i = Math[$_BEGJO(360)](t)
                                  , o = parseInt(i / n);
                                n <= o && (o = n - 1),
                                o && (r = e[$_BEGJO(187)](o));
                                $_DBEAP = QBLnx.$_Db()[12][18];
                                break;
                            case QBLnx.$_Db()[9][18]:
                                var s = $_BEHAL(15);
                                return t < 0 && (s += $_BEHAL(474)),
                                r && (s += $_BEGJO(411)),
                                s + r + e[$_BEGJO(187)](i %= n);
                                break;
                            }
                        }
                    }
                    var t = function(t) {
                        var $_BEHET = QBLnx.$_CM
                          , $_BEHDy = ['$_BEHHD'].concat($_BEHET)
                          , $_BEHFo = $_BEHDy[1];
                        $_BEHDy.shift();
                        var $_BEHGR = $_BEHDy[0];
                        for (var e, n, r, i = [], o = 0, s = 0, a = t[$_BEHET(125)] - 1; s < a; s++)
                            e = Math[$_BEHET(129)](t[s + 1][0] - t[s][0]),
                            n = Math[$_BEHFo(129)](t[s + 1][1] - t[s][1]),
                            r = Math[$_BEHET(129)](t[s + 1][2] - t[s][2]),
                            0 == e && 0 == n && 0 == r || (0 == e && 0 == n ? o += r : (i[$_BEHET(173)]([e, n, r + o]),
                            o = 0));
                        return 0 !== o && i[$_BEHET(173)]([e, n, o]),
                        i;
                    }(this[$_BEHAL(343)])
                      , r = []
                      , i = []
                      , o = [];
                    return new ct(t)[$_BEHAL(20)](function(t) {
                        var $_BEHJs = QBLnx.$_CM
                          , $_BEHIl = ['$_BEICx'].concat($_BEHJs)
                          , $_BEIAy = $_BEHIl[1];
                        $_BEHIl.shift();
                        var $_BEIBp = $_BEHIl[0];
                        var e = function(t) {
                            var $_BEIEr = QBLnx.$_CM
                              , $_BEIDP = ['$_BEIHs'].concat($_BEIEr)
                              , $_BEIFF = $_BEIDP[1];
                            $_BEIDP.shift();
                            var $_BEIGe = $_BEIDP[0];
                            for (var e = [[1, 0], [2, 0], [1, -1], [1, 1], [0, 1], [0, -1], [3, 0], [2, -1], [2, 1]], n = 0, r = e[$_BEIEr(125)]; n < r; n++)
                                if (t[0] == e[n][0] && t[1] == e[n][1])
                                    return $_BEIFF(406)[n];
                            return 0;
                        }(t);
                        e ? i[$_BEHJs(173)](e) : (r[$_BEHJs(173)](n(t[0])),
                        i[$_BEIAy(173)](n(t[1]))),
                        o[$_BEIAy(173)](n(t[2]));
                    }),
                    r[$_BEGJO(421)]($_BEGJO(15)) + $_BEGJO(452) + i[$_BEGJO(421)]($_BEGJO(15)) + $_BEHAL(452) + o[$_BEGJO(421)]($_BEGJO(15));
                }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70

    折叠代码看的更加清楚

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mrL5488P-1670070645474)(02 - 副本.assets/image-20221203105451415.png)]

    调试进去可以看到t存的是坐标,它是一个数组

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J91FMZWY-1670070645475)(02 - 副本.assets/image-20221203111206857.png)]

    
    
    • 1

    然后,对单个坐标进行处理:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UxdEFN2S-1670070645475)(02 - 副本.assets/image-20221203111352200.png)]

    最终返回如下:

    r[$_BEGJO(421)]($_BEGJO(15)) + $_BEGJO(452) + i[$_BEGJO(421)]($_BEGJO(15)) + $_BEHAL(452) + o[$_BEGJO(421)]($_BEGJO(15));
    
    • 1

    还原:

    r['join']('') + '!!' + i['join']('') + '!!' + o['join']('');
    
    • 1

    40:00

    所以需要将这段代码抠出来,传递轨迹进去,就能够得到加密的字符串

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kd0LkjBJ-1670070645476)(02 - 副本.assets/image-20221203174454718.png)]

    它需要将轨迹参数传递进去:轨迹转换成字符串

    '[[-37,-25,0],[0,0,0],[1,-1,4],[2,-1,13],[3,-1,21],[6,-2,29],[6,-2,37],[7,-3,53],[8,-3,61],[10,-3,69],[10,-3,77],[11,-3,93],[14,-3,100],[15,-3,109],[15,-3,117],[19,-3,125],[21,-3,133],[24,-3,142],[27,-3,149],[30,-3,158],[31,-3,165],[34,-3,173],[35,-3,181],[35,-3,189],[36,-3,198],[36,-3,310]]'
    
    • 1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tHbhvv0f-1670070645476)(02 - 副本.assets/image-20221203175926841.png)]

    这个时候,将这个数组作为字符串,传递到window.get_track()函数 可以获得一个加密的结果:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4yDldVVa-1670070645477)(02 - 副本.assets/image-20221203180243655.png)]

    2.2函数破解

    函数在这里:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ncSDL7W5-1670070645477)(02 - 副本.assets/image-20221203195720676.png)]

    搜索一下,都在一块代码里面 我们可以将这个函数也导出去:

    		window.get_track = W[$_CJFA(230)]["\u0024\u005f\u0046\u0044\u0055"];
    		window.get_method = W[$_CJFA(230)]["\u0024\u005f\u0042\u0042\u0045\u004d"];
    
    • 1
    • 2

    总结

    最后的最后
    由本人水平所限,难免有错误以及不足之处, 屏幕前的靓仔靓女们 如有发现,恳请指出!

    最后,谢谢你看到这里,谢谢你认真对待我的努力,希望这篇博客对你有所帮助!

    你轻轻地点了个赞,那将在我的心里世界增添一颗明亮而耀眼的星!

    💬 往期优质文章分享

    🚀 优质教程分享 🚀

    • 🎄如果感觉文章看完了不过瘾,可以来我的其他 专栏 看一下哦~
    • 🎄比如以下几个专栏:Python实战微信订餐小程序、Python量化交易实战、C++ QT实战类项目 和 算法学习专栏
    • 🎄可以学习更多的关于C++/Python的相关内容哦!直接点击下面颜色字体就可以跳转啦!
    学习路线指引(点击解锁)知识定位人群定位
    🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
    💛Python量化交易实战 💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统
    ❤️ C++ QT结合FFmpeg实战开发视频播放器❤️难度偏高分享学习QT成品的视频播放器源码,需要有扎实的C++知识!
    💚 游戏爱好者九万人社区💚互助/吹水九万人游戏爱好者社区,聊天互助,白嫖奖品
    💙 Python零基础到入门 💙Python初学者针对没有经过系统学习的小伙伴,核心目的就是让我们能够快速学习Python的知识以达到入门

    🚀 资料白嫖,温馨提示 🚀

    关注下面卡片即刻获取更多编程知识,包括各种语言学习资料,上千套PPT模板和各种游戏源码素材等等资料。更多内容可自行查看哦!

    请添加图片描述

  • 相关阅读:
    利用文件操作解决下面的程序问题
    硬核剖析Java锁底层AQS源码,深入理解底层架构设计
    Golang 中空的切片转化成 JSON 后变为 null 的问题如何解决?
    细说react源码中的合成事件
    Stanford CS143 速通PA1教程
    React之refs
    visual studio2022使用tensorRT配置
    速报|StarRocks亮相云栖大会,携手阿里云EMR 打造极速数据湖分析新体验
    每晚坚持10点前睡觉,半年后有什么变化?感觉自己年轻好几岁
    React 如何拿时间戳计算得到开始和结束时间戳
  • 原文地址:https://blog.csdn.net/huangbangqing12/article/details/128166079