pdd-recruitment-anticontent-reverse
想要批量获取拼多多社招岗位做行业薪酬分析、人才画像搭建这类技术调研?先过眼前这道动态关卡——瑞数动态安全防护下的核心反爬参数:anti-content。
这篇文章会以拼多多社招的真实场景为锚点,带你梳理从环境检测到核心函数 Hook 的完整逆向流程,最后给出一个可复用的 Python + Node.js(execjs) 实现方案。
前置准备:熟悉 Chrome DevTools 的基本操作,了解 JavaScript 逆向的常用手法,知道
execjs是怎么在 Python 里调用 JavaScript 代码的。
1. 概述
1.1 场景与核心参数
拼多多社招平台(https://careers.pddglobalhr.com/jobs)的接口数据,必须携带 anti-content 才能正常返回。这个参数由混淆后的 JavaScript 动态生成,每次刷新前端代码可能会产生细微的混淆变化,但核心的加密框架是稳定的。
1.2 这次要啃的“硬骨头”
跟静态加密(比如 MD5+盐、AES)相比,瑞数这款动态安全防护产品有几个让人头疼的地方:
- 动态混淆,静态分析容易缺依赖:抠下来的 JS 代码经常“缺东少西”,因为它依赖瑞数自动注入的 Webpack 模块或者某些全局变量,不补全会直接报错。
- 严格的环境指纹检测:会仔细检查
navigator.webdriver、window.chrome、浏览器插件列表等,判断你是不是在用自动化工具伪造环境。 - 反重放与链路绑定:请求里携带的 Cookie、Referer、User-Agent 必须保持一致性,参数里还会嵌入时间戳,防止旧请求被复用。
- 动态构造器调用:加密函数不是暴露在顶层的静态
md5(),而是通过混淆生成的类似window.hhh(4)这样的动态构造器。
2. 网页逆向分析思路
2.1 定位目标接口
按 F12 打开 DevTools,切换到 Network 面板,刷新页面或点击“下一页”筛选条件。很快就能看到返回岗位列表的接口:
点击这条请求,查看 Payload,就会发现 anti-content 就是我们这次要逆向的核心参数。
2.2 定位参数生成位置
瑞数的参数一般不会直接写在某个静态 JS 文件里,通常藏在动态注入的代码中。两种常用定位方法:
方法一:全局搜索关键词
在 DevTools 的 Sources 面板,按 Ctrl+Shift+F(Windows)或 Cmd+Option+F(Mac)打开全局搜索,输入以下关键词之一:
anti-contentantiContentgetAntihhh(后续你会发现这是核心构造器的名字)
一般很快就能定位到构造器调用的地方。
方法二:XHR/Fetch 断点
在 Network 面板中,右键点击目标接口,选择“XHR/fetch Breakpoints”添加断点,然后刷新页面。请求发出时会自动断在发送代码的地方——沿着调用栈往上回溯,就能找到生成 anti-content 的函数。
3. 核心加密逻辑简化解析
通过调试和 Hook,我们把核心逻辑拆分成三步:
3.1 第一步:补全合法浏览器环境
瑞数在加密前会检测大量环境变量。如果这些特征不补全,即便生成出的 anti-content 格式正确,后端校验也会失败。下面这些是必须要补的关键变量:
3.2 第二步:调用动态构造器
瑞数会通过一段自执行的混淆代码,往 window 上注入类似 hhh 的构造函数。这个构造函数的名字可能会变,但调用方式和参数含义是固定的。比如数字 4 就代表“岗位列表接口的 anti-content 加密”。
3.3 第三步:序列化输出
messagePack() 方法会把加密后的二进制数据编码成类似 Base64 的字符串(不是标准 Base64,有自定义的字符映射),这个字符串就是我们最终要的 anti-content。
4. 可复用的 Python 实现方案
我们可以用 Python 的 execjs 库来执行补好环境的 JavaScript 文件,生成 anti-content,然后用 requests 发请求。
4.1 补好环境的 JS 文件(demo.js)
⚠️ 注意:下面的代码只给出了环境补全的框架。真实的
window.hhh需要你从瑞数的混淆代码中完整抠出并补全它依赖的所有模块,不能只复制粘贴这个框架。
4.2 Python 调用代码
5. 注意事项与总结
5.1 注意事项
- 控制请求频率:拼多多的风控会检测请求频率,频率过高容易导致 IP 或 Cookie 被封。
- Cookie 需要定期更新:Cookie 里的
_nano_fp、api_uid等字段会过期,失效后需要重新从浏览器拿一份。 - 瑞数代码会动态更新:混淆后的变量名(比如
window.hhh)和内部逻辑可能不定期变化,你得定期调试跟进。 - 仅供技术学习使用:批量抓取可能违反拼多多的服务条款,请务必注意合法合规使用。
5.2 核心知识点回顾
希望本文能帮你顺利迈过瑞数动态防护的门槛。如果你在复现过程中遇到问题,欢迎在评论区一起交流讨论。

