记一次什亭之匣工具箱api解密过程 - Shiina's Blog

记一次什亭之匣工具箱api解密过程

2023 年 12 月 8 日 - 01:16:14 发布
1.5K 字 6分钟
本作品采用 CC BY-NC-SA 4.0 进行许可。
本文距离首次发布已经过去了 112 天,请注意文章的时效性!

记一次什亭之匣工具箱api解密过程

前言

这两天考完试了,刚好有一周的空闲时间,刚好有朋友在尝试做tx官方机器人,于是个人打算贡献一下总力战一档线查分的功能

于是就想着去借用一下什亭之匣工具箱的 api,结果发现请求返回内容是加密的,于是这一下子就激起了个人兴趣

虽然到最后只是能借助wasm源文件进行解密,核心细节并不是很清楚,但是基本使用应该是没问题了

相关资源会放到GitHub仓库中供大家参考

基本 api 查询与解密文件处理

这里是将要解析的页面

打开开发者工具,可以注意到xhr下除了 api 还有一个 yuyuko_crypto 的 wasm 文件,这也就意味着需要通过这玩意去解密响应内容

由于不知道wasm是在哪一步进行的初始化,因此开始在源码中找 wasm 相关 api,运气很好,很快就找到了

在打包文件中有 vite 字眼,可以确定脚手架是 vite,vite 通过 rollup 打包时函数顺序是不会被打乱的,所以可以把就近的函数统统进行 wasm 解析归类

很有意思的一点是网站在 wasm 初始化完成后才会进行 vue app 渲染,源码如下图:

这里的 mount 方法暴露了他是页面 app 实例,后面经过分析,na 是 vue router,Fu() 创建了 pinia 实例

在 wasm 相关函数中发现了大量 wbindgen 字眼,放百度搜索后发现是 wasm-bindgen,是一个 rust 实现的 wasm 相关工具(锈p真的是)

下载 yuyuko wasm 文件,使用 wasm2c 进行反编译成为 c语言文件后,发现本身内容似乎也被加密了,由于本人还没有试过用 wasm-bindgen 生成 wasm,不清楚加密是包本身的功能还是其他方式实现,不过这不影响我们继续看

直接跳转到文件尾部:

可以发现导出的相关函数,本人猜测其需要胶水文件进行配合使用,但是不清楚这个包的胶水文件是否会随着 rust 内部方法的而发生变化,于是决定回到页面原 js 进行处理

经过个人大量的尝试,最终通过修改源码得到了一份最小化的胶水文件?

虽然不知道每一处的作用是什么,但是现在解密是可以用了

仓库链接如下:https://github.com/QingXia-Ela/arona-api-decrypt

其中 html 文件夹下存放着最小可执行的js页面,c 文件夹存放着反编译的 c 语言文件

html 执行效果如下,可以看到解析结果:

如上,所有简单实现已经基本完成,以后可能会复盘并确认 wasm 到底写的是个啥,用的啥加密方法(虽然不太可能力)

个人信息
avatar
Shiinafan
文章
37
标签
52
归档
4
导航