吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1467|回复: 12
收起左侧

[Web逆向] 某站w_rid加密参数分析

  [复制链接]
buluo533 发表于 2025-5-23 21:49
本帖最后由 buluo533 于 2025-5-23 21:56 编辑

先放个网址:aHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL2Jhbmd1bWkvcGxheS9lcDE2MzM2NDM=  今天刚上线,就拿他来做
这个站难度不高,但是网上参考文章更新不多,我在刚开始学被难住了很久,现在做一个简单的分析
加密参数w_rid.png
加密参数w_rid
马赛克后接口.png
这个是评论区的接口,可以自行滑动或者直接搜索接口:aHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvdjIvcmVwbHkvd2JpL21haW4=
这里就不演示跟栈,直接搜索w_rid,给所有关键的地方下断点,一共是六个出现加密参数的地方
搜索w_rid.png
依次下断点
断点1.png
可以看出差别的
断点2.png
这里我们大概可以猜到加密的方式MD5(爬虫老鸟可能直接最开始看到长度就敏感了)
断点3.png
断电4.png
断点5.png
最后一个就直接pass了{:1_918:},然后我们重新刷新界面或者放开断点下拉看看情况,我们可以看到当接口走过 w_rid: at(v + a)后出现了我们的目标接口,同时返回值与接口的w_rid值一样
加密效果.png
然后对比一下接口的参数
对比加密参数.png
是一样的值,这样的话可以确定这里就是加密参数产生的地方

把加密代码直接拉过来分析

function lt(e) {
    var t, r, n = function (e) {
        var t;
        if (e.useAssignKey)
            return {
                imgKey: e.wbiImgKey,
                subKey: e.wbiSubKey
            };
        var r = (null === (t = function (e) {
            try {
                return localStorage.getItem(e)
            } catch (e) {
                return null
            }
        }(ct)) || void 0 === t ? void 0 : t.split("-")) || []
            , n = r[0]
            , o = r[1]
            , i = n ? ft(n) : e.wbiImgKey
            , a = o ? ft(o) : e.wbiSubKey;
        return {
            imgKey: i,
            subKey: a
        }
    }(arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {
        wbiImgKey: "",
        wbiSubKey: ""
    }), o = n.imgKey, i = n.subKey;
    if (o && i) {
        for (var a = (t = o + i,
            r = [],
            [46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49, 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40, 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11, 36, 20, 34, 44, 52].forEach((function (e) {
                    t.charAt(e) && r.push(t.charAt(e))
                }
            )),
            r.join("").slice(0, 32)), u = Math.round(Date.now() / 1e3), s = Object.assign({}, e, {
            wts: u
        }), c = Object.keys(s).sort(), l = [], f = /[!'()*]/g, d = 0; d < c.length; d++) {
            var p = c[d]
                , h = s[p];
            h && "string" == typeof h && (h = h.replace(f, "")),
            null != h && l.push("".concat(encodeURIComponent(p), "=").concat(encodeURIComponent(h)))
        }
        var v = l.join("&");
        return {
            w_rid: at(v + a),
            wts: u.toString()
        }
    }
    return null
}

可以看到w_rid是由at(v + a)生成的at函数我们有了一个猜测,然后对v+a加密后生成,调用at函数做一个简单测试
at函数测试.png at函数加密对比.png
测试可以看出来,at函数加密是标准的md5,只需要分析v和a函数的生成,可以查看作用域
作用域.png
a和v是在本地作用域,往上找a和v的生成位置,这是加密时v的值
v的值.png
传入参数e
传入参数.png
可以看出v是在传入参数e的前提下进行处理

// wts的生成位置
 u = Math.round(Date.now() / 1e3)
 wts: u

注意是的代码在处理过程中:变成了=,再利用&进行拼接处理
var v = l.join("&");

然后就是a的生成过程,代码片段如下,经过测试,o和i的值是固定的
// o = "7cd084941338484aae1ad9425b84077c" i ="4932caff0ff746eab6f01bf08b70ac45"

o = n.imgKey, i = n.subKey
for (var a = (t = o + i,
            r = [],
            [46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49, 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40, 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11, 36, 20, 34, 44, 52].forEach((function (e) {
                    t.charAt(e) && r.push(t.charAt(e))
                }
            )),r.join("").slice(0, 32))

这段代码的作用是从字符串t中按特定索引顺序提取有效字符,生成新的数组 r并取前32位,并将结果赋值给变量 a,t是由o+i生成的,利用python对这个进行还原
32位.png

o = "7cd084941338484aae1ad9425b84077c"
i = "4932caff0ff746eab6f01bf08b70ac45"
t = o + i 
indices = [
    46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35,
    27, 43, 5, 49, 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13,
    37, 48, 7, 16, 24, 55, 40, 61, 26, 17, 0, 1, 60, 51, 30, 4,
    22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11, 36, 20, 34, 44, 52
]

a = []
for e in indices:
    if e < len(t):
        a.append(t[e])
a = ''.join(a[:32])

然后我们就可以愉快的完成完整的w_rid逆向过程

免费评分

参与人数 4威望 +1 吾爱币 +23 热心值 +4 收起 理由
BrutusScipio + 1 + 1 谢谢@Thanks!
allspark + 1 + 1 用心讨论,共获提升!
surepj + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
涛之雨 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

pantaoaichili 发表于 2025-5-24 16:33
好&#128076;&#127995;&#128076;&#127995;&#128076;&#127995;&#128076;&#127995;&#128076;&#127995;&#128076;&#127995;&#128076;&#127995;&#128076;&#127995;&#128076;&#127995;&#128076;&#127995;&#128076;&#127995;学习了
 楼主| buluo533 发表于 2025-5-26 21:56
utf8 发表于 2025-5-26 11:33
你还可以深挖一下,有些接口是有风控参数和浏览器指纹算法哦。

收到,大佬,我试试看呢,这个主要是我之前想做这个,一直没找到新的文章,现在也算是学会了,所以干脆自己写一篇
surepj 发表于 2025-5-24 08:46
xixiaoshan77 发表于 2025-5-24 09:44
学习一下
schnappi2025 发表于 2025-5-24 14:30
学习了,感谢分享
ghx230011 发表于 2025-5-25 00:47
学习到了,谢谢分享!
bojie321 发表于 2025-5-25 06:04
谢谢分享,学习了。
BrutusScipio 发表于 2025-5-26 04:59
标准MD5,确实适合入门
utf8 发表于 2025-5-26 11:33
你还可以深挖一下,有些接口是有风控参数和浏览器指纹算法哦。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-6-19 00:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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