站点图标 Wankko Ree's Blog

记一次没见过的变量(数组)编解码方式

起因

还是昨天那篇记一次微信PC端小程序的逆向里的小程序,刚写的脚本还没跑热乎,开发的就火速把事先明文传答案的bug给修了。

但是重新打开小程序发现并没有收到更新,于是推测答案应该是开发者大意了没有删,所以小程序现行的答案判断机制不是根据明文答案来的,于是就想起来了昨天注意到但是因为没用上就没深究的一个参数,is_answer,格式感觉是套了base的加密。

于是先是快速定位到了如下函数。

飞到h对象发现如下定义,有个初始盐值/密码的操作。

再往上飞到_hashid的定义,发现是webpack打包之后的引用。

于是直接去vendor.js找第50段。

一看全是英文的报错定义,判断大概率是某个公开的加密库,找个特征字符串,直接谷歌一发。

得到一个名为hashids的加密库,听说是YouTube的。然后一找发现python上就有现成的实现库,冲就完事了。

完事

最后瞎写一波关键代码:

import hashids
h = hashids.Hashids(salt="leadfyy!gogogo")
for o in q['options']:
    if h.decode(o['is_answer'])[2] == 1:
        answer_idsList.append(q['id'])
        break

The End
退出移动版