吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 14115|回复: 150
上一主题 下一主题
收起左侧

[Web逆向] 小程序泡泡玛特小程序解包

    [复制链接]
跳转到指定楼层
楼主
hybpjx 发表于 2024-5-16 17:13 回帖奖励

前言

最近看到泡泡玛特很火啊,于是就跟风研究一下。在逆向的时候发现很有意思啊,回到了过去小程序解包反编译的时候,于是心血来潮,写一篇文章来记录一下。

目标网站

image-20240516120551741

我们用pc版打开,它会提示如下:

image-20240516120632133

现在我们用手机加载小程序,小程序的路径在  /data/data/com.tencent.mm/MicroMsg/appbrand/pkg/general/

image-20240516120903711

接下来我们使用adb 的pull命令 把文件全部拉取过来

由于手机上的wxapkg的包是不需要进行解密的,所以我们可以直接用unveilr.exe 进行解包

image-20240516121122707

接下来我们手动把他复制到同一个文件夹中,之后我们就可以把他弄到微信开发者工具进行反编译了调试代码了。

image-20240516121318904

修复小程序

我这里已经导入过了,所以直接打开就可以,接下来进行一些简单的修复和补充,简单来说就是什么报错就把什么给删掉

像这种plugins下的我们可以全部删除就好,因为我们是没权限去调用他的插件应用的。

image-20240516121528673

修复完之后,发现出现很多关于渲染层网络的错误啊,这个我们没办法解决,因为我们不是开发者,没有具备配置request合法域名的权限。我们就只能碰运气,不停的去更换加载页面,哪怕是请求无法发出,因为他的参数是在本地生成的,只要碰到能生成的sign和x-sign的接口,我们就可以逆向了。

经过不懈的努力,我们找到了这个页面

image-20240516143615869

触发的条件就是搜索的接口

image-20240516143658802

参数分析

X-Sign

全局搜索只有一处,我们点进去,然后下好断点,重新搜索触发

image-20240516143837426

发现成功断住,接着我们来分析怎么生成的

r["X-Sign"] = "".concat((0,
                    u.default)("".concat(c, ",").concat(null === o || void 0 === o || null === (a = o.login) || void 0 === a ? void 0 : a.client_key)), ",").concat(c)

image-20240516144453657

由图上,我们知道的信息是可能是一个32的md5,应该是13位时间戳拼接一个client_key然后在md5,不知道哪里得到原因导致我们的client_key是undefined,所以我们只能找来源了

我这里不卖关子了,直接说明了,他不是本地生成的,他是调用的函数,返回的client_key,我们直接重新进入网络,在查尔斯或者其他抓包工具中去搜索client_key

image-20240516152218193

我这里的值4ejk2eqvpbwgxi3wj,每个人肯定是不同的,我们去验证一下我们的猜想是否正确

image-20240516152346562

完全正确,所以我们知道了,x-sign的算法就是 13位时间戳拼接,在拼接函数的client_key在拼接,拼接13位时间戳

代码格式写一下就是

def md5(enc_str):
    m = hashlib.md5()
    m.update(enc_str.encode("utf-8"))
    return m.hexdigest()
time_now = str(int(time.time()*1000))
x-sign = md5(time_now+","+"4ejk2eqvpbwgxi3wj")+","+time_now

sign

很明显sign加密就在下面,我们断点然后进去然后刷新

image-20240516153011642

点进去sign方法 映入眼帘的就是md5然后拼接,我们断点后逐步分析。
image-20240516153118487

其他的都能读懂,难点主要在buildQueryString的作用,我们点进去看一下

image-20240516154158259

其实也很直白,就是键值对大小写排序,然后把键值用=连接,各个键值对末尾拼接一个&

其实看下图也能明白他的作用

image-20240516154042663

所以我们就懂了,整体加密就是把请求的url中的参数经过buildQueryString之后,最后末尾在拼接一个&noceStr=boxonline 进行大写的md5即可,我们验证一下

image-20240516154650659

image-20240516155115910

转化一下代码就是

def process_event(e):

    # 过滤掉特定的键和空值或未定义的值
    filtered_keys = [t for t in e if e[t] is not None and str(e[t]) != "" and t not in ["session_id", "sign", "charset", "signType", "v"]]
    # 对键进行排序
    sorted_keys = sorted(filtered_keys)

    # 将键值对转换为字符串,如果是对象则JSON序列化
    def serialize_value(t):
        r = e[t]
        if isinstance(r, (dict, list)):  # 假设'object'对应于Python中的字典或列表
            return f"{t}={json.dumps(r,ensure_ascii=False,separators=(',', ':'))}"
        else:
            return f"{t}={r}"

    # 使用map将处理函数应用于排序后的键,然后使用join连接结果
    result = "&".join(map(serialize_value, sorted_keys))
    return result

data = {"ts":1715842921746}
sign =  md5(process_event(data)+"&noceStr=boxonline").upper()
print(sign)
data['sign'] = sign

结果也是没问题的,至此关于泡泡玛特的两个参数都分析完毕。

结尾

由于我没需求,就不写一些代码进行验证了,自己梳理一下,其实也是很简单的东西,整体过程并不是很难,重在耐心。

免费评分

参与人数 51威望 +2 吾爱币 +144 热心值 +47 收起 理由
笙若 + 1 + 1 谢谢@Thanks!
OndDemoAndNo1 + 1 + 1 用心讨论,共获提升!
T00404 + 1 + 1 我很赞同!
qqmfhj + 1 谢谢@Thanks!
sbi188 + 1 + 1 用心讨论,共获提升!
GISerliang + 1 + 1 谢谢@Thanks!
xiaobai1005 + 1 + 1 用心讨论,共获提升!
xiaogao66 + 1 热心回复!
_小白 + 1 + 1 我很赞同!
jackies + 1 + 1 热心回复!
yunhaiwuyu + 1 + 1 谢谢@Thanks!
qiaoyong + 1 + 1 热心回复!
canty胖胖 + 1 + 1 热心回复!
fengbolee + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
hlshdy + 1 + 1 谢谢@Thanks!
微默 + 1 + 1 用心讨论,共获提升!
z121531162 + 1 + 1 热心回复!
vergil0528 + 1 + 1 用心讨论,共获提升!
yaoyp2471 + 1 + 1 用心讨论,共获提升!
timeslover + 1 + 1 用心讨论,共获提升!
wqstudyy + 1 谢谢@Thanks!
Lsais + 1 谢谢@Thanks!
yyxqf + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
eijop252023 + 1 热心回复!
涛之雨 + 2 + 100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
jxhuangwei + 1 + 1 我很赞同!
dreamlist + 1 + 1 我很赞同!
qazwert + 1 + 1 谢谢@Thanks!
Asongbuemo + 1 + 1 我很赞同!
繁华l落尽 + 1 + 1 谢谢@Thanks!
抱歉、 + 1 用心讨论,共获提升!
yuweb + 1 + 1 我很赞同!
FANT456 + 1 + 1 热心回复!
Yasso2 + 1 + 1 用心讨论,共获提升!
Wyiyun777 + 1 + 1 我很赞同!
9324 + 1 热心回复!
AnLin9826 + 1 用心讨论,共获提升!
破竹而入 + 1 + 1 讲解很详细,支持大佬!
ccchpig + 1 + 1 热心回复!
夜游星河 + 1 + 1 我很赞同!
Tori97 + 1 谢谢@Thanks!
boyeah + 1 我很赞同!
JackieJK + 1 + 1 我很赞同!
discom + 1 谢谢@Thanks!
timeni + 1 + 1 用心讨论,共获提升!
liuxuming3303 + 1 + 1 谢谢@Thanks!
OoLaLa + 1 + 1 用心讨论,共获提升!
这是追求不是梦 + 1 + 1 热心回复!
janken + 1 + 1 热心回复!
helloworld0011 + 1 用心讨论,共获提升!
Arcticlyc + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
mychose 发表于 2024-5-16 19:06
不错的分析,支持作者
推荐
DJxiaojun 发表于 2024-8-9 00:35
我的小程序导入修复完之后 页面都是空白  看不到搜索 大佬你是怎么看到搜索的?还有这个sign是怎么定位的可以教教吗
3#
xiaotian847 发表于 2024-5-16 17:15
4#
xxcs373 发表于 2024-5-16 17:37
背景美女壁纸分享一下
5#
xixicoco 发表于 2024-5-16 18:17
不错的分析,支持作者
6#
q12569463 发表于 2024-5-16 18:26
不错的分析,支持作者
7#
Scan 发表于 2024-5-16 19:19
工具发出来吧,楼主,写的不错
8#
笨蛋蛋 发表于 2024-5-16 21:26
主要是云函数抓不到包吧
9#
wasm2023 发表于 2024-5-16 21:34
云函数是难点
10#
handicap 发表于 2024-5-16 21:34
有点意思,通过这种方式拼接的,感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-1 06:15

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表