前程无忧sign字段js逆向
网页地址:网址
逆向时间:20241123
请求接口:
进入网址,打开开发者模式 ,清空网络 点击分页
观察状态,确定请求接口
点击启动器中对应的js代码位置
断点伺候
在页面中点击任意一个分页
浏览器停止在刚刚的断点处,查看右面面板的调用堆栈中的promisie.then 中的u.request,并点击
跳转到对应代码,继续断点伺候
此时,我们已经打了两个断点了,可以将刚刚那个取消掉,位置在右侧的上方断点里了
继续执行,将页面刷新完,再点击页面中任意一个分页,进入断点,可以观察到d对象有6个值,其中四个值是函数
我们先点击第一个函数进去看看,有没有sign加密的代码,没有的话就找第二个,点击右侧的黄色箭头指向第一个函数
观察发现,还真有,那就是他了,继续断点伺候,并且把刚刚的断点可以取消掉了
然后,再继续执行直到刷新完成,再点击任意分页
可以看的到,加密方式是hmacsha256算法,该算法有两个参数,把这些东西放在控制台看看是什么样子
我这里分别把整个方法,以及对应的参数放进去了:
然后我们用node模拟这个加密算法,看看生成的结果是否与该请求的sign对的上
const CryptoJS = require('crypto-js');
lll = "abfc8f9dcf8c3f3d8aa294ac5f2cf2cc7767e5592590f39c3f503271dd68562b"
aaa = "/api/job/search-pc?api_key=51job×tamp=1732331153&keyword=python&searchType=2&function=&industry=&jobArea=000000&jobArea2=&landmark=&metro=&salary=&workYear=°ree=&companyType=&companySize=&jobType=&issueDate=&sortType=0&pageNum=1&requestId=0b4e02ee4c2f636ae13953dc21437c66&pageSize=20&source=1&accountId=211916692&pageCode=sou%7Csou%7Csoulb"
const hmac = CryptoJS.HmacSHA256(aaa, lll);
// 将结果转换为十六进制字符串
const hmacHex = hmac.toString(CryptoJS.enc.Hex);
console.log('HMAC-SHA256 加密后的数据:', hmacHex);
注意这里需要安装crypto-js包,可以问gpt,这里就不多说了
控制台执行输出结果
同时查看请求头中的sign是否对的上
验证过后是一样的
我的其他疑问:
- 请求地址中有个时间戳字段,我咋保证时间戳是相同的呢
- 如果加密算法中的key一直在变,应该怎么办呢?
- 如何发现以及确准请求中加密的其他字段呢?