微步xx登录 极验4滑块分享
1.分析发包
目标网址(base64):aHR0cHM6Ly9wYXNzcG9ydC50aHJlYXRib29rLmNuL2xvZ2luP3NlcnZpY2U9eCZjYWxsYmFja1VSTD1odHRwczovL3gudGhyZWF0Ym9vay5jb20vdjUvbm9kZS9kYjNmYWU3ZDJkZDE0YmYwLzg5NjNjNzBmMmI3MTAxOWI/cmVkaXJlY3RVUkw9aHR0cHMlM0ElMkYlMkZ4LnRocmVhdGJvb2suY29tJTJGdjUlMkZkb21haW4lMkZkdS50ZXN0amouY29t
首先观察滑块的发包流程:
load数据包
有个load 是 最开始加载的验证码文件
其中的参数有这些 我们可以定死他 没啥可说的 challenge 实际上是一个uuid
我们再看其中返回的数据预览中有:
bg: 是我们的背景图片url
slice: 是我们的滑块的图片url
下面这些我们在 入参计算w的时候 需要使用到
- payload:
- pow_detail:
- process_token:
verify数据包
verify数据包 是我们 滑动滑块发送的数据包 最主要的是w的生成 其他的部分可以固定 ,部分是上一步load的返回值而来的
当然w参数是加密生成的。
携带的参数如下
callback: geetest_1709121487735
captcha_id: 66c1b4d0e33195fd0331baeb26f25999
client_type: web
lot_number: 09a9cbb7d5ea44629d144b25a1e27ab5
payload: _b-sD20eax9oEJvmoMxvFIlWwstsfUliHhIXFQozmuCmfjHnrPeNMyWVx0VOqk3Qh86KiiACQ9xtkrEdo7OsubSvp-fqGaU7vd5P6f-UYOGg8y3hkVAprYzmlCIJlyzAGoufT3SEvO6cV7IvmDTj3QpVik0Kw6-QatL-tabGd8jHHESr-g28ooftfBwmMMuFZ6jUM6PNWzWemsCaKFfuSCqlHM_UdHGYweM0WaYwXd52Vd_0ywC-bcvN8Ow3sIYNKnv825FaDtG-UqLpd-UuYvtkJ-wqW5AGveW3REU7kAcOVvqgOBBlP3scCSAxRn-gRgqHFs9TUrwNX5WVA-K0-lZrNVeI7PaGnUD2aS4sY0Yq9yBmKYyQWY3Rmsvs0UGi5QP9OIhnKmpEW77immO3M3R8X7vX49T4kY5oYzaCt2VS-HMGl9WXxkh0j9VNjdLmNwpDk9Q2dc-3xeYHbJdcyyJczafP0t5KV-ibWHBzsAW4vUjk08rTtsXjEX-N-89vAicPyJGuOwMM-tS1UpNGtpKmm2GErzA-YgQgaWvMPTRPuQFJ7TZACkW9CWGR3IE0eK2KfriOzOksZLc9rPl_cDa6hyzG2VhEKn0tXgBDMASSg894FEUNuzYgH0GsOlm2C7F4SyKDLgOwPuTb6CwzbmAt1iViowvQRTP4Apj720L74bolsRkZADF3WJYNIrHkuNy-HyG3pUf5F-Rm_HS-RP7eJYlYf_dcBGf_CLzXWsi5V3lSpMNoI9SCB1uN5w9zVQay-sJZtr82e6l6Dk24GnCMbNuIDjuuhqkKri7DFgMjS0Ssvvykx15IbEnpD2Uejaylz5qThMKXX3VzJhVNNkmGI9rbXciEmhAkIccj1zg=
process_token: 04cdbd304a986513394f2cbe27be168697bef744d6383dd3bac8be0c48629b59
payload_protocol: 1
pt: 1
w: f8bccc8290e232ef1d7c6fe451095fd325df137caac77d2b864fcbb81e593e9d6fae7f18bfb707ae27fef4f43f78624a0fe1619bbca0ee4902bca8e965f22aa40b9b864d00689b66483b4896c8d08ac770eb68654b3f5fcefa6ebea23fd926fc6812ae4b8a9b00a9185a6d58fcac21e5fa75e8d3db276bcf42329ae5104ade4113590910c22ff51d3c6a500456112eef2ed5a4ea5776d90c32a5449b07e96d4270babcaa2f6a3e79f3ebcc61fd89d46c24dabe1ccf6c1b7a69a156ff2a0bb2972d975d20d447124db3f652982fa66da878dc14ea546e87b5a174b1746fc064cc76cb942bb1ac25d4c98686838250c1583ba709ea67ce6318c8be253835c8ae78826017d5c15ba0c624702715a4d26dcc30726a0585807a5e7afcae6e9a856f1aead7e37cfa5a154cc31819ec3e57be7a1318abadaeb34b38bf965bd1c801a5dcb5fd4380027efba037510e7aeebff92df5d8504a51490d389c3e743be92e77780dabee8fddbb5fa7a7bfb5451298a3f11eea7d7afe049114cefb8b0aadfe820b6f53c3b02121324a24911ab9aac2f6ab2a864080c88041ffba7463960079a45298329dd3e138bd87b5a3c2729415a79e7a3b86f3105e2c8e0e996eb2fe754085997edbfadce94c15d4a38cf27626e01d2fdee283d4cb3a3ec2499537eec73781acedfdd2d1f16748f80e580dcd0e80830bb03b5d079ff92db93c2281df8fa5a9d7d8b052310f1994c34923f3a1fe5875100709b18084cd49b51897e9c1d98293a205d94fc64805978d142fb85ef78d4969ac77c8822eb080f99a859187aa79b7
如果成功会返回:
result中的seccess 结果
2.w的如何生成的?
在verify 的启动器中下断点
我们逐步跟调用栈
至此我们的 w的生成找到了是 i
而i 是由这断代码生成的
var i = (0,
m[$_BIBCb(42)])(f[$_BIBDw(42)][$_BIBDw(593)](e), n)
//f[$_BIBDw(42)][$_BIBDw(593)](e) 等价于JSON.stringify(e)
参数 e 是: setLeft 是滑块的距离, passtime 是通过的时间,userresponse
其余的 lot_number 是load文件返回的
“pow_msg”:
“pow_sign”: 现在这两个 pow 还不知道是什么 userresponse 和 setLeft passtime 现在 也没找到生成的位置
{
"setLeft": 18,
"passtime": 84,
"userresponse": 42.558810274898605,
"device_id": "",
"lot_number": "143288d4e28f43b8aebfd6d2631898a7",
"pow_msg": "1|0|md5|2024-02-28T20:20:14.274025+08:00|66c1b4d0e33195fd0331baeb26f25999|143288d4e28f43b8aebfd6d2631898a7||f6d3f00cca4ed25f",
"pow_sign": "6fefb89a77255efa47e6c331aad77f94",
"geetest": "captcha",
"lang": "zh",
"ep": "123",
"biht": "1426265548",
"bvOU": "pIFQ",
"em": {
"ph": 0,
"cp": 0,
"ek": "11",
"wd": 1,
"nt": 0,
"si": 0,
"sc": 0
}
}
参数n:是一堆方法
接着跟栈 我们跟到pow 两个参数的生成位置了:
那么先看一下吧生成的算法吧:我们发现他是从s中取出来的 ,所以我们跟他那个括号的数字 598
a[
B
G
C
I
n
(
497
)
]
[
_BGCIn(497)][
BGCIn(497)][_BGCHW(519)] = o, powMsg
a[
B
G
C
H
W
(
497
)
]
[
_BGCHW(497)][
BGCHW(497)][_BGCIn(598)] = u powSign
由图所以 r = (0,d[ B G C H W ( 42 ) ] ) ( n , i , s [ _BGCHW(42)])(n, i, s[ BGCHW(42)])(n,i,s[_BGCIn(506)], s[ B G C I n ( 579 ) ] , s [ _BGCIn(579)], s[ BGCIn(579)],s[_BGCIn(504)], s[$_BGCHW(523)], $_BGCIn(67))
这个是我们的关键 手动解混淆后 /r = (0, d[$_BGCHA(34)])(lotNumber, captchaId, ‘md5’, ‘1’, 0, ‘2024-02-27T23:25:26.128006+08:00’, ‘’)
再回过头来看 load中的 返回值 这不就对上了嘛。
pow_detail: {version: “1”, bits: 0, datetime: “2024-02-28T20:17:19.283620+08:00”, hashfunc: “md5”}
所以我们解决掉这个 (0,d[$_BGCHW(42)]) 就ok了嘛
3.webpack解决 pow等加密
因为 加密函数 是由,d[$_BGCHW(42)]) 所以我们搜d = 发现他使用webpack对其进行加载了
webpack全扣代码:
进来后i是webpack的加载器:
本地运行成功:
4.webpack得到w参数计算
"w": i
var i = (0,
m[$_BIBCb(42)])(f[$_BIBDw(42)][$_BIBDw(593)](e), n)
m = n(31) 这边可以直接webpack直接导出即可
我自己是进入 m[$_BIBCb(42) ]这个里面分析了一遍
function i(e, t) {
var s = t.options;
// if (!s.pt || "0" === s.pt) return c.default.urlsafe_encode(e);
var n = '2e96d12843135752'; //定死随机数
var i = new d.$_Hi(["1", "2"]); //数组 r的原型...
var r = {
"1": {
"symmetrical": h.default,
"asymmetric": new p.default()
},
"2": {
"symmetrical": new l.default({
"key": n,
"mode": 'cbc',
"iv": '0000000000000000'
}),
"asymmetric": f.default
}
};// 加密
if (i.$_CCr(s.pt)) {
var o = true;
var a = 1;
//rsa加密
var _ = r[a].asymmetric.encrypt(n);
while (o && (!_ || 256 !== _.length)) {
n = '2e96d12843135752';
_ = new p.default().encrypt(n);
}
// aes加密
var u = r[a].symmetrical.encrypt(e, n);
return (0, d.arrayToHex)(u) + _;
}
}
最后 这个是生成w的主要函数
function m_default(e) {
var n = '2e96d12843135752'; //定死随机数
var encrypt_data = window.fan(33).default.encrypt(e,n)
// console.log(window.fan(0).arrayToHex(encrypt_data))
// arrayToHex
var p = window.fan(34)
var asymmetric = new p.default()
var _ = asymmetric.encrypt(n);
// console.log(_)
return window.fan(0).arrayToHex(encrypt_data) + _;
}
5.图片识别 图腾api识别 没打广告哈
网址:https://www.tutengocr.com/
识别坑点需要减掉大约 13 左右像素:(可能有10几个px的误差)
juli = int(get_distanX()['data']) - 13
print(juli)
6.最后附上成功图!
ypt_data) + _;
}
## 5.图片识别 图腾api识别 没打广告哈
网址:https://www.tutengocr.com/
识别坑点需要减掉大约 13 左右像素:(可能有10几个px的误差)
juli = int(get_distanX()[‘data’]) - 13
print(juli)
## 6.最后附上成功图!
[外链图片转存中...(img-hkpuyshm-1709126307529)]
##