• 猿人学-第二题


    1.1 目标网站

    https://match.yuanrenxue.com/match/2

    1.2 加密方式和思路

    在这里插入图片描述

    加密方式为cookie中的m值
    cookie的话直接进行hook即可。
    
    • 1
    • 2

    Hook代码

    油猴:

    // ==UserScript==
    // @name         一行
    // @namespace    http://tampermonkey.net/
    // @version      0.1
    // @description  try to take over the world!
    // @author       You
    // @match        https://*/*
    // @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
    // @grant        none
    // @run-at       document-start
    // ==/UserScript==
    (function() {
        Object.defineProperty(document, 'cookie', {
            set: function(val) {
                debugger ;return val;
            },
        });
    }
    )();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    其中@run-at 为设置注入时机, 如果时机不对是捕捉不到m值的。
    因为页面分为两次请求第一次返回js代码设置cookie,后面页面接口都带着第一次返回的cookie。
    但是第一次页面中返回值为空。所以看不到hook不到cookie

    1.3 Hook不到cookie解决方式

    • 油猴@run-at设置为document-start
    • 手动hook时, 打上script断点标签到达生成cookie代码页,在Console中输入hook代码。关闭script断点即可。

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    2.1 分析堆栈

    2.1.1 寻找堆栈

    在这里插入图片描述

    // 代码
    document[$dbsm_0x42c3(qqLQOq, iOiqII) + $dbsm_0x42c3(q1IoqQ, QQlLlq)] = _0x5500bb['\x4e\x74\x44' + '\x72\x43'](_0x5500bb[$dbsm_0x42c3(qqqQoq, oqQiiO) + '\x6d\x65'](_0x5500bb[$dbsm_0x42c3(Ioo0ql, olq0Oq) + '\x6d\x65'](_0x5500bb[$dbsm_0x42c3(qOIqQi, OOqIQi) + '\x72\x44'](_0x5500bb[$dbsm_0x42c3(Q1qoqQ, lILOOq) + '\x72\x44'](_0x5500bb[$dbsm_0x42c3(qOO1Q0, oiqlQQ) + '\x72\x44'](Ql1OO0, _0x5500bb['\x7a\x76\x67' + '\x6c\x77'](_0x3c9ca8)), Qoqq0I), _0x5500bb[$dbsm_0x42c3(iqOiQ0, QOiq0Q) + '\x47\x6b'](_0x313b78, _0x160e3a)), lOo0QQ), _0x160e3a), _0x5500bb[$dbsm_0x42c3(qiOOiO, liQIoQ) + '\x4e\x5a']),
    
    • 1
    • 2

    2.1.2 寻找每个变量值

    在这里插入图片描述

    // 得出简易看懂的cookie生成
    document['cookie'] =
        _0x5500bb['NtD' + 'rC']
        (_0x5500bb['KGB' + 'me']
            (_0x5500bb['KGB' + 'me']
            (_0x5500bb['mQK' + 'rD']
            (_0x5500bb['mQK' + 'rD']
                (_0x5500bb['mQK' + 'rD']
                (''), '='),
                _0x5500bb['wWb' + 'Gk'](_0x313b78, _0x160e3a)), '|'), _0x160e3a),
            '; path=/')
    // 再次简化
    _0x5500bb['wWb' + 'Gk'](_0x313b78, _0x160e3a))
    // 控制台输入_0x5500bb['wWb' + 'Gk']发现调用的_0x313b78 参数为_0x160e3a, 即补全_0x313b78即可
    _0x313b78
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2.1.3 补环境

    _0x313b78考下来缺啥补啥。

    function _0xdad69f(_0x160e3a, _0x3818c5) {
       if (_0x5500bb['\x4b\x4e\x71' + '\x5a\x49'](_0x5500bb['\x77\x4c\x4b' + '\x4a\x73'], _0x5500bb['\x77\x4c\x4b' + '\x4a\x73'])) {
           document[$dbsm_0x42c3(qqLQOq, iOiqII) + $dbsm_0x42c3(q1IoqQ, QQlLlq)] = _0x5500bb['\x4e\x74\x44' + '\x72\x43'](_0x5500bb[$dbsm_0x42c3(qqqQoq, oqQiiO) + '\x6d\x65'](_0x5500bb[$dbsm_0x42c3(Ioo0ql, olq0Oq) + '\x6d\x65'](_0x5500bb[$dbsm_0x42c3(qOIqQi, OOqIQi) + '\x72\x44'](_0x5500bb[$dbsm_0x42c3(Q1qoqQ, lILOOq) + '\x72\x44'](_0x5500bb[$dbsm_0x42c3(qOO1Q0, oiqlQQ) + '\x72\x44'](Ql1OO0, _0x5500bb['\x7a\x76\x67' + '\x6c\x77'](_0x3c9ca8)), Qoqq0I), _0x5500bb[$dbsm_0x42c3(iqOiQ0, QOiq0Q) + '\x47\x6b'](_0x313b78, _0x160e3a)), lOo0QQ), _0x160e3a), _0x5500bb[$dbsm_0x42c3(qiOOiO, liQIoQ) + '\x4e\x5a']),
           location[$dbsm_0x42c3(I0oIiq, OqoQOi) + $dbsm_0x42c3(qqqoQo, oq10Oo)]();
       } else {
           return debuggerProtection;
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.1.4 注意事项。

    • 代码被十六进制混淆, 运行会导致一些问题, 如对象中函数对应的key乱码情况 所以$dbsm_0x123c应该进行解码
    • 代码卡死, 类似于sojson, 正则判断是否格式化, 这种直接对相应函数不进行格式化即可, 也可在相应位置打上debugger进行分析跳过
    • console被重写, 在测试过程使用console.log()报错。此情况应该为代码逻辑中有代码将console重写。在js文件首行将console进行赋值使用即可。mylog = console, 使用mylog.log()即可

    在这里插入图片描述

    在这里插入图片描述

    3.1 代码

    太长不贴了

  • 相关阅读:
    Callback详解
    【JAVA程序设计】(C00085)基于Servlet+jsp的图书信息管理
    Promise(微任务)- 让你看完就懂
    hdlbits系列verilog解答(always块条件语句)-37
    LeetCode刷题记录01
    Java笔记:MAT使用详解
    【P15 Python基础】Pandas
    聚合电商API接口平台:让数据成为生产力!
    五、Vue3基础之五
    ModelAndView类简介说明
  • 原文地址:https://blog.csdn.net/weixin_44301439/article/details/126193421