01准备工具

  1. 手机一部,安装过微信
  2. 抓包工具,这里用的花瓶
  3. 微信开发者工具
  4. 小程序解包工具
  5. pychram 等IDE

02准备工作

  1. 抓包工具可以抓到小程序的包,这里不再分享了,网上搜索即可
  2. 抓到的小程序包之后,逆向解包
  3. 用测试账号appid,在微信开发者工具中打开解包后的代码
  4. 让代码编译无错

03开始逆向

先打开抓包工具,在手机上点点页面,抓到接口。

打开网易新闻 查看更多图片

我们抓到了 v2/ticket/list接口,返回的是json对象,数据是门票的信息列表

观察querystring,没有加密内容。

观察header,发现是有Authorization 对象,里面有signature加密字段,我们需要处理的就是这个。

打开网易新闻 查看更多图片

用过网关的同学就没必要看了,很熟悉的加密方式,它告诉你了加密方式,加密字段,唯一要处理的就是加密的Secret了。

我们在微信开发者工具中全局搜索Authorization , 仔细寻找可能加密的地方,打上断点(不是源代码)。

打开网易新闻 查看更多图片

重新编译代码,让接口进入断点。

打开网易新闻 查看更多图片

观察代码,我们需要处理y值,apiAppSecret,apiAppkey。

我们在花瓶抓包工具中,搜索apiAppkey,找到内容

打开网易新闻 查看更多图片

紧接着发现这个key和Authorization 中的hmac id 不一致,就说明是加密的,我们需要对key和Secret进行解密

我们切换到微信开发者工具中,搜索接口'get/sign', 找到解密开始的地方

打开网易新闻 查看更多图片

这里偷个懒,不扣取它的解密方法,直接拿返回值填上。然后就得到了解密后的key和Secret.

接着分析y值,

y = ["x-date: ".concat(m), c, "application/json", "application/json", d, h].join("\n")

它是有一个m(utc时间字符串),c(接口方式),两个固定值,d(post接口的参数的某种加密字符串),h(接口和query字符串的拼接,或者说是请求地址去掉host)用换行符拼接在一起组成了一个新的字符串

然后分析b也就是signature的生成方法。

打开网易新闻 查看更多图片

i和r上面有定义

打开网易新闻 查看更多图片

我们用webpack的逆向方式来扣去这一部分的加密js代码

05逆向js

webpack怎么扣js,这里也不说了。问了也顶多是复制粘贴。

打开网易新闻 查看更多图片

完成之后,准备编写代码。大概的过程就是复制原来的代码,拿过来修改一下,保证运行不报错。

打开网易新闻 查看更多图片

然后python代码调用一下

打开网易新闻 查看更多图片

获取到正确的结果

打开网易新闻 查看更多图片

然而在这个过程中,会碰到很多问题,比如怎么解小程序的包,怎么运行起来,怎么抓接口,怎么找加密方法,怎么解密等等。

处理方式就只有一个办法,就是一个一个问题解决。解决不了,就放弃,交给专业的人来解决!