網絡爬蟲-某水利建設市場平臺(滑塊驗證碼破解)

剛過完端午節! 節後迴歸一波,發一波之前的庫存~
直接進入主題 目標站 水利建設市場監管平臺

觸發驗證碼 --> 首頁 --> 從業人員 --> 隨便點個人名的鏈接,如圖
在這裏插入圖片描述

可以看到就是很普通的滑塊驗證碼,我們今天不用selenium的方式去解決了,換個思路,用js的方式去解決,主要是這個網站的驗證碼簡單,拿來當demo也比較適用。


ok 萬事先抓包 我們先看看未通過的是怎麼樣的包 如圖

在這裏插入圖片描述
然後再看看通過後的 如圖
在這裏插入圖片描述

ok 很明顯 可以看見post的數值就只有3個
xpos顯然是缺口位置
capcode顯然是時間戳
modelObjId則是ip地址
都是顯而易見的

然後再看返回 失敗返回code=2 成功則返回yzmCode 這個應該是後面驗參需要用到的東西了。


好了 分析完了 這個驗證碼實際上沒有其他任何js加密 也用不到逆向相關的東西 我們就直接找找如何下載到原圖缺口圖 然後用算法算出缺口位置 就完事了。

ok 熟練地打開chrome無痕模式 輸入網址 抓包 … 實際上點刷新按鈕抓包也行 如圖

在這裏插入圖片描述

可以看到這個接口給我們返回了backImage和slideImage 的base64,我們把這個接口弄下來,下載幾張圖片看看

在這裏插入圖片描述

可以看到是這樣一組的圖片 通過這兩張圖片 我們就可以用算法去找出缺口位置了!

在這裏開源一個效果一般般的算法吧 有更好的算法可以自己寫或者優化 也可以去其他地方找一找

# -*- coding: utf-8 -*-
# Author:[email protected]
# Date :2020/4/2 23:07
# Tool :PyCharm

import cv2
import numpy as np


def show(name):
    cv2.imshow('test', name)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


def find_distance(front_img: str, bg_img: str):
    front = cv2.imread(front_img)
    front_gray = cv2.cvtColor(front, cv2.COLOR_BGR2GRAY)
    cv2.imwrite(f'gray_{front_img}', front_gray)

    # 滑塊的長寬
    width, height = front.shape[:2]

    bg = cv2.imread(bg_img)
    gray_bg = cv2.cvtColor(bg, cv2.COLOR_BGR2GRAY)
    cv2.imwrite(f'gray_{bg_img}', gray_bg)
    gray_bg = abs(255 - gray_bg)
    cv2.imwrite(f'gray_sub_{bg_img}', gray_bg)

    # 匹配圖像算法, 第三個參數是精度控制, 以下是精度最高的
    res = cv2.matchTemplate(gray_bg, front_gray, cv2.TM_CCOEFF_NORMED)
    # 注意opencv中的橫軸是y, 縱軸是x
    x, y = np.unravel_index(np.argmax(res), res.shape)

    print(x, y)
    cv2.rectangle(bg, (y, x), (y + width, x + height), (0, 0, 255), 2)

    cv2.imwrite('bg_rectangle.png', bg)

    return y - 33


if __name__ == '__main__':
    find_distance('./slide.jpg', './back.jpg')

識別效果如下圖~
在這裏插入圖片描述
然後把代碼塊整理一下 合併起來就可以了。
整體思路: 進入目標站 --> 拿到驗證碼背景圖+滑塊圖 --> 識別缺口距離 --> post必要參數進行驗證碼 --> 拿到valid即此站的yzmcode --> 驗參通過
在這裏插入圖片描述


Ending

Github傳送門

持續更新ing (歡迎各種star與fork)

聯繫方式: 442891187(QQ)

如有權益問題可以發私信聯繫我刪除

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章