1.使用关键字查找请求是否存在
2.使用postman请求,并尝试修改/删除参数
3.发现body体中的请求信息修改会出现,"sign验证失败: 参数签名错误"
4.header中的x-sign参数去掉会出现"sign验证失败: 缺少sign",初步判断此参数使用body体进行加密,尝试破解
5.查看堆栈信息,我的习惯是查看最近的一个request
6.打好断点,翻页查看进入断点时内存信息,发现请求参数都在config里,但headers中并未发现x_sign,判断x_sign此时并未生成,继续执行跟断点
7.经过N多无用代码后,终于发现 addSignToRequestConfig(config, { clientId }) 这行执行后,config中headers出现X_Sign
8.进入方法内部跟进,确认x_sign生成关键方法,由getParamsHash方法使用axiosRequestConfig先生成一段加密参数,再使用makeJwt生成x_sign
9.查看getParamsHash方法,该方法使用 uri + queryString + body 拼接后进行md5加密
10.使用md5工具进行测试,确认加密后与网站生成一致,现在第一个加密参数已经解决
11.查看makeJwt方法,传入参数为第一个加密和undefined,使用jwtLib.jws.JWS.sign方法传入四个进行加密
12.copy整个加密文件
13.使用网站生成好的参数进行测试
14.生成参数与网站一致
15.补充环境,改写一些固定参数的方法,至此js部分x_sign参数破解完成
16.python代码