MathDF网页工具的接口爬取和逆向工程
引言 2024年10月18日,刚步入大一的我正被一道求极限的题所烦恼,百般思索之下,我想到了多年前曾使用过的一个很全面的网页工具 MathDF。我打开网页,输入了困扰了我许久的题目,不一会,网页中就弹出了分步骤的详细解法。 诶?这是个好东西啊,正好最近在做群聊机器人项目,如果能够部署到机器人上,或者结合提示词工程来与大语言模型联动使用,效果应该很惊艳吧! 说干就干! Anti-F12? 爬取后端接口的想法一出来,我就按下F12来打开了浏览器的调试工具,但我却发现,网页上方多出了一栏 已在调试程序中暂停,而右侧的开发工具则始终卡在 源 标签页上,即使我尝试继续运行代码,也始终无法跳出这个标签页。 我暂时放弃了这个想法,为了快速开发,我首先查看了 Microsoft Math Solver 页面和它是否有开放接口,又查看了市面上类似 MathDF 的网页工具,却始终不如 MathDF 做得优秀。我又在 GitHub 上搜索了 MathDF API 的相关项目,却仍然一无所获。 最后,我还是选择了继续尝试逆向 MathDF,却意外在开发工具中点击了 停用断点 按钮,没想到竟然就此解决了这个困扰我许久的问题。 监听网络 打开 网络 标签页,先清除掉无用的其他请求,点击 Fetch/XHR 标签,然后点击 监听 按钮,此时,所有请求都会被记录下来。 回到网页中,我随便输入了一道示例题目,点击 = 按钮,此时页面已经显示出了解法的详细步骤,而右侧的开发工具中也显示出了一个可疑的网络请求:calculate.php,点开它可以看到一些详细的请求内容。 点击 负载 标签,可以查看到请求数据: p: SkZWTkgQG1...hVAVAFVRJK f: false 这里的 p 参数显然已经过加密,而 f 参数是一个布尔值,暂时不知道它的具体作用。 解密参数 我首先尝试了使用 Base64 解密,但解密结果让人两眼一黑: JFVNHXAEL……UUPUJ 我又尝试了比较常用的各种算法,但均无法解密出可读的内容。 这可咋办? 正当我一筹莫展之际,我突然想到了一个最基本的方法:查询这段密文的实际来源。在上面的网络监听中,位于 calculate.php 请求之前的其他请求,貌似与 p 参数无关。这可以证明,该参数的加密位置是在前端实现的,只要找到前端中的请求函数,并从中逆推到 p 参数所在的变量和加密规则,即可得到 p 参数的具体解释了。 点击 发起程序 标签,可以定位到发送网络请求的具体 JavaScript 代码段:...