freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

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

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

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

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

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去加解密会更清爽自动化一些
# 渗透测试 # 反编译 # 前端加密
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 月金剑客 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
月金剑客 LV.1
我叫古月,我是一名剑客。
  • 3 文章数
  • 4 关注者
代码审计-php篇之某CRM系统多处sql注入
2024-05-08
渗透实训 | 记一次后台多处对文件上传的WAF绕过
2024-04-28
文章目录