热度星选小程序sign签名逆向

3,941次阅读
没有评论

最近有需求要采集热度星选小程序的数据,就抓包看了下接口,发现有个sign签名参数,sign大概率是小程序前端js生成的,就准备逆向搞一下。

一、获取小程序wxapkg文件

  1. 首先通过abd连接手机,进入adb shell;
  2. 进入微信的小程序目录,我这里路径是: /data/data/com.tencent.mm/MicroMsg/6ff23bxxxbcf62faxxxd2077cdxxx7f9/appbrand/pkg,每个人路径不一样,可以按我的路径找一下;
  3. 删除所有wxpkg文件,然后在手机上重新打开热度小程序;
  4. 导出新出现的wxpkg文件,我这里热度的文件是:_284004603_153.wxapkg(可以用adb pull导出到电脑上,没有权限的话可以在手机上搞个临时目录);

二、小程序反编译

小程序反编译可以用wxappUnpacker工具,不过我这里反编译的时候一直报错,后面用了另一位大佬的反编译工具unveilr(https://github.com/r3x5ur/unveilr)。

具体unveilr的安装使用可以看下大佬的github,上面有教程。

三、Sign签名逆向

通过unveilr反编译后,会生成小程序的项目文件,使用微信开发者工具打开该项目。

然后直接先通过搜索“md5”找一下代码,运气很好,直接就找到了。

热度星选小程序sign签名逆向

这里调用了o.sign函数,入参是h,然后字母都大写了一下(以我的经验猜测,这里大概率sign就是一个字典排序,然后拼接成字符串md5一下)。那我们这里只要扣一下e、sign两个函数就好。

热度星选小程序sign签名逆向
热度星选小程序sign签名逆向

很明显就是拼接成字符串,然后md5了一下。这里扣下js代码跑一下测试。

热度星选小程序sign签名逆向

很明显,拼接后的字符串md5后结果和抓包结果一致。

四、改写成Python代码

这一步很简单,我直接放代码吧。

import hashlib


def get_sign(data: dict):
    data_sorted = [k + '=' + data[k] for k in sorted(data)]
    data_sorted.append('secret=EC7259DFCAD1715C23D400B7A88407A3')

    sign_text = '&'.join(data_sorted)
    print(sign_text)

    md5 = hashlib.md5()
    md5.update(sign_text.encode(encoding='utf-8'))
    sign = md5.hexdigest().upper()
    return sign

正文完
 0
评论(没有评论)