【WP】猿人学_2_js混淆_动态cookie

https://match.yuanrenxue.cn/match/2
在这里插入图片描述

抓包分析

根据发包加密参数在cookie
在这里插入图片描述

删除cookie带的m参数,重新点击其他页面,然后使用Fiddler抓包

在这里插入图片描述
第一个包请求没有携带m,但是后面的请求是附带了m了,所以m就是在此之间生成
在这里插入图片描述

在这里插入图片描述
查看不带m请求的返回数据,发现返回是一段js代码,很有可能就是这段代码生成了需要的m参数
在这里插入图片描述

调试找入口

回到浏览器,删除cookie中的m参数,然后刷新页面
在这里插入图片描述
会出现一个无限debugger,点到上层堆栈

[$dbsm_0x4847('\x30\x78\x34\x63', '\x58\x23\x32\x39') + $dbsm_0x4847('\x30\x78\x31\x62\x31', '\x4d\x70\x54\x59') + $dbsm_0x4847('\x30\x78\x31\x65\x31', '\x6a\x35\x4b\x51') + '\x6f\x72'](_0x280c63[$dbsm_0x4847('\x30\x78\x33\x38\x34', '\x24\x71\x37\x75') + '\x61\x50'](_0x280c63['\x50\x4b\x44' + '\x41\x6b'], _0x280c63[$dbsm_0x4847('\x30\x78\x31\x63\x35', '\x55\x21\x35\x74') + '\x54\x68']))['\x63\x61\x6c' + '\x6c'](_0x280c63[$dbsm_0x4847('\x30\x78\x31\x31\x37', '\x33\x26\x51\x25') + '\x74\x68']));

结构是很经典的
在这里插入图片描述
对debugger的构成字符置空
在这里插入图片描述
这时还需要对cookie进行hook ,下面是代码,在控制台运行,得到document…就是运行成功
在这里插入图片描述


Object.defineProperty(document, 'cookie', {
    set: function (val) {
        if (val.indexOf('m') !== -1) {
            debugger;
            return val;
        }

    },
});

下面F8跳到下一个断点,就会断在set cookie的地方
在这里插入图片描述
往上追一层,cookie就是在此设置

document['\x63\x6f\x6f' + $dbsm_0x4847('\x30\x78\x34\x63\x66', '\x47\x54\x67\x79')] = _0x3edf8c[$dbsm_0x4847('\x30\x78\x31\x64\x63', '\x42\x6c\x32\x64') + '\x64\x50'](_0x3edf8c[$dbsm_0x4847('\x30\x78\x33\x32\x61', '\x53\x69\x34\x49') + '\x64\x50'](_0x3edf8c[$dbsm_0x4847('\x30\x78\x32\x38\x35', '\x2a\x4c\x75\x7a') + '\x64\x50'](_0x3edf8c[$dbsm_0x4847('\x30\x78\x32\x32\x38', '\x76\x57\x28\x33') + '\x53\x6e'](_0x3edf8c['\x75\x62\x76' + '\x70\x67'](_0x3edf8c[$dbsm_0x4847('\x30\x78\x37\x30', '\x4f\x6b\x35\x62') + '\x47\x5a']('\x6d', _0x3edf8c[$dbsm_0x4847('\x30\x78\x31\x38\x39', '\x67\x6d\x53\x63') + '\x4d\x4d'](_0x3823cf)), '\x3d'), _0x3edf8c[$dbsm_0x4847('\x30\x78\x31\x61\x31', '\x53\x65\x23\x7a') + '\x48\x52'](_0x132a93, _0x50b846)), '\x7c'), _0x50b846), _0x3edf8c['\x76\x55\x45' + '\x6a\x7a']);

根据代码结构一层层在控制台里面输出,根据下面过程就可以发现

  • 加密函数为 _0x132a93
  • 传入的时间戳格式为1717640384000数字类型
    在这里插入图片描述

记住输入和输出

1717640384000
'4ef8eeb14aa14c728c4ddd25012169e9'

扣代码

下面就是扣代码了。扣代码这一块还是比较麻烦的,我几乎干了整整一天,当然我也是新手,刚开始弄,可能花时间比较多。还是先来分析一下代码结构,不然很难扣下去

  1. 先把所有代码复制一下,进行解混淆操作

猿人学官方解混淆地址
模式一般我这么用在这里插入图片描述

在这里插入图片描述

结构如上图

  • 大数组:存放字符,里面的字符作为取值用的键用来混淆操作

搜索加密函数_0x132a93发现在自执行函数里面
在这里插入图片描述
我试过直接把这个函数复制出来,但是他会用到很多自执行函数里面的属性方法等,都扣出来就好烦,不知道能不能在这里面搞个接口出来,我这次也试一下吧, window["encode"] = _0x132a93;运行试试看

下面的内容是按照这种做法来的,实验成功了,可以通过window存下这个函数
还有另一种做法也是我最开始的做法,下面我没写出,可以自行尝试,就是把两个自执行函数内部的内容直接拉到全局变量中,下面有一个简单示例,这样可以直接调用加密函数,否则会出现找不到函数的情况。

(function f() {
    var a = "这里是自执行函数内部";
    
    function insideFunction() {
        return "这是内部方法";
    }
})();

// 直接改成

var a = "这里是自执行函数内部";
function insideFunction() {
    return "这是内部方法";
}

var window = global; // 先定义一个全局变量用来放函数
// ...
console.log(window["encode"](1717640384000));

运行发现会被一直卡住,这说明哪里被检测了,大概率是格式化检测,防止调试的,只需要对代码进行压缩。但是压缩之前,需要按照标准格式,需要添加的地方必须要有

菜鸟JS压缩工具

在这里插入图片描述
压缩之后就可以运行了,提示要补环境

navigator is not defined
var navigator = {};

补充放开头
在这里插入图片描述
新的报错,大概意思是在给setInterval提供的函数参数是不可执行的,既然是setInterval里面,估计不是什么好东西,加密不可能需要定时加密,一定是干扰手段。在最开始就把setInterval置空掉。

var setInterval=function(){return 0;};

在这里插入图片描述
再次运行提示补环境

ReferenceError: document is not defined
ReferenceError: location is not defined

var document  = {};
var location = {};

再次运行提示TypeError: location[($dbsm_0x4847(...) + $dbsm_0x4847(...))] is not a function 这说明用到了location里面的一个函数。在原来网站查看发现是刷新页面的函数,这里不需要直接删掉了。

location[$dbsm_0x4847('\x30\x78\x33\x36\x64','\x2a\x4c\x75\x7a')+$dbsm_0x4847('\x30\x78\x31\x38','\x6a\x35\x4b\x51')]()整句删除

在这里插入图片描述
再次运行又出现报错
在这里插入图片描述
这个报错是在console.log中的,很有可能是对输出函数做了手脚,防止我们输出查看。 解决办法是先备份,然后最后打印也使用备份

var log=console.log;
// ...
log(window["encode"](1717640384000));

再次执行,成果输出加密数据
在这里插入图片描述
而且跟之前记录的数据一样在这里插入图片描述
在这里插入图片描述

下面构建完整SDK

function getMSdk() {
    let timestamp = Date.now();
    timestamp = Math.floor(timestamp / 1000) * 1000;
    encodeString = window['encode'](timestamp);
    return encodeString + '|' + timestamp;
};

然后再次压缩代码,注意不要格式化。

var log=console.log;var location={};var document={};var setInterval=function(){return 0};var navigator={};var window=global;
// ...
function getMSdk(){let timestamp=Date.now();timestamp=Math.floor(timestamp/1000)*1000;encodeString=window['encode'](timestamp);return encodeString+'|'+timestamp}

代码太长,完整的放不上来,上面过程写的很清楚。

下面构建Python代码

如果要用的话cookie的信息改成自己的

import execjs
import requests

headers = {
    "authority": "match.yuanrenxue.cn",
    "accept": "application/json, text/javascript, */*; q=0.01",
    "accept-language": "zh-CN,zh;q=0.9",
    "referer": "https://match.yuanrenxue.cn/match/2",
    "sec-ch-ua": "\"Chromium\";v=\"122\", \"Not(A:Brand\";v=\"24\", \"Google Chrome\";v=\"122\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"Windows\"",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin",
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36",
    "x-requested-with": "XMLHttpRequest"
}

ret  =0

for pageIndex in range(1, 6):
    js_code = open("match2Sdk.js", mode='r', encoding='utf-8').read()
    js_compile = execjs.compile(js_code)
    m = js_compile.call('getMSdk')

    cookies = {
        "sessionid": "zwy0uz1vd0ge1e42310i34b37584m1lj",
        "Hm_lvt_c99546cf032aaa5a679230de9a95c7db": "1717578931,1717603706",
        "no-alert3": "true",
        "Hm_lvt_9bcbda9cbf86757998a2339a0437208e": "1717578942,1717639423",
        "Hm_lpvt_9bcbda9cbf86757998a2339a0437208e": "1717639423",
        "m": m,
        "Hm_lpvt_c99546cf032aaa5a679230de9a95c7db": "1717645785"
    }
    url = "https://match.yuanrenxue.cn/api/match/2"
    params = {
        "page": pageIndex
    }
    response = requests.get(url, headers=headers, cookies=cookies, params=params)

    print(response.json())
    data = response.json()["data"]
    for item in data:
        ret += item['value']

print(ret)

在这里插入图片描述

在这里插入图片描述

  • 28
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

D0ublecl1ck

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值