某速体育-小程序逆向

声明

本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系作者立即删除!

  1. 工具准备

    • UnpackMiniApp

      pc端小程序解密工具,因为pc端的小程序比手机端的小程序多了一层壳,所以需要使用该工具解密

      地址:https://gitee.com/ceartmy/wxappUnpacker-master-master

    • wxappUnpacker

      小程序反编译工具

      地址:https://gitee.com/ceartmy/wxappUnpacker-master-master

    • HTTP Debugger

      抓包工具,用来抓小程序的包非常方便,不需要做其他配置;这个软件是收费的,但是已经有大佬破解好了,直接百度一下就能找到

      地址:https://www.httpdebugger.com/

    • 微信开发者工具

      用来动态调试微信小程序

      地址:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

    以上工具大家可以自行下载,也可以在微信公众号 “逆向路漫漫” 回复 “小程序工具” 获取全部工具的下载链接

  2. 抓包分析

    打开某体育小程序,通过HTTP Debugger抓包发现请求有个加密参数auth_key,响应数据也是加密的,下面逐个分析

  3. 反编译小程序

    微信文件默认存储位置是在c盘,建议修改到其他盘,因为微信文件占用内存空间较多,长期使用可以会占用c盘大部分存储空间,导致电脑卡顿;如果电脑内存够大,当我没说;

    先打开微信文件的存储位置,找到Applet文件夹打开,这个文件就是存储小程序包的位置,Applet文件下可能会有很多 wx 开头的文件夹,这些就是使用过的小程序产生的文件夹,每个小程序一个文件夹;可以先将这些文件夹先删除,方便等会快速找到我们需要反编译的小程序文件夹;

    关闭小程序,重新打开,进入小程序多点击一些页面,将小程序分包加载完整;会发现在Applet文件夹下产生了一个以wx开头的新文件夹,这个文件夹就是刚打开的小程序的文件夹,小程序包就在里面,现在先解密小程序包,再进行反编译

    打开UnpackMiniApp,选择小程序包进行解密,解密完成之后,会将解密的小程序包存储到与UnpackMiniApp同级的wxpack文件下,解密后的小程序包与小程序文件夹同名

    接下来使用wxappUnpacker进行反编译,进入wxappUnpacker根目录,在地址栏输入 cmd 打开终端

    官方命令:

    windows系统使用: ./bingo.bat testpkg/master-xxx.wxapkg
    Linux系统使用: ./bingo.sh testpkg/master-xxx.wxapkg
    

    我们这里输入的以下命令进行反编译,等待一会即可反编译完成,反编译完之后会在小程序包同一个文件夹下产生一个同名文件夹,文件夹里面就是反编译之后的小程序源码

    node wuWxapkg.js ..\wxpack\wx0d2e07dc2660df76.wxapkg
    

  4. 动态调试寻找加解密位置

    反编译完成之后就可以使用 微信开发者工具 进行调试,寻找auth_key的加密位置和响应解密位置

    首先打开 微信开发者工具 ,导入反编译的小程序源码

    导入小程序源码之后需要设置一下,打开 详情 -> 本地设置 -> 将 不校验合法域名…以及HTTPS证书 选项勾选上,再点击编译

    编译过程中出现错误:# Error: xxx.js 已被代码依赖分析忽略,无法被其他模块引

    该错误解决办法:

    • 修改依赖引用的代码:可根据控制台中的【代码依赖分析异常】提示进行修改。(推荐)
    • 关闭过滤无依赖文件:project.config.json 中 settings 选项添加 ignoreDevUnusedFiles: false , ignoreUploadUnusedFiles: false

    这里采用第二种方法,在project.config.json 中 settings 选项添加 ignoreDevUnusedFiles: false , ignoreUploadUnusedFiles: false,重新编译,发现页面可以正常显示了

    寻找auth_key的加密位置,全局搜索关键字auth_key,搜到两处,均为同一个位置,打上断点,刷新页面,成功断下

    阅读代码发现auth_key等于u,u是由a(e)生成的,这里重点分析a(e);单步跟进a函数,传入的参数是 api

    将a函数复制到本地运行,会出现报错,这里直接缺啥补啥,没什么坑

    寻找响应解密位置,由于无法进行动态调试,所以只能靠阅读代码来寻找解密的地方,结合上下文发现响应数据是通过 var o = t(a.data, a.code - 100); 进行解密的

    将解密函数代码复制到本地运行,会报错,依然是缺啥补啥;传入两个参数:第一个参数是响应加密的字符串,第二个参数是响应数据的code值减去100,本地运行可以正常解密

  5. 代码测试

    本地代码发送请求测试正常,可以正常解密数据

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值