逆向练手--某省雨水清监视

249 阅读3分钟

逆向练手--某省雨水清监视

受害者

aHR0cDovL3ljLndzd2oubmV0L2Foc3h4L0xPTC9wdWJsaWMvcHVibGljLmh0bWw=

分析

抓包

首先,第一步自然是抓包

可以看见,出现了两个数据包,而两个数据包的请求体参数是不一样的,一个参数少点,一个参数多点,模拟请求当然使用参数少点的,先模拟请求看看有没有什么坑

嗯?请求结果加密了,数据肯定在这边,那说明本地还有一个解密操作,所以明确了需要做的事情,post请求体的众多加密参数以及数据包解密,至于两个数据包哪个有用,有什么用就需要个人判断

请求参数

两个数据包的区别实际上不只是请求参数区别,对应的值也有区别,所以走的方法可能稍有不同,但是本质应该差不多

在该数据包中,waterEncode参数可以直接搜索,那就先弄这个参数,其他参数等下再弄

按惯例跟进去,打断点

这边的逻辑很明显,就是对每个参数进行加密操作,对应的加密还需要进行跟进去

简单看看,这个加密的逻辑全部都在这个对象内部,验证了一下,事实也的确如此,那就简单了,直接全部扣出来,甚至在结尾还给声明了一个对象,那直接调用对象的方法就可以执行操作了

在上面很明显传入参数是钉死的就是true,在传入true之后结果也和浏览器上的是一样的

好的,waterEncode加密完成,那么其他参数呢?上面也说了paramEncode这个函数本质上就是传递一个对象进去,让其自己进行迭代加密,那根据栈堆往前跟一下

吃惊..之前搜不到的参数在这边出现了,先看看上面的代码

很明显,name和hourClass是钉死的,将其中一个传入函数

其结果和上面数据包加密的参数是一样的,那就说明这两个参数就直接钉死即可,还有一个time参数

逻辑很简单,看样子走的是Simple这个函数

跟进去之后发现了这样的情况,直接扣出来测试,但是说replace未定义,其实也可以看出来这个函数就是原生函数,所以直接调用repalce进行替换看一下结果对不对即可...根据这个replace执行结果得到,就是在传入时间后面加上四个0,测试一下也果然如此,所以这个数据包的加密参数就完了

还差一个random

搜索一下random,然后发现这边是data.random而看样子还是构造请求的地方,所以这边就可以判断random实际上就是一个随机数,在0-1之间变化,实际上,多看看也可以发现random是会变的,而且区间在0-1,根据名字也可以找到应该是什么随机数

数据解密

看数据包中还有respMsg和respCode

那搜一下说不定会出现在对应加密位置,简单排除一下就找到了

看这个函数名字就可以反应出来,其本质应该就是解密,看了一下应该就对数据解密,然后转化成json对象,而解密data用的encode函数的对象在之前加密请求体的时候已经声明过了,所以这里直接调用看看结果对不对

很显然解析成功,加密参数以及数据解密都完成了,剩下的就是编写代码进行爬取和解析了

最后

可以关注本人公众号,一起交流逆向心得