1、抓包
准备手机或者模拟器,抓包工具和过程就不介绍了,我用的Charles(习惯了)。如果手机端环境不容易建设也可以通过电脑端微信实现。这些文章有很多可以,不做赘述。
通过抓包发现每次请求头都需要参数:Authorization。这里的参数内容是加密的需要破解。
2、反编译
(1)反编译小程序
我是通过把手机上的小程序包(.wxapkg结尾的文件)
借用一下这篇文章,写了各平台小程序包的所在路径。
微信小程序在Android、iOS、Windows、MacOS的文件存放路径 - 简书
如果你是mac os系统在上面文章中介绍的路径没有找到,试试下面这个路径:
/Users/{用户}/Library/Group Containers/5A4RE8SF68.com.tencent.xinWeChat/Library/Caches/xinWeChat/{用户hash}/WeApp/LocalCache/release/
我是用的wxappUnpacker直接执行脚本进行反编译。虽然已收费但是没办法。如果从PC端拿的小程序包,需要先解密在反编译。需要工具请联系本人邮箱:435047471@qq.com或关注公众号:程序员老惠(尚未完善)获取。
(2)反编译APP
这个过程就不多说了,随便找篇教程就能够实现,而且工具很全面。只是编译出来的加固代码确实很难理解。
3、逆向过程
每一个接口的调用都需要参数:Authorization,这个参数的构成是和企鹅的API网关基本一致的,所以我估计环球就是用的企鹅托管。有相关知识的伙伴可以很轻松的找到原理,实际主要获取到:apiAppSecret,apiAppkey问题也就基本解决了。
通过在小程序的反编译代码中查找:Authorization
参数的构成过程基本有个大概的梳理。这里需要获取变量y的处理流程。
接下来查找apiAppkey参数是如何获取的,通过接口get/sign查看到这里apiAppKey的内容与头部参数:Authorization里的hmac id不一致,存在加密处理。
全局搜索:get/sign找到加密的位置,没有去找apiAjppKey和apiAppSecret的解密流程进行分析,直接通过断点获取解密后的返回值,拿走。
然后是对字符串y的分析过程,有用过企鹅API网管的直接查看文档即可。通过上面代码的分析也基本很清晰了,主要是x-date时间戳、加密的参数体、请求方法。
最后是分析代码signature的加密过程,反编译的代码对应变量b。通过webpack逐个的摘各函数r、d等,注意函数之间的调用关系,保证运行没有问题。
分析结束可以直接通过node调用,也可以使用python调用js的方式。当然还可以python直接实现加密过程调用。
能够成功调用接口获取到商品列表信息。
如果你打算做抢票程序,上面的解密内容只是能调用接口。其中添加游客信息、登录都有加密参数,后面再逐个分析。
各项工具及技术分析可邮件探讨:435047471@qq.com