起因
还是昨天那篇记一次微信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