freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

app小程序攻防 | 外挂?!记一次艰难的sign绕过
2024-04-19 10:30:43

0x01 前言

最近在整理清理电脑文件的时候,看到大一自己做的一款c语言飞机大战。那个时候还不怎么懂安全,传输给服务器端的数据没有加密,于是测了测发现很容易就篡改了一些游戏数据(比如伤害、钻石)。第一次这么直接的参与到了外挂,于是来了兴趣,闲暇之余在微信小程序上寻找起了会有这种数据传输的小游戏。

0x02 发现目标

搜罗了一圈,基本上都是没有数据传输只在js互动上显现和没有加密的游戏,没有难度。最后逛了半个小时,终于发现目标,存在sign验证。

![image-20240418194404397](https://image.png

image.png

对于这种游戏类的破解篡改,一般就那么几种思路

1.黑服务器
2.内存挂,windows用CE篡改,一直想写植物大战js挂好久了,可惜还没时间去学。安卓应该是hook。
3.修改本地资源
4.抓包破解

像这种小程序,前三种属于是杀鸡焉用牛刀,而且数据包呈现在面前,从攻防成长的角度,选择去第四种去进行破解无疑是最好的选择。

0x03 逆向

参考我之前的文章 app攻防-小程序反编译

https://mp.weixin.qq.com/s?__biz=MzkxNDY0NjY3MQ==&mid=2247483947&idx=1&sn=839d9fb40163800677a7ec2c21a8735c&chksm=c16a71cbf61df8dd6a0cb8fe7b028004cc19782ccff9d34905de28136e5065316059fdcad889&token=1414833902&lang=zh_CN#rd

完成逆向工作后查看情况

image.png
有分包,而且核心代码在分包中

image.png

拜读了一下这个长达16万的代码,最终读了几千就选择了放弃

(这几千大致是讲创建对象,加载模块,完成初始化,然后开始各种模块功能类的编写)

啃臭键+f,开搜之前上传给服务器端的记录接口

image.png

找到接口对应逻辑,看到sign加密函数

这句话为引子,慢慢顺藤摸瓜。

跟进sign函数

image.png

发现需要wx_appid与wx_secret。但搜遍代码,发现这两个参数是浓墨重彩层层加密。

image.png

0x04 sign绕过

1.第一次解密尝试

无奈,开启第一次解密尝试。

查看了对应加密函数

image.png
![image-20240418195626667]image.png

初步观测属于两层加密

编写了一个小html文件看看能否输出

image.pngimage.png

乱码

image.png

不出意外的话跟mousedown事件属性相关,但相关继承函数却又跟了更多的外层函数,实在无法继续推演,遂放弃。

image.png

2.第二次解密尝试

时隔忙碌于文档的两周,我回来了。

这次我把所有源码解出来想尝试用微信开发者程序去重新编译调试输出一些关键信息。

image.png

可惜的是缺少核心app.json,要是能重新恢复的话我估计得把这二十多万行代码看完。(bushi。)

切换角度,尝试恢复核心js,在里面输出些信息。

image.png

在经历了漫长的报错调试,终于,皇天不负有心人,爆出了两个secret值

image.png

根据传参信息观察,这个uploadrecord相关函数采取的secret值和其他所有上传服务器的函数所采用的校验secret值是不同的

image.png

image.png

image.png

我先尝试对获取时间戳参数的sign值进行复原,看看我阅读的代码逻辑是否正确。

image.png

image.png
image.png

原处和js调试最后输出的值发现一样,有戏,成功复现

image.png

接下来复现uploadrecord

根据相关函数编写如下

image.png

撰写改编后将sign值进行修改image.png

回显成功

0x05 结果展示

目前只玩了第一关,只有204金币

image.png

提交数据包重新加载程序后

image.png

成功修改了钻石金币等值!

0x06 总结

1.反编译代码如果完全可以尝试输出调试信息进行编译获取关键信息
2.反编译代码不全可以尝试恢复关键代码进行输出调试
3.没有遇到混淆加密等情况,若涉及到rsa等加密用go去加解密会更清爽自动化一些
# 渗透测试 # 反编译 # 前端加密
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录