声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!
前言
这次搞搞小程序的,来篇干货吧,具体小程序名称就不说了,主要是写下逆向的思路方法
一、请求分析
这里随便输入车牌号,然后抓请求
请求头中的s参数,就是我们要解决的
这里是请求得参数,加密过程可能会用到
二、获取参数
接下来就是获取小程序源码包,然后用工具进行反编译,这部分我就不详细说了,百度上找有很多。 然后打开微信开发者工具,相当于我们的浏览器,在此环境上找出加密的位置。
由于本地小程序是没有网的,所以无法直接进栈查找参数,只能从加密逻辑上分析,在进行部分关键词的搜索。
一般小程序的加密参数都是一些请求参数的组成在加上盐的MD5,所以先搜下md5这个参数。 搜到的js文件不多,一个一个看过去,然后在这里找到了可疑几个方法。
然后就是继续搜索这几个方法在哪里调用的,先看看secondMD5Validate,最后搜出来只有这两位置,所以这个方法并没有给我们带来信息。
然后搜firstMD5Validate,搜出来三个,同名的只有两个,跟上面的方法一样,没得到啥信息。
接着搜第三个,除去方法定义后,只有在一个位置调用了。 这里就很关键了,我们看到了他传入的是f.carNumber,而这个carNumber大概就是我们输入的车牌号了,而且这个f有正是我们传入的那几个参数,因为参数名称都一样,所以大概率可以判断出这个l的值就是我们需要的s值。
这里我们就来证实下,继续往下看这个,l在这个被传入,我们搜索下GET_PARKINNG_FEE。
找到了他请求得接口,正好是我们抓包的链接。
到此,我们只需要解决Object(s.getSignObject)这个方法的作用就ok了。
然后分析下这个函数里面做了啥操作。 这个t 取得是传入参数的第一个,而传入参数我们知道了,就是carNumber,所以这个t=carNumber。
e是字符串数组。
n这玩意取得是时间戳。
然后我们又从返回的这个{t: n,s: o(n + t + e[n % e.length])}字典,又验证了我们找的加密位置是正确的。
就看这个s,o方法,传入n + t + e[n % e.length],这个参数看的明白,再解决o函数。
o函数是下面这个,多的不说,一看就像MD5。
知道参数跟加密方法后,我们直接开始验证一开始抓的那个包,然后发现是一致的,到此我们就成功了。
三、请求测试
整个流程下来,花点时间,再结合一些经验,应该是不难的!