某建设监督公共服务平台逆向分析
目标网址
aHR0cHM6Ly95bmp6amdjeC5jb20vZGF0YVB1Yi9lbnRlcnByaXNl
分析目标网站
首次打开网址,会弹出滑块验证
验证通过之后才显示数据
点击查看下一页也会弹出滑块验证
验证通过之后才会显示数据
打开浏览器开发者工具,查看浏览器抓的包
可以发现getVcode是去请求滑块验证的,它返回滑块图片的数据
findBaseEntDpPage返回的是滑块验证通过之后的网页所展示的数据
通过对这个两个包进行分析,都可以发现它们的 共同点都是携带params这个参数
这里就可以知道params就是我们要解密的加密参数
现在我们就要去寻找params的出处
先通过搜寻查看一下
可以发现都是在同一个js文件中
进去查看
再次查询params最终确定出处如下
为什么会确定出处是这行代码是因为 baseURL: “/prod-api”,在发送请求的URL中包含这个,可以打上断点去验证
这里我们不难看出这就是请求滑块验证码图片的所携带params的出处
现在我们就要去查看一下是怎么加密的
通过阅读代码
if (!n && (e.method === "post" || e.method === "put")) {
if (console.log("no encrypt ", e.data),
!H_e(e.data)) {
const s = D_e().encrypt(typeof e.data == "object" ? JSON.stringify(e.data) : e.data)
, a = {
params: V_e(s)
};
e.data = a
}
可以看出params的值由V_e(s)这个函数来生成的
s是由D_e().encrypt(typeof e.data == “object” ? JSON.stringify(e.data) : e.data)来生成的
通过阅读const s这行代码
可以知道s的生成与e.data有关
通过控制台打印e.data
发现e.data由两种结构
// 用于获取滑块验证码图片
{
"key": "query", //用于发送请求滑块验证码图片
}
// 用于获取数据的
{
"pageNum": 1, // 页码
"pageSize": 10,
"certificateType": "",
"name": "",
"slideId": "1186355937598767104", // 请求滑块验证码图片会返回数据中有
"key": "query",
"width": 227 // 滑块验证码的的距离(只有这个数值是正确的才会返回数据)
}
现在基本的思路研究清晰明了
首先先去构造如下结构的用于获取滑块验证码的结构体通过V_e()函数生成params参数向获取滑块验证码的URL发送请求获取滑块验证码的图片数据及slideId,在通过构造用于获取数据的结构体,通过V_e()函数生成params参数向获取数据的URL发送请求获取数据
扒代码
先把整个js代码复制下来
扒D_e()代码
新建一个新的js文件先把调用部分写出
把有关D_e()函数的代码找出来并复制到这个文件
可以发现有很多e(数字)的部分,这些都可以去浏览器去打印出来
替换
运行
根据报错信息去完整的js代码中找出来
可以看出B_e就是k_e,复制下来
运行,报错如下
去原js代码找出来复制
可以看出Sr就是C_e
运行报错
这是一个三元表达式可以通过直接修改代码
运行,报错信息如下
一样的查找复制
D6等于jc,查找jc
发现与jc有关的有Zbe、Qbe、nxe
查找复制
大致阅读发现这几个函数互相都有关系,那么我们直接复制从var jc = {};到function nxe(e)
运行,没有报错
扒V_e()代码
一样的操作
先写调用代码
查找V_e()复制
发现有很多类似t(数字)的部分,控制台打印并替换
接下来的操作如扒D_e()代码步骤一样,就不再赘述了
成功如下图
滑块验证码的解决就办法(用dddocr解决)
这个办法不是特别完美,因为有时会识别不到位
import ddddocr
det = ddddocr.DdddOcr(det=False, ocr=False, show_ad=False)
with open('xiao.jpg', 'rb') as f:
target_bytes = f.read()
with open('da.jpg', 'rb') as f:
background_bytes = f.read()
res = det.slide_match(target_bytes, background_bytes, simple_target=True)
print(res)
只要取出数组的第一个数值即可。
测试是否能获取数据
成功截图
失败截图
出现如下图的原因就是dddocr识别不到位的原因
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!