JS逆向解密教程5:某吧sign参数逆向分析与本地验证

JS逆向解密教程5:某吧sign参数逆向分析与本地验证

有段时间没有更新文章了,之前写好的某吧发帖脚本突然全部失效。排查后发现,某吧进行了一次大更新,接口新增了一个 sign 参数。这章我们就针对 sign 这个参数进行某吧 sign 参数逆向分析,彻底解决脚本调用问题。

本文目录

  1. 抓包定位 sign 参数
  2. 搜索定位 sign 生成位置
  3. 断点调试锁定生成函数
  4. 控制台验证生成逻辑
  5. 代码扣取与依赖补全
  6. 本地运行验证
  7. 常见问题与解决方案

一、抓包定位 sign 参数

首先需要确定分析的切入点。按 F12 打开谷歌浏览器抓包工具,随便打开一个某吧点一下“最新”选项卡,可以发现抓包工具抓到了一个 /c/f/frs/page_pc 的 POST 请求包,请求主体包含 sign 参数。

请求方式:POST
请求地址:https://tieba.baidu.com/c/f/frs/page_pc

{
    "kw": "bilibili",
    "pn": "1",
    "is_good": "0",
    "cid": "",
    "sort_type": "0",
    "is_newfrs": "1",
    "is_newfeed": "1",
    "rn": "30",
    "rn_need": "10",
    "tbs": "f3a8f22bc1cc74f71776578469",
    "subapp_type": "pc",
    "_client_type": "20",
    "sign": "cffbccb8badb00467d9a0e73c509844b"
}
某吧 sign 参数逆向抓包定位sign参数
图1:抓包定位 sign 参数

二、搜索定位 sign 生成位置

找到目标参数后,下一步就是定位它的生成逻辑。通过浏览器搜索 sign: 关键词,看 sign 参数是在哪里赋值的。发现有很多 JS 文件都包含 sign 参数。

全局搜索sign关键词
图2:全局搜索 sign 关键词

这里有个实用的筛选技巧:像 sign: 'xxxxx'assign: 这种写死的就不用关注了。我们只关注 sign: xxx()sign: e 这种类型,这些都是在调用函数或者是使用变量动态赋值的,也是我们寻找某吧 sign 加密算法入口的关键特征。

三、断点调试锁定生成函数

我们先给 sign: xxx() 这样类型的全部打上断点,然后再点一下贴吧的“精华”选项卡,就看到断点成功断下来了。断下来的位置在:

sign: A(n, '', '')

分析代码结构可以看出,sign 参数的值就是由 A 函数生成的了。在 sign: A(n, '', '') 处设置断点,准备深入分析其内部逻辑。

断点定位到A函数
图3:断点定位到 A 函数

四、控制台验证生成逻辑

为了确认判断无误,复制 A(n, '', '') 这段代码在控制台运行一下来确认。经过运行,确实是由 A 函数生成的,其中 A 函数里面的 n 传递的是组装好的 URL 请求参数。生成的 sign 的值和抓包到的 sign 长度是一致的,由此完成了贴吧 sign 参数解密的初步验证。

控制台验证A函数
图4:控制台验证 A 函数

五、代码扣取与依赖补全

直接跟进函数 A 里面开始扣代码。把 A 函数扣下来在本地调用运行,发现缺少 h 函数,还依赖了其他函数。

某吧 sign 参数逆向本地运行A函数
图5:本地运行A函数

解决这个问题的方法很简单:从 A 函数所在的位置往上追溯,找到最顶层的 s 函数,把 A 函数往上到 s 函数全部复制下来,确保所有依赖的函数都完整不缺失。

扣取代码到代码编辑器
图6:扣取代码到代码编辑器

六、本地运行验证

再进行运行,发现生成的 sign 值和浏览器生成的值一致,说明没有问题。最后看了一下代码,这是一个标准的 MD5 算法。

本地运行验证结果对比
图7:本地 Node.js 运行验证结果

七、常见问题与解决方案

  • Q1:断点没有断下来是什么原因?
    • 原因分析:可能是断点打在了错误的位置,或者页面加载时还没有绑定事件。
    • 解决方案:刷新页面后重新触发操作(点击”最新”或”精华”选项卡),确保断点在代码执行时被命中。
  • Q2:扣下来的代码本地运行报错 “h is not defined”?
    • 原因分析A 函数依赖了同模块内的其他函数,单扣 A 函数会缺失依赖。
    • 解决方案:从 A 函数往上追溯,把整段包含依赖函数的代码块全部复制下来。
  • Q3:生成的 sign 值和抓包不一致怎么办?
    • 原因分析:传入 A 函数的参数 n 与抓包时的请求参数不完全一致。
    • 解决方案:在断点处仔细查看 n 的具体值,确保本地传入的参数字符串与之一模一样。参数拼接顺序通常按 ASCII 码升序排列。

总结
通过本次某吧 sign 参数逆向分析,我们定位到了加密入口并成功在本地复现。该算法本质是标准 MD5 哈希,逆向难度不高。配合之前逆向的 Acs-Token 等参数,某吧的请求模拟已可正常进行。

相关搜索:某吧逆向全集 · JS逆向教程

本文由林石工作室提供技术支持,转载请注明出处。

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注