上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

微信小程序逆向之牛仔城游戏厅签到接口

[复制链接]
  • TA的每日心情
    开心
    4 天前
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    6

    主题

    23

    回帖

    108

    积分

    荣誉开发者

    积分
    108

    新人进步奖新人报道油中2周年荣誉开发者生态建设者

    发表于 2024-4-19 14:13:49 | 显示全部楼层 | 阅读模式

    智谱清言说:
    大家好,今天我将为大家带来一篇关于微信小程序逆向之牛仔城签到接口逆向的技术分享。在这篇文章中,我们将一起探讨如何逆向牛仔城微信小程序的签到接口,并分析其背后的原理。

    由于已经逆向成功了,现在只是重新复现。

    参考贴:
    技术分享|微信小程序绕过sign签名思路

    使用工具:
    反编译小程序工具
    解密小程序源码工具

    这边推荐再下一个everything,方便你找到.wxapkg结尾的文件,除非你能准确知道小程序的存放路径就可以不用。打开我们的微信PC,然后登录🤣搜索【疯狂牛仔城】微信小程序

    image.png
    image.png

    然后点开小程序,这时候进入小程序后,多点击几个功能,比如什么登录啊,我的,主页,活动和二维码都点击一下,方便让小程序把需要的文件都下载完成。

    image.png

    打开everything,开始我们的搜索!直接搜.wxapkg,选择修改时间-倒序,然后打开APP.wxapkg所在的文件夹

    image.png
    image.png
    image.png

    当然,到这一步,你可能想问,你都没和我说怎么抓签到接口啊!

    我想说,不好意思我忘了

    这边你再下载一个抓包工具,叫HTTP Debugger Pro,或者你有可以抓到微信小程序的抓包工具都可以用

    然后,打开HTTP Debugger Pro,这是他的页面。开始抓包,点击一下签到,然后抓到该请求。
    image.png

    image.png

    我们可以发现,通过抓包,发现有个doGrow,经过翻译,可以大致推断他就是签到接口
    image.png

    通过接口response返回,可以看到request发送了如下json

    {
       "member_no" : 9999,
       "sign" : "2675c58926fe37d01a39874b6e210486",
       "store_no" : 12,
       "time" : "20240418200528",
       "type" : 12
    }

    通过询问GPT,可以得知:
    member_no:表示会员编号,这里的值为44246,可能是指一个特定会员的唯一识别码。
    sign:通常表示一个签名或者校验码,用于验证数据的完整性和真实性。这里的值“2675c58926fe37d01a39874b6e210486”可能是一个通过特定算法生成的签名。
    store_no:表示商店编号,这里的值为12,可能指的是特定商店的编号。
    time:表示时间,这里的值“20240418200528”看起来是一个时间戳,格式可能是YYYYMMDDHHMMSS,即2024年4月18日20点05分28秒。
    type:表示类型,这里的值为12,具体指什么类型需要根据上下文来判断,比如可能是指交易类型、消息类型等。

    图片.ping

    并且可以看到,返回了如下json:

    {
       "data" : null,
       "errorCode" : 0,
       "errorMessage" : "领取成功",
       "filename" : null,
       "success" : true,
       "url" : null
    }

    尝试重发请求,修改time值为20240419200528 原time值为:20240418200528
    image.png
    image.png

    使用APIFOX发送请求可以发现,只修改time会出现416错误返回:
    image.png

    由此可以判断,只修改time是没法进行签到的,需要一同把sign修改了,可是我们该如何得到sign值呢?
    通过长度判断,可以发现sign是md5的32位长度,猜测是md5加盐了

    接下来开始解密APP.wxapkg
    打开UnpackMiniApp.exe
    image.png

    打开之前找到的APP.wxapkg的所在的文件路径
    image.png
    image.png

    然后打开\wxpack\目录
    找到如下文件wx28881238baa06aeb.wxapkg
    image.png
    !![image.png](数据/附件/论坛/202404/19/140354ygyomz6g3g0vpyj3.png)
    然后打开wxapkgconvertor.exe,把wx28881238baa06aeb.wxapkg拖进去
    反编译成功,生成了wx28881238baa06aeb目录
    image.png

    vscode打开该目录,注意!由于性能问题和混淆问题,建议将目录中的app-service.js复制内容,然后找个JS格式化网站格式化一下
    这里可以用Javascript格式化在线工具:https://coding.tools/cn/javascript-beautifier

    格式化打开后如下:
    image.png

    尝试搜索关键词doGrow,现有个函数定义了doGrow
    image.png

    通过分析,可以发现,上面的a变量,对照了下图中的a.default.doGrow,可以发现,query对象和我们抓接口出来请求时的对象一致
    image.png

    猜想一下,既然可能是MD5加盐加密,很有可能方法名就叫MD5,或者尝试搜索sign看看能不能搜出结果。

    下图可以发现,第一条包含有sign,还包含有hexMD5,看样子是MD5加密函数,并且下面第三条也有定义hexMD5方法

    image.png
    点击第一条搜索结果,可以看到有一段var f = "911e529a9bcf081551797284f095f061acun"
    可以粗略判断它是加盐的密钥,把这部分代码贴到GPT,问问它
    image.png

    GPT已经帮我们分析好了,它说f可能是一个签名或密钥,那就先扣下这段代码,新建一个test.js文件,然后粘贴
    image.png
    image.png

    继续分析代码
    发现有段代码进行了解构,i.default.hexMD5(c + l + f)中的cl都是通过解构了arguments获得的

    var r, n, s, c, l, h, d, p, g, m = arguments;

    暂时没法判断出用途,那就换个思路,直接搜hexMD5,可以发现有两个地方调用了hexMD5,第一个是咱们刚刚看过的位置。
    第二个咱没看过,点进去一看,发现,诶这不是我想要的getSign吗?

    image.png

    同样的,在这里也发现了e,t,r,n解构了arguments变量
    先别管他干嘛的,扣下来扣下来。这时候是没法运行的,因为会报错,hexMD5未被定义。点击搜索的第三个,把hexMD5也扣下来
    image.png

    咱可以发现,hexMD5调用了c,u,l这三个方法,刚好这三个方法肯定就在这附近,所以上面的代码可以判断,上面的方法就是被调用的c,u,l。
    也要一并扣下来,这时候还没法运行,因为u方法会报错,会提示o未被定义
    image.png

    通过hexMD5方法的上下文,可以看到有o,r,n,i,a,s方法被定义,一起扣下来
    image.png

    尝试运行看看,可以发现成功了,并且md5和现成的库加密出来的也是一样的:
    image.png

    回到getSign方法,将i.default.hexMD5改成hexMD5。
    image.png
    尝试运行看看,你会发现加密出来的sign并不一致。
    image.png

    关键点就在于getSIgn的arguments,当你看不懂的时候,可以问问AI,咱问问它到底是什么意思:
    image.png

    这下知道getSign接受什么参数了,参数一: object, 参数二: time值,也就是20240418200528
    并且通过 r = e.query || {}可以知道,e是参数1的query值,也就是我们发送请求时的object对象,这时候的query可不存在time和sign字段,可不要搞混了:

    {
       "member_no" : 44246,
       "store_no" : 12,
       "type" : 12
    }
    

    所以咱可以知道,e本质上是传一个query,然后通过time值还有密钥key进行混淆,尝试一下:

    成功!!让AI重写一下getSign方便阅读:
    image.png
    image.png
    回到apifox,尝试发送新的请求:
    image.png

    成功!逆向完成。

    已有1人评分好评 油猫币 理由
    王一之 + 1 + 8 赞一个!

    查看全部评分 总评分:好评 +1  油猫币 +8 

  • TA的每日心情
    开心
    2024-3-13 10:14
  • 签到天数: 211 天

    [LV.7]常住居民III

    295

    主题

    3915

    回帖

    3836

    积分

    管理员

    积分
    3836

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2024-4-19 17:32:42 | 显示全部楼层
    好久没有这种技术文了
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-1-27 11:40
  • 签到天数: 1 天

    [LV.1]初来乍到

    5

    主题

    14

    回帖

    37

    积分

    助理工程师

    积分
    37
    发表于 2024-4-19 19:03:00 | 显示全部楼层
    ggnb,小程序去广告的方法能抓到吗
    回复

    使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    6

    主题

    23

    回帖

    108

    积分

    荣誉开发者

    积分
    108

    新人进步奖新人报道油中2周年荣誉开发者生态建设者

    发表于 2024-4-20 14:13:20 | 显示全部楼层
    uuorz 发表于 2024-4-19 19:03
    ggnb,小程序去广告的方法能抓到吗

    小程序去广告的方法肯定没法实现的,大部分用户的手机没有root,没法进行注入
    回复

    使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    6

    主题

    23

    回帖

    108

    积分

    荣誉开发者

    积分
    108

    新人进步奖新人报道油中2周年荣誉开发者生态建设者

    发表于 2024-4-20 14:15:21 | 显示全部楼层
    王一之 发表于 2024-4-19 17:32
    好久没有这种技术文了

    【新人进步奖】和【卓越贡献】啥时候发给我
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-13 10:14
  • 签到天数: 211 天

    [LV.7]常住居民III

    295

    主题

    3915

    回帖

    3836

    积分

    管理员

    积分
    3836

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2024-4-20 14:17:16 | 显示全部楼层
    i白羽 发表于 2024-4-20 14:15
    【新人进步奖】和【卓越贡献】啥时候发给我

    新人进步奖可以,卓越贡献目前还达不到哦

    颁发了 哥哥
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-23 17:37
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    0

    主题

    1

    回帖

    4

    积分

    助理工程师

    积分
    4
    发表于 2024-4-20 17:03:59 | 显示全部楼层
    小程序去广告的方法能抓到吗
    回复

    使用道具 举报

    发表回复

    本版积分规则

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