TA的每日心情 | 擦汗 2023-3-9 18:19 |
---|
签到天数: 88 天 [LV.6]常住居民II
|
本帖最后由 312450352 于 2023-1-26 17:22 编辑
一.前言
网页JSON数据加密逆向过程

二.网址链接
1.某电子平台—>aHR0cHM6Ly9nZ3p5ZncuZnVqaWFuLmdvdi5jbi9pbmRleC9uZXcv
2.某监管平台—>aHR0cHM6Ly9qenNjLm1vaHVyZC5nb3YuY24vaG9tZQ==
3.某牛数据—>aHR0cHM6Ly93d3cueGluaXVkYXRhLmNvbS8=
4.某电商数据平台—>aHR0cHM6Ly93d3cua2FvZ3VqaWEuY29tL2RhcmVuU3F1YXJlL2RhcmVuTGlzdA==

三.正文
1.某电子平台
进入网址后查看XHR发现数据被加密。虽然数据在XHR里面是加密的,但是在页面上却是明文,可以初步判断在前端渲染的时候会将后端传下来的数据进行解密。
1
使用接口搜索的方法找到前端js文件。
2
将我们的前端js文件在面板打开
3
一般找到关键函数有两种常用方法,一种是JSON.parse还有一种就是直接搜索解密关键词英文decrypt。可以交叉使用,一种方法行不通的时候就换另外一个关键词搜索。这个网站我们便搜索decrypt去找到关键函数,使用decrypt方法搜索的时候经常会出现很多关键词,至于我们如何一针见血去找到关键位置,我们可以看其函数内部有没有return 关键词。return那一行的数据一般都是已经解密成功的明文数据然后渲染到前端展示的。
4
在3353那一行和3360那一行下断点,刷新页面。可以看到t是传下来的加密数据。
5
按F8使断点断到3360
6
7
将a.toString(h.a.enc.Utf8)在控制台打印可以看出是明文数据。那么这个函数b便是我们的解密函数。
8
将b函数扣下来运行发现缺少h.a
9
在控制台打印h.a可以看的出来是一个crypto加密库,直接调库替换即可
10
调库替换之后运行报错没找到r["c"]
11
在控制台打印r["c"]得到一个字符串,将字符串替换进去。
12
运行报错没找到r["b"]
13
在控制台打印r["b"]得到一个字符串,将字符串替换进去。
14
15
运行得到解密的数据。

2.某监管平台
在XHR里面的接口的数据都是加密的
16
搜索关键词webapi,可以看到只有一个js文件,那么这个文件必然存在于我们的解密函数。
17
将js文件在面板打开。
18
搜索decrypt,发现h函数有decrypt和return关键词。在803和811行下断点。
19
刷新可以看出t是传下来的加密数据。
20
按F8将断点运行到811行。
21
将 r.toString()在控制台打印。显而易见就是明文数据。h函数就是解密函数。
22
扣代码运行,报错没找到d.a
23
在控制台打印d.a,发现d.a是加密库对象,直接导包替换即可
24
运行报错f不存在。
25
在有f的那一行代码下断点刷新。
26
在控制台打印f发现f是一个对象,将其copy。
27
28
运行发现m没有定义
29
发现m和f一样是一个对象,将其也copy。
30
31
运行得到了解密的数据。
32

3.某牛数据
在XHR界面获取数据发现数据是加密的。
33
接口没有任何杂的参数,所以我们可以使用XHR断点定位到接口js文件里面
34
35
搜索JSON.parse,搜索到11个参数,在每一个有JSON.parse的代码行下断点,刷新发现断点断在了18647行。
36
将JSON.parse(v)在控制行打印,明文数据就是v,那么这一段代码就是解密函数。只不过这段代码没有前几个网站那么显而易见,并没有显示出密钥跟偏移量。
37
y是解密后的参数,y是由v解析出来的,v又是跟d有关系,而d跟l有关系,下断点发现l是加密数据。
38
39
将这段代码扣下来并且运行,没有找到Object(c.a)
40
将鼠标浮上Object(c.a)可以发现他是一个名字为d1的函数,进去js里面将d1函数抠出来并且替换掉函数名
41
42
43
运行之后发现l未定义,l是加密数据,我们将加密数据扣下来定义一下即可。
44
运行之后t报错,发现_keyStr未定义
45
全局搜索_keyStr发现是一个字符串,直接复制下来。
46
运行报错Object(c.b)未定义
47
将鼠标浮上Object(c.b)可以发现他是一个名字为d2的函数,进去js里面将d2函数抠出来并且替换掉函数名
48
49
50
运行报错_p未定义
51
全局搜索_p发现这个变量很乏有太多重复的,不过初步判断是一个变量,我们可以在_p后面加一个空格搜索。_p加空格只有7个,很快便找到了这个变量,发现他是一个字符串。将他扣进代码里面。
52
运行报错,_u_d函数未定义。
53
全局搜索_u_d,将其扣进代码里面
54
55
数据已经解密成功了。

4.某电商数据平台
搜索关键词,随便搜索一个关键词,接口返回了数据,发现数据是加密的
56
发现这个接口都是同一个js文件,我们便从initiator进入到js文件里面
57
搜索解密关键词,发现第66752有个decrypt,并且也有return关键词
58
在66752下断点刷新,将返回的那段代码在控制台打印。,发现是解密数据,那么这一段函数肯定是解密数据
59
扣代码运行url2和text2未定义
60
将url2扣下来。
61
而text2是加密数据。
62
运行之后报错cryptoJs.exports未定义
63
将cryptoJs.exports在控制台上面打印出来,发现是加密库crypto,直接调库替换即可。
64
运行报错,node.js里面的解码函数是btoa,将encode替换成btoa即可。
加密数据被成功解密了。

结尾:
我一直在想数据是加密的,你并不知道那个接口是不是自己想要的解密数据,有个简单粗暴的方法就是找对应的js文件,有些网站是分开写的,也有一些网站是写在一起的。写在一起的直接把断点下在return明文数据那里,获取到自己想要的明文数据,再打印加密数据,把这个数据去解密。我之前就挺傻的,把所有加密数据爬下来然后解密。这也是爬取数个网站的经验之一吧。
此文章仅供技术交流使用,如有侵犯权益,联系我删除
|
评分
-
查看全部评分
|