1. 项目概述:从登录页面到数据抓取
做数据采集或者自动化测试的朋友,对登录这个环节肯定不陌生。很多时候,我们需要的目标数据就在登录后的页面里,一个简单的 requests.post 加上用户名密码就能搞定。但现实往往更骨感,尤其是面对像有赞这样体量的电商SaaS平台,它的登录流程早已不是简单的表单提交。最近在做一个商家数据分析工具时,就碰到了有赞登录这块硬骨头,它不仅有常规的密码加密,还加入了图片验证码和一系列复杂的请求参数校验,纯靠模拟请求已经行不通了,必须深入到前端JavaScript的世界里,看看数据到底是怎么被“加工”然后发送出去的。这个过程,就是我们常说的“JS逆向”。
简单来说,JS逆向就是通过分析网页加载的JavaScript代码,理解其核心的加密、混淆或参数生成逻辑,然后用编程语言(比如Python)重新实现这套逻辑,从而让我们的程序能够模拟浏览器,成功发出被后端认可的请求。这次的目标很明确:逆向分析有赞登录页面的密码加密过程,以及图片验证码的获取与校验机制,最终用Python脚本实现一个可以稳定登录有赞的自动化方案。这不仅是为了拿到数据,更是理解现代Web应用安全防护的一个典型实战案例。
2. 核心思路与前期侦查
动手之前,盲目地扎进代码里是最低效的做法。我的习惯是先扮演一个“普通用户”,用浏览器的开发者工具,把整个登录流程像用放大镜一样仔细过一遍,搞清楚数据从哪里来,到哪里去,中间经过了哪些变形。
2.1 登录流程人工走查
首先打开有赞的登录页面(通常是 login.youzan.com 这类域名),在输入框里随意输入账号密码(不必用真实账号),并故意触发验证码。打开浏览器开发者工具的“网络”(Network)面板,记得勾选“保留日志”(Preserve log),然后点击登录按钮。
这时,网络面板里会刷出一系列请求。我们的目标是找到那个最终提交登录信息的POST请求。通过观察请求的URL(通常包含 login 字样)、请求方法(POST)和载荷(Payload)格式,可以快速定位到关键接口。在我分析的这个版本中,核心的登录接口路径类似于 /api/account/login 。
点击这个请求,查看它的“标头”(Headers)和“负载”(Payload)。你会发现,提交的数据远不止用户名和密码那么简单。通常包含以下几个关键部分:
- account :明文或简单编码后的账号(如手机号或邮箱)。
- password :一长串毫无规律的密文,这就是JS加密后的结果,也是我们逆向的核心目标。
- captcha :图片验证码的答案,用户输入的内容。
- captcha_id 或 token :一个标识本次验证码会话的ID,在获取验证码图片时由服务器返回。
- 其他参数:如 country_code (国际区号)、 platform (平台标识)、 auto_login (是否自动登录)等,这些通常可以直接复制或按规则构造。
2.2 加密定位与初步分析
密码密文是突破口。在登录请求的负载中,找到 password 字段,其值可能像 a1b2c3d4… 这样的十六进制字符串,或者是一串Base64编码的字符。我们的任务就是找到生成这串字符的JavaScript代码。
这里有两个最常用的方法:
一旦断点生效,程序暂停在某个函数内,你就成功了一半。接下来的工作,就是顺着这个函数的逻辑,一步步回溯,找到最终执行加密操作的代码段。
注意 :现代网站普遍使用Webpack等模块化打包工具,代码会被分割成许多“块”(chunk)。你定位到的函数可能在一个很长



