等等,AI 早已渗透到程序员工作的每一个环节。习惯了 AI 辅助提效的我们,早已离不开这种事半功倍的工作模式:繁琐的重复代码一键生成,难解的报错快速定位,复杂的逻辑思路瞬间梳理,极大节省了时间精力,提升了开发效率。
一旦遇上模型宕机的时刻,很多程序员都会瞬间陷入手足无措的境地,写代码没思路、排错没头绪、进度直接停滞,忍不住叫苦不迭:
)
```
 {
var org = window.XMLHttpRequest.prototype.setRequestHeader;
window.XMLHttpRequest.prototype.setRequestHeader = function (key, value) {
if (key == 'Authorization') {
debugger;
}
return org.apply(this, arguments);
};
})();
```
控制台输入脚本,回车,然后点击登录,即会断住:
 : ""
```
很明显,快找到真正的算法位置了,继续跟到 `window.sign.getSign` 中瞅瞅,果然,找到了完整的算法生成逻辑:
```JavaScript
getSign: function(url, param, cookie) {
var rs = "";
var _this = this;
var api = _this.replaceHost(url);
var hashParam = _this.hashParam(param, url);
var cid = _this.getCookie("mars_cid") ? _this.getCookie("mars_cid") : "";
var sid = _this.getCookie("mars_sid") ? _this.getCookie("mars_sid") : "";
var secret = _this.getSecret(param);
rs = this.sha1(api + hashParam + sid + cid + secret);
rs = "OAuth api_sign=" + rs;
return rs
},
```
这里下断分析下就知道具体逻辑了,未混淆,并且是标准算法,没啥难度,几个环境参数相关联。需要注意的是 hashParam 参数的入参 param,可以下个日志断点观察下,传的不对,是无法通过验证的。
`mars_cid`、`mars_sid` 也参与了 Authorization 的生成,正好 cookies 中这俩参数也是必须的,顺手分析下。直接 ctrl + shift + f 全局搜索下,定位到 mars.js 文件中,生成位置分别如下,python 复现即可:
```JavaScript
o = h.mars_sid || Mar.Random.rand()
m = Mar.Util.encryptCid(Mar.Util.pad((new Date).getTime(), 13) + "_" + Mar.Random.rand())
```
最后来找下 `pc_edata` 的生成位置,由于相关 js 文件都未经过混淆处理,所以直接全局搜索关键字,多半就能定位到大概的位置。如下图所示,此时,`pc_edata` 的值已经生成了:
;
```
跟进去,跳转到的,就是真正的加密算法,标准的 AES 加密:
。
 // JavaScript
// iv = b"1234567890123456" // Python
```
经过对比测试,验证了 AI 的算法,生成的值与网页端一致:
。这样,能保证传参坐标准确无误,如果验证失败,肯定就是算法存在问题,减少干扰项:
:
> 图片接口为 https:
经过漫长的思考(几十分钟),自我、人工纠正之后,能正确识别本地图片中的文字内容:
的产出,任重道远。
,同样都会分享到知识星球中。
## 结果验证
![NbJrQV.png](https: