《jiafangcai》js逆向x_sign参数破解

本文详细记录了一位开发者在使用POSTMAN调试过程中,逐步破解网站X-Sign签名验证的过程,涉及MD5加密、JWT签名生成及参数加密策略,最终成功模拟真实请求。

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代码

 

### 抖音 JS 逆向工程与 x_bogus 参数解析 #### 栈结构及其操作 在抖音的 JavaScript 代码中,`v` 被定义为一个栈结构 (stack),用于保存执行过程中产生的临时值。栈指针 `p` 记录当前栈顶的位置。通过 `v[++p] = xxx` 执行压栈操作,而 `v[p--]` 则表示出栈操作[^1]。 #### 算术运算实现 对于算术运算而言,可以直接利用栈内相邻两个元素完成基本计算: - **加法**: `v[p] = v[p] + v[p-1]` - **乘法**: `v[p] = v[p] * v[p-1]` - **除法**: `v[p] = v[p] / v[p-1]` 这些运算是通过对栈顶元素与其前一位置上的元素进行相应操作来实现的。 #### 关于 u 的处理方式 有开发者提到,在尝试获取返回对象中的 `_u` 属性时遇到了困难,特别是当涉及到难以提取的具体变量如 `r[2]` 。因此选择了更简便的方法——直接导出了名为 `u` 的变量作为替代方案[^2]。 ```javascript // 示例:模拟简单的栈操作 let stack = []; let pointer = -1; function push(value) { stack[++pointer] = value; } function pop() { if(pointer >= 0){ return stack[pointer--]; } } ``` #### 对 x_bogus 参数的理解 针对 `x_bogus` 这样的参数,通常是在请求头或 URL 中附加的一个签名字段,用来验证客户端发出的数据合法性。其具体算法可能涉及加密哈希函数、时间戳以及其他动态因素组合而成。由于这类机制往往是为了防止恶意抓包和伪造请求设计的,所以官方文档很少公开详细的生成逻辑。不过,社区里确实存在一些研究者分享过自己对该参数的研究成果,但需要注意的是,任何试图绕过安全措施的行为都应遵循法律法规并尊重平台规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值