记数据加密学习笔记之举一反三

查看 175|回复 11
作者:wangguang   
最近学了一点数据加密解密,手痒痒找了几个网站练手。于是就有了这篇文章。网站我是从易到难分析记录写下。为什么叫举一反三呢,因为只要会其中之一的破解思路,其余几个网站不攻自破。
1.网站网址
总共有5个网址,这篇文章就先只写3个吧。因为我会写的很细很多。怕写太多以后的自己复习的时候不好消化。
1.aHR0cDovL2N0YnBzcC5jb20vIy8=(某搜索引擎)—>数据加密
2.aHR0cHM6Ly93d3cuaGFuZ2hhbmdjaGEuY29tLw==(某行查)—>数据加密
3.aHR0cHM6Ly93d3cuY2hhY2V3YW5nLmNvbS9jaGFueWUvbmV3cw==(某策网)—>数据加密,无限debugger,动态字体反爬。

2.开始快乐码字了(易)
网址:aHR0cDovL2N0YnBzcC5jb20vIy8=(某搜索引擎)—>数据加密
一.打开F12,xhr里面总共有三个接口,而且三个接口里面都是加密的数据,那我们应该如何判断哪个接口是我们要的数据的接口呢,各位看官往下看。


01.png (35.44 KB, 下载次数: 0)
下载附件
2023-1-2 20:37 上传

二.三个接口都有个一样的关键词搜索,那我们便用最常用的关键词搜索/cutominfoapi


02.png (46.97 KB, 下载次数: 0)
下载附件
2023-1-2 20:43 上传

三.我们先尝试去搜索到的第一个js文件里面查看


image.png (47.59 KB, 下载次数: 0)
下载附件
2023-1-2 22:09 上传

四.我们搜索解密英文decrypt
我们为什么要搜索decrypt,因为它加密的数据要在浏览器渲染的话它必须是明文,所以它在前端会有个解密函数,而解密函数的名称里面大多都有decrypt。个例除外。


03.png (59.6 KB, 下载次数: 0)
下载附件
2023-1-2 20:52 上传

在539行下个断点,刷新。
五.代码断了下来,我们查看一下t是个加密数据,在控制台打印一下t


04.png (107.21 KB, 下载次数: 0)
下载附件
2023-1-2 21:04 上传

六.在return那一行打下断点。按F8让我们看看返回的是什么数据吧
返回的加密数据解密后的数据,那么我们可以确定这一段代码就是我们想要的解密函数。但是我们并不确定这到底是不是我们要的数据那便继续F8往下面调试。


05.png (104.99 KB, 下载次数: 0)
下载附件
2023-1-2 21:07 上传

七.我们可以看到加密数据刷新了,打印一下看看跟之前的对比一下,哟西,数据不一样。那我们继续F8调试看一下解密的数据。


06.png (108.57 KB, 下载次数: 0)
下载附件
2023-1-2 21:14 上传

八.第二次解密的数据跟第一次解密的数据不一样


image.png (99.89 KB, 下载次数: 0)
下载附件
2023-1-2 21:17 上传

九.三次解密的数据都不一样,那么大家可以通过对比解密后的数据找加密数据然后去寻找自己想要数据的接口。第三次我没有截图,因为我想要的数据在第二个加密解密的时候就出来了(标题加密)
十.扣代码,我们先把函数为S的代码扣好先


image.png (11.46 KB, 下载次数: 0)
下载附件
2023-1-2 21:49 上传



image.png (312.75 KB, 下载次数: 0)
下载附件
2023-1-2 21:29 上传



image.png (36.81 KB, 下载次数: 0)
下载附件
2023-1-2 21:39 上传

十一.缺少一个_.a,我们断点之后在控制台查询一下
目测是一个crypto-js对象。那我们可以直接调包替换掉。


image.png (20.12 KB, 下载次数: 0)
下载附件
2023-1-2 21:41 上传

crypto-js跟crypto有什么区别,为什么一看就知道调用crypto-js
crypto是随机密钥,而crypto-js是自定义公钥,我们可以通过看代码来决定使用哪个,代码里面有Pkcs7说明有自定义公钥,因为他是公钥证书的标准语法。


07.png (11.04 KB, 下载次数: 0)
下载附件
2023-1-2 21:48 上传

十二.那我们便把_.a替换成crypto-js对象。运行发现解密成功了。
代码:


08.png (414.6 KB, 下载次数: 0)
下载附件
2023-1-2 21:54 上传

3.开始快乐码字了(中)
aHR0cHM6Ly93d3cuaGFuZ2hhbmdjaGEuY29tLw==(某行查)—>数据加密
接口加密数据判断是否为自己想要的在第一关卡已经细说了,第二关就不细说了
一.因为一个关键词搜索查不到自己想要的文件,那我们便可以尝试使用交叉搜索。
使用关键词industry搜索,搜索不到自己想要的文件


image.png (26.92 KB, 下载次数: 0)
下载附件
2023-1-2 20:46 上传

使用关键词industry/articleWithTags进行交叉搜索,搜到一个唯一的js文件,这个文件有九成是我们想要的文件。


09.png (46.92 KB, 下载次数: 0)
下载附件
2023-1-2 22:10 上传

二.搜索解密英语decrypt,根据第一关卡的经验我们可以把断点下在有return的解密函数上面
在9624行打下断点刷新,可以看到加密数据n出来了


10.png (131.57 KB, 下载次数: 0)
下载附件
2023-1-3 08:50 上传

把断点打在return那一行,按F8就可以拿到渲染到前端的明文。


11.png (124.34 KB, 下载次数: 0)
下载附件
2023-1-3 08:54 上传

每次逐语句调试都可以拿到加密数据和解密数据,还是跟第一关卡一样。我们可以通过解密数据拿到的加密数据去找我们想要数据的接口。
三.扣代码


image.png (13.23 KB, 下载次数: 0)
下载附件
2023-1-3 09:00 上传



image.png (225.99 KB, 下载次数: 0)
下载附件
2023-1-3 09:01 上传

把扣下来的代码换成函数形式。我们运行一下代码发现少了三个参数。


image.png (33.25 KB, 下载次数: 0)
下载附件
2023-1-3 09:04 上传

把c,r,a在控制台打印出来。并把他们在代码中进行定义。


image.png (7.1 KB, 下载次数: 0)
下载附件
2023-1-3 09:12 上传

运行之后发现o.a未定义


image.png (27.06 KB, 下载次数: 0)
下载附件
2023-1-3 09:14 上传

我们把o.a在控制台打印出来,目测是crypto-js对象。那我们可以直接调包替换掉。


image.png (17.67 KB, 下载次数: 0)
下载附件
2023-1-3 09:15 上传

把o.a替换成crypto-js对象。运行发现解密成功了。
代码:


12.png (548.73 KB, 下载次数: 0)
下载附件
2023-1-3 09:18 上传

开始快乐码字了(难)
aHR0cHM6Ly93d3cuY2hhY2V3YW5nLmNvbS9jaGFueWUvbmV3cw==(某策网)—>数据加密,无限debugger,动态字体反爬。
一.还是按往常一样F12调试,但是这次我们遇到了小问题,就是无限debugger


image.png (78.1 KB, 下载次数: 0)
下载附件
2023-1-3 09:21 上传

二.有基础的看官可以使用fiddler去hook替换掉,这样子调试的时候就不会很卡,但直接下断点也是可以的。就是调试的时候很卡,我为了方便就直接下断点。


image.png (25.53 KB, 下载次数: 0)
下载附件
2023-1-3 09:27 上传

下完第一个断点之后回溯到上一个栈里面继续下断点。


14.png (23.04 KB, 下载次数: 0)
下载附件
2023-1-3 09:29 上传



15.png (25.22 KB, 下载次数: 0)
下载附件
2023-1-3 09:30 上传

按F8发现已经过掉了无限debugger
三.有两个接口有加密数据,不一样的是一个是全部加密的,一个是半加密的


16.png (50.28 KB, 下载次数: 0)
下载附件
2023-1-3 09:34 上传

找两个接口名字相同的地方进行搜索,搜索api/发现有且只有一个js文件,这个文件八成就是解密函数的前端js文件。


17.png (52.36 KB, 下载次数: 0)
下载附件
2023-1-3 09:39 上传

进入文件里面搜索解密英文decrypt,寻找一个有return的函数


image.png (19.87 KB, 下载次数: 0)
下载附件
2023-1-3 09:42 上传

跟前几个关卡一样下断点调试,加密数据和解密数据都出来了,但是只有一个加密解密数据,可以得知aHR0cHM6Ly93ZWIuY2hhY2UtYWkuY29tL2FwaS9kZXB0L2dldERlcHRMaXN0Lz9hcmVhPVJlZ2lzdGVyQXJlYV9IRERRX0ppYW5nc3VfTmFuSmlu这个接口的解密函数并不在这个js里面,又或许他根本就不需要解密。


image.png (122.16 KB, 下载次数: 0)
下载附件
2023-1-3 09:52 上传

编码转换之后发现这个数据就是我们所需要的数据


image.png (1.17 MB, 下载次数: 0)
下载附件
2023-1-3 09:54 上传

但是其id还是加密的,但是我们所爬取的数据只有名字跟日期,所以id还有没有加密我们并不在意,分析我们所得到的数据发现所得的日期有字体反爬。
三.扣代码


image.png (19.06 KB, 下载次数: 0)
下载附件
2023-1-3 09:57 上传

运行代码发现我们少了一个r


image.png (41.07 KB, 下载次数: 0)
下载附件
2023-1-3 09:59 上传

r并不是字符串,所以我们得进去代码内部查看r


image.png (3.1 KB, 下载次数: 0)
下载附件
2023-1-3 10:00 上传

发现了一个D函数(),
getList在


image.png (12.36 KB, 下载次数: 0)
下载附件
2023-1-3 10:01 上传

发现了一行代码,说实话我也看不懂,但是我分析了一下函数代码


image.png (754 Bytes, 下载次数: 0)
下载附件
2023-1-3 10:02 上传

解密函数代码需要的更多的参数是n和e这两个参数,那我们为什么要去纠结这个r是什么呢对吧。


image.png (408.05 KB, 下载次数: 0)
下载附件
2023-1-3 10:05 上传

在控制台打印n,e发现是两个字符串,这就好办了。直接在代码中定义就好了。


image.png (84.8 KB, 下载次数: 0)
下载附件
2023-1-3 10:06 上传

继续运行代码发现i.default未定义,那我们便在控制台上面打印一下i


image.png (31.38 KB, 下载次数: 0)
下载附件
2023-1-3 10:09 上传

相信各位看官经过前面两道简单的关卡应该能看出这个i.default是个crypto-js对象吧,那我们可以直接调包替换掉。


image.png (21.79 KB, 下载次数: 0)
下载附件
2023-1-3 10:12 上传

我们发现数据解密已经成功了,但是我们发现时间并不是我们想要的,应该是有字体反爬,而且每次爬下来的时间数据都是变化的,不是唯一的。应该是个动态字体反爬。


image.png (79.09 KB, 下载次数: 0)
下载附件
2023-1-3 10:14 上传

最后一步:解决字体反爬(只给思路)


18.png (145.68 KB, 下载次数: 0)
下载附件
2023-1-3 10:19 上传

发现每次刷新其字体都会变化,那我们便从字体包下手。
我们在代码中看到一行css样式,那我们尝试把这行代码删除掉


19.png (66.7 KB, 下载次数: 0)
下载附件
2023-1-3 10:24 上传

日期数据恢复未渲染之前的数据了,那我们便可知那个字体包便是字体反爬的数据包。既然是动态字体,那么其字体包是会更新的。所以我们直接下载是没有意义的。动态字体反爬,就是每请求一次(或一段时间后),字体的映射关系也会改变。关于更多的字体反爬,各位看官可以参考我之前写的字体反爬文章,制作一个映射关系进行替换。也可以自己去训练模型。因为我们这篇的主题是数据加密,对字体反爬仅作一个思路讲解。
作者有话说:
既然我们是找解密函数
decrypt,为什么不可以直接搜索decrypt去寻找呢,反而要先搜索到js文件,再去搜索decrypt呢。因为每一个加密数据在前端都会有一个解密函数的,但是如果那些数据并不是放在一个js文件里面呢。所以我们需要先通过接口关键词找到它的js文件再去搜索解密函数decrypt更为准确。这也是一种思路吧。
结尾:
此文章仅供学习参考交流使用,切勿用于违法用途。如有侵权,联系作者删除。另外祝各位看官新年新气象,技术更上一层楼。

下载次数, 下载附件

wangguang
OP
  


Pro小古 发表于 2023-1-3 14:33
看到这编码转换界面就知道是一名e玩家

哈哈哈,py和e都会。以前e玩的多,现在py玩的多了
littian   

谢谢分享,这个格式化工具是用的浏览器自带的格式化工具么
daoxun   

感谢分享
King1993   

感谢分享,楼主辛苦
lqp0083   

感谢分享
是随风啊   

感谢分享
lazhou   

复杂,快乐,谢谢!
li083m   

学习到了
sapin   

兄弟,你的IDE背景不错
您需要登录后才可以回帖 登录 | 立即注册

返回顶部