某建设监督公共服务平台逆向分析

某建设监督公共服务平台逆向分析

  • 目标网址
  • 分析目标网站
  • 扒代码
    • 扒D_e()代码
    • 扒V_e()代码
  • 滑块验证码的解决就办法(用dddocr解决)
  • 测试是否能获取数据
    • 成功截图
    • 失败截图

目标网址

aHR0cHM6Ly95bmp6amdjeC5jb20vZGF0YVB1Yi9lbnRlcnByaXNl

分析目标网站

首次打开网址,会弹出滑块验证
某建设监督公共服务平台逆向分析_第1张图片验证通过之后才显示数据
某建设监督公共服务平台逆向分析_第2张图片点击查看下一页也会弹出滑块验证
某建设监督公共服务平台逆向分析_第3张图片验证通过之后才会显示数据
打开浏览器开发者工具,查看浏览器抓的包
在这里插入图片描述
可以发现getVcode是去请求滑块验证的,它返回滑块图片的数据
某建设监督公共服务平台逆向分析_第4张图片
findBaseEntDpPage返回的是滑块验证通过之后的网页所展示的数据
某建设监督公共服务平台逆向分析_第5张图片通过对这个两个包进行分析,都可以发现它们的 共同点都是携带params这个参数
某建设监督公共服务平台逆向分析_第6张图片
某建设监督公共服务平台逆向分析_第7张图片这里就可以知道params就是我们要解密的加密参数
现在我们就要去寻找params的出处
先通过搜寻查看一下
某建设监督公共服务平台逆向分析_第8张图片可以发现都是在同一个js文件中
进去查看
再次查询params最终确定出处如下
某建设监督公共服务平台逆向分析_第9张图片为什么会确定出处是这行代码是因为 baseURL: “/prod-api”,在发送请求的URL中包含这个,可以打上断点去验证
某建设监督公共服务平台逆向分析_第10张图片
某建设监督公共服务平台逆向分析_第11张图片某建设监督公共服务平台逆向分析_第12张图片这里我们不难看出这就是请求滑块验证码图片的所携带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
某建设监督公共服务平台逆向分析_第13张图片某建设监督公共服务平台逆向分析_第14张图片发现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代码复制下来
某建设监督公共服务平台逆向分析_第15张图片

扒D_e()代码

新建一个新的js文件先把调用部分写出
某建设监督公共服务平台逆向分析_第16张图片把有关D_e()函数的代码找出来并复制到这个文件
某建设监督公共服务平台逆向分析_第17张图片某建设监督公共服务平台逆向分析_第18张图片可以发现有很多e(数字)的部分,这些都可以去浏览器去打印出来
某建设监督公共服务平台逆向分析_第19张图片替换
某建设监督公共服务平台逆向分析_第20张图片
运行
某建设监督公共服务平台逆向分析_第21张图片
根据报错信息去完整的js代码中找出来
某建设监督公共服务平台逆向分析_第22张图片可以看出B_e就是k_e,复制下来
某建设监督公共服务平台逆向分析_第23张图片运行,报错如下
某建设监督公共服务平台逆向分析_第24张图片去原js代码找出来复制
某建设监督公共服务平台逆向分析_第25张图片可以看出Sr就是C_e
某建设监督公共服务平台逆向分析_第26张图片运行报错
在这里插入图片描述这是一个三元表达式可以通过直接修改代码
某建设监督公共服务平台逆向分析_第27张图片运行,报错信息如下
某建设监督公共服务平台逆向分析_第28张图片一样的查找复制
某建设监督公共服务平台逆向分析_第29张图片
D6等于jc,查找jc
某建设监督公共服务平台逆向分析_第30张图片发现与jc有关的有Zbe、Qbe、nxe
查找复制
某建设监督公共服务平台逆向分析_第31张图片大致阅读发现这几个函数互相都有关系,那么我们直接复制从var jc = {};到function nxe(e)
某建设监督公共服务平台逆向分析_第32张图片运行,没有报错
某建设监督公共服务平台逆向分析_第33张图片

扒V_e()代码

一样的操作
先写调用代码
某建设监督公共服务平台逆向分析_第34张图片
查找V_e()复制
某建设监督公共服务平台逆向分析_第35张图片
某建设监督公共服务平台逆向分析_第36张图片发现有很多类似t(数字)的部分,控制台打印并替换
某建设监督公共服务平台逆向分析_第37张图片
接下来的操作如扒D_e()代码步骤一样,就不再赘述了
成功如下图
某建设监督公共服务平台逆向分析_第38张图片

滑块验证码的解决就办法(用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)

在这里插入图片描述只要取出数组的第一个数值即可。

测试是否能获取数据

成功截图

某建设监督公共服务平台逆向分析_第39张图片

失败截图

出现如下图的原因就是dddocr识别不到位的原因
某建设监督公共服务平台逆向分析_第40张图片

你可能感兴趣的:(爬虫,前端,javascript,服务器,网络爬虫,爬虫,爬山算法,ocr)