app小程序攻防-外挂?!记一次艰难的sign绕过

*声明:*请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。合法渗透,本文章内容纯属虚构,如遇巧合,纯属意外。

0x01 前言

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

0x02 发现目标

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

image-20240418194404397

image-20240418194422506

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

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

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

0x03 逆向

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

app攻防-微信小程序

完成逆向工作后查看情况

image-20240418195020224

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

image-20240418195040318

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

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

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

image-20240418195227798

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

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

跟进sign函数

image-20240418195415309

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

image-20240418195536657

0x04 sign绕过

1.第一次解密尝试

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

查看了对应加密函数

image-20240418195603024

image-20240418195626667

初步观测属于两层加密

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

image-20240418195746341

乱码

image-20240418195809978

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

image-20240418214613142

2.第二次解密尝试

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

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

image-20240418195947881

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

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

image-20240418200116385

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

image-20240418200229107

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

image-20240418200338914

image-20240418200428462

image-20240418200543789

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

image-20240418200624252

image-20240418200641027

image-20240418200649358

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

image-20240418215650674

接下来复现uploadrecord

根据相关函数编写如下

image-20240418200807213

撰写改编后将sign值进行修改

image-20240418200905568

回显成功

0x05 结果展示

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

image-20240418200956345

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

image-20240418201014609

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

0x06 总结

1.反编译代码如果完全可以尝试输出调试信息进行编译获取关键信息
2.反编译代码不全可以尝试恢复关键代码进行输出调试
3.没有遇到混淆加密等情况,若涉及到rsa等加密用go去加解密会更清爽自动化一些

原文链接: app小程序攻防-x挂?!记一次艰难的sign绕过

关注公众号: 剑客古月的安全屋

关注我,不迷路,后期将为大家带来更多的sign绕过案例与总结

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值