免责声明
01
—
逆向方针
最最最最简略的滑块入门事例:
aHR0cDovL3lkZ3cueXVuZGFzeXMuY29tOjMxNjIwL3ZpZXcvenhmdXd1L3NmYXN0Z29vZC5odG1s
02
—
抓包剖析
输入一个快递单号查询会呈现滑块
03
—
逆向进程
简略剖析下触发滑块验证的快递查询接口
在触发滑块呈现后,会呈现两个接口,两个接口的恳求参数都相同,仅仅url不同,第一个应该是提交滑块类型
http://*/api/order.record/captcha_ty
第二个依据回来成果看,便是获取滑块的布景等信息
http://*/api/order.record/captcha
有big small 以及Y轴等数据
接下来看两次恳求都有相同的加密参数
这种比较特别的加密参数randomStr,直接查找就完事了
var randomStr = Math.random().toString(36).substr(2);
var signature = md5(sha1(randomStr + token + timeStamp)).toUpperCase();
首要randomStr是一个随机字符串,咱们能够挑选生成它也能够写死,这儿我就不麻烦了,直接写死。
再来看signature,它是一个md5包裹sha1的加密,参数为:
刚刚的随机字符串 + token = "API" + 当时10位时刻戳
完成:
import hashlib
import time
def get_sign():
token = "API"
randomStr = "6nyfb48a52x"
timeStamp = str(int(time.time()))
signature_sha1 = hashlib.sha1((randomStr + token + timeStamp).encode("utf8")).hexdigest()
signature_md5 = hashlib.md5(signature_sha1.encode("utf8")).hexdigest().upper()
return randomStr, timeStamp, signature_md5
恳求:
然后剖析滑动滑块的进程
主要看接口提交的参数
params = {
"timeStamp": "1667532117",
"randomStr": "irecvpkunl",
"signature": "4D3B543EF9BED59D4EB1AED248E2BE0D",
"x": "182",
"y": "87",
"tm": "432309370372169",
"wid": "1"
}
前三个参数是上面剖析过的,y是滑块信息里边回来的,tm是咱们查的订单号
所以这儿面只要x是需求咱们剖析的了
依据x盲猜是滑动的间隔。
辨认滑块间隔:
如同辨认间隔也没啥需求讲的,就直接用的是开源的图片辨认东西:ddddocr(https://github.com/sml2h3/ddddocr),我这边可能是用法不对辨认率并不高,三次才会有一次经过。
if response_b.get("code") == 200:
data = response_b.get("data")
y = data.get("y")
big = data.get("big")
small = data.get("small")
a = base64.b64decode(big)
b = base64.b64decode(small)
aa = open("back.jpg", "wb")
aa.write(a)
bb = open("slid.jpg", "wb")
bb.write(b)
orc = ddddocr.DdddOcr(det=False, ocr=False, show_ad=False)
res = orc.slide_match(b, a)
return res['target'][0], y
最终拿着x y提交恳求就ok了
04
—
算法复原
05
—
概括总结