数据加解密 --- 标准加解密

请求数据解密原理

一般来说,对于安全性要求较高的程序,一般会对交互的数据进行加密,对于爬虫来说,就需要对加密的数据进行解密,而数据被渲染在浏览器上,说明前端js代码中有对数据解密的算法,那么如何定位解密算法的执行函数就是我们比较重要的工作内容了

解密流程

1. 判断是否存在JS混淆

下图为未混淆或加密的堆栈信息,可以直观的看到堆栈调用的函数或方法名

混淆种类

1. OB混淆
下图为混淆后的堆栈信息,下图是OB混淆,具体表现为会出现十六进制的变量名,函数或方法名

2. 数组混淆
会在全局有一个数组结构,来存放真正有意义的函数名,代码中以简单不易分辨的函数名来定义,以达到混淆,不容易分辨函数真正执行逻辑意义的目的
3. 变量名混淆
会将可读性高的如getData 的这种函数名,替换成a这种不易读的函数名

反混淆

1. 数组反混淆
1. 复制下来,然后将方法改成函数形式,备用

2.找到代码位置,打上断点,开始调试,确认当前执行到了这行代码

3. 控制台输出,确认是否是这行代码得到的加密结果

4. 直接在控制台复制粘贴代码中的数据混淆代码,

5. 逐个输出,逐个替换

2. 定位解密函数

1. 搜索 decrpt(有结果

1.1 搜索decrpt(,解密函数名,不一定能搜出来,要自行测试,这个函数一定要是对象的方法,而不能是类方法

1.2. 将搜索到的代码格式化,变得易读

1.3 开始断点测试


1.4 查看方法的返回值是否就是明文数据
以上信息可以得到,上面解密方法的形参t为密文数据,执行下面的代码后得到明文数据,然后就可以直接复制代码下来执行即可,根本不需要关系这个方法的解密逻辑

1.5 建立js文件,将代码写入文件中,并测试调用方法是否正常执行

1.6 分析得出此加密方法是标准加密,需要下载响应的模块进行解密

npm install crypto-js

1.7 导入crypto-js

1.8 替换加密函数

1.9 测试能否得出明文数据

3. 返回数据有明显的偏僻关键字

3.1 直接全局搜索ctrl+shift+f关键字,如上的encrypt_data,可以看到有6条结果

3.2 开始一条一条分析,找到真正调用的方法

这就有可能是

4. 以上情况都找不到

前后端数据是通过JSON格式来传输,可以通过直接搜索JSON的反序列化函数JSON.parse来定位到前端拿到后端数据的那一刻,但是需要注意一些问题:

1. JSON.parse只是数据类型转换,并不具备解密功能
2. 必须是嵌套了一个解密的方法或函数,并且不能是内置方法或函数,如:
	1. JSON.parse(解密的方法或函数(密文数据))
	2. a = 解密的方法或函数(密文数据),JSON.parse(a)
3.需要结合堆栈或断点使用,不然很多文件都有这个方法,很不容易定位真实反序列化

4.1 进入JS主文件

4.2 直接搜索JSON.parse

4.3 开始分析js的执行流程,打上爽断点,开始调试

4.4 调试到函数的执行,然后控制台输出

控制台输出此函数,查看是否可以得到明文信息

4.5 找到解密函数后,然后就可以用python来写脚本程序了

4.6 复制代码到下面的s方法到js文件中

demo.js

// 1.首先将密文串定义
const str_message = "密文串"

// 2.将解密方法从js文件中找到并拷贝下来
function s(e){
    
}
console.log(s(str_message))  // 执行js文件时发现会报错,方法中的内部方法未被定义

4.7.继续打断点,找到s的内部方法,或者控制台输入`o.tostring()


4.8 或者直接跳转到函数内部

4.9 格式化后可以看出来,这个是对象方法,改成函数执行即可

4.10 尝试运行,如果运行失败,就继续打断点,缺失哪个代码段,直接复制到代码里补充

python执行JS代码

模块下载

pip install pyexecjs2

代码

快速搭建基础爬虫结构的工具

https://curlconverter.com/

自动生成基础爬虫代码

import execjs


# 打开js文件
with open("./demo.js","r",enconding="utf-8") as f:
    js_file = f.read()
# 参数根据js函数的形参来传即可
ctx = execjs.compile(jsfile).call("js中的函数名","参数1","参数2")

数据加密

请求头加密字段反爬

1. 首先确定加密的字段是否是服务器返回,下面是在服务器的数据中搜索方式

2.引用关键字搜索,来定位代码,ctrl+shift+f

3.或者搜索url

4.定位到代码

4.1,打上断点,点击开始,刷新页面或修改筛选条件,在控制台,输入indexcode.getResCode,一般情况来说点击就可以跳转,如果跳转不了,就是js中做了限制

4.2,进入方法内部

然后格式化后可以看到

posted @ 2023-09-05 16:16  河图s  阅读(88)  评论(0)    收藏  举报