爬虫逆向之极验滑块三(附轨迹模拟邪修法)

个人声明

本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

此文章重在学习调试技巧。模拟参数生成。

目标网站: aHR0cHM6Ly9kZW1vcy5nZWV0ZXN0LmNvbS8=

简述:

个人觉得极验三难度比数美和易盾难

接口分析:

一个需要请求五次,五个接口

第一次gt/register-slide 第一个接口

返回challenge和gt加密要用的,都是三十二位。challenge在后续接口会重新生成,为三十四位

第一次get.php,第二个接口

携带gt,challenge,和第一个w值

返回

后面加密需要s和c,但是s的值在后面有接口重新生成s,所以这个接口返回的s值直接忽略掉就行。c一般不变

第一次 ajax.php,第三个接口

会有第二个w值

响应结果

PS:必须经过这个接口,才能获取最后结果。这个接口失败可能也会返回正确的结果

第二次get.php,第四次接口

这个接口生成被打乱的背景图和和缺口图

生成背景图是打乱的

除此之外,还重新生成了三十四位的challenge,这个challenge非常有误导性,除了最后两位不一样,其它都一样,我在这里吃过坑。

还有s值跟上次生成不一样,后续加密以这个s值为准。

第二次ajax.php,最后一个接口

第三个加密的w值,注意challenge是第二次返回的三十位的。

正确响应结果

score越低越代表是真人,越高越代表是机器人。

逆向流程

第一个w值

定位

第一个w值最好找,直接跟栈即可

在这个js文件里guwyxh,直接搜i + r即可

r值分析

每次输出值不一样

可以考虑是RSA加密

直接进去函数

直接跟到低发现

被加密的是随机十六加密值

密钥直接进去,搜索下断点

还有一个技巧,对于非对称,密钥设置,会有setpublic

而代码又被混淆

事实上类似ob混淆,都是有解密函数的

随机找个混淆进去

这个就是解密函数,插个桩

瞬间断住

至此r值分析完毕,不混淆,扣代码记得把解密函数也得扣了

i值分析

r值是对称加密

明文和密钥

密钥要跟rsa要加密值是一致的。

明文除了challenge和狗头,其它写死

至此i值分析完毕

第二个w值

定位

第二个w值是相对难找的,并没有迭代循环,也没有几层控制流嵌套控制流(我又想起了被阿里滑块支配的恐惧了)。纯跟栈下去,然后细心点就行

搜t

找到这个$_CEAp,搜不到,说明被混淆了

直接解密函数插桩,插这个桩会很卡,可能是因为经过很多次判断

断住了

跟上一个栈,很明显在这里加密

很明显也是一个对称加密,

密钥不要重新获取,跟w1密钥保持一致只分析r值就行

r值分析

需要分析的也就是一个值,rp是一个标签MD5加密值

r值主要由i[$_CFGDn(1150)]赋值

i[$_CFGDn(1150)]值在这里被循环增加

浏览器向右拖过去,最后发现rp值加这里加密

s也就是passtime,要对应

rp分析完毕,至此第二个w值分析完毕

第三个w值

第三个其实和前二个加密完全一样,除了轨迹加密。无论是哈希加密还是对称还是非对称,完全一样。不过是在另一个js文件加密的,slide文件

搜h + u就行了,再来

u和第一个加密r一样,省略

分析是o

userresponse分析

直接搜o =

t为缺口x坐标,另一个是三十四位challenge。扣代码或是补环境都比较容易。这个参数传参固定值是会变化的

rp值

忽略

aa分析

这是一大段轨迹

这是接口返回的c值

这是接口返回的s值

用补环境直接秒杀的 ,导出对象,然后传参

轨迹模拟分析

极验轨迹没有对y值进行检测,都为0也行。

其实有多公开轨迹方法都比较不错的,像这个大佬的博文

【JS逆向练习】极验三代滑块模式验证码逆向分析_极验3代滑块-CSDN博客

他的轨迹函数就非常不错。

不过我在想有一种邪修模拟轨迹方式,切割轨迹法

直接把滑块慢慢拖到底,记住要慢()

然后从网页直接获取轨迹

其实观察极验轨迹,发现一开始都是负数,然后再从0开始

一开始两个数可以这样表示

然后观察当滑块正确最后两个值,x和y值一样,时间浮动较大

坐标一样但是时间浮动比较大

所以最后一个特殊处理,时间浮动较大

至于中间可以用随机数特殊处理,比如时间,比如x坐标

完整代码

python 复制代码
  def gen_track_2(self, x):
        track = track=[[-25,-30,0],[0,0,0],[1,0,902],[2,0,926],[3,0,934],
                       [4,0,942],[5,0,958],[6,0,966],[7,0,1030],[8,0,1054],
                       [9,0,1070],[10,0,1206],[11,0,1222],[13,0,1230],[15,0,1238],[16,0,1246],[17,0,1253],
                       [19,0,1262],[20,0,1278],[21,0,1446],[22,0,1462],[23,0,1470],[24,0,1486],[26,0,1494],
                       [27,0,1510],[28,0,1518],[29,0,1526],[30,0,1542],[32,0,1726],[34,0,1737],[37,0,1745],
                       [42,1,1752],[44,1,1758],[46,2,1767],[47,3,1774],[48,3,1782],[49,3,1791],[50,3,1808],[51,3,2134],
                       [52,3,2142],[53,3,2150],[54,3,2158],[55,3,2207],[56,3,2214],[57,3,2222],[59,3,2230],[61,3,2238],[63,3,2246],
                       [64,3,2254],[65,3,2262],[66,3,2326],[67,3,2342],[69,3,2350],[72,3,2358],[74,3,2366],[75,3,2495],[76,3,2521],[77,3,2529],
                       [78,3,3006],[79,3,3119],[81,3,3134],[82,3,3150],[83,3,3158],[84,3,3166],[85,3,3647],[86,3,3662],[87,3,3678],[88,3,3735],
                       [89,3,3750],[90,3,3767],[91,3,3782],[92,3,3790],[93,3,3878],[94,3,4231],[95,3,4246],[96,3,4392],[96,2,4401],[96,1,4408],
                       [97,0,4416],[97,-1,4423],[97,-2,4448],[98,-2,4552],[98,-3,4566],[98,-4,4575],[99,-4,4584],[100,-4,4592],[100,-5,4600],
                       [101,-5,4758],[103,-6,4775],[104,-6,4783],[105,-6,5408],[106,-6,5416],[107,-6,5464],[109,-6,5470],[110,-6,5735],
                       [111,-5,5750],[112,-4,5758],[112,-3,5766],[113,-3,5782],[114,-2,5958],[116,-2,5966],[117,-1,5976],[118,-1,5982],
                       [120,-1,5991],[120,0,5998],[121,0,6006],[122,0,6209],[123,0,6215],[124,0,6224],[126,0,6240],[127,0,6294],[128,0,6310],
                       [129,0,6391],[130,0,6398],[131,0,6487],[132,0,6518],[133,0,6534],[134,0,6542],[135,0,6558],[136,0,6582],[137,0,6726],
                       [138,0,6734],[139,0,6752],[140,0,6783],[141,0,6806],[142,0,6814],[143,0,7078],[144,0,7087],[145,0,7094],[146,0,7102],
                       [147,0,7110],[148,0,7352],[149,1,7366],[150,1,7374],[151,1,7382],[153,1,7392],[154,1,7408],[154,2,7424],[155,3,7432],
                       [156,3,8079],[157,3,8089],[158,3,8558],[160,3,8566],[161,3,8582],[162,3,8590],[163,3,8606],[164,3,8614],[165,3,8807],
                       [167,3,8814],[168,3,8822],[169,3,8831],[170,3,8837],[171,3,9392],[172,3,9399],[173,3,9424],[174,3,9430],[175,3,9446],
                       [176,3,9455],[177,3,9461],[178,3,9478],[180,3,10072],[181,3,10086],[182,3,10280],[183,3,10289],[184,3,10648],[186,3,10657],
                       [187,3,10678],[188,3,11167],[189,3,11183],[190,3,11191],[191,3,11865],[192,3,11888],[193,3,12080],[194,3,12088],
                       [195,3,12151],[196,3,12288],[198,3,12303],[199,3,12312],[200,3,12326],[200,3,12326]]
        new_track = [
            [random.randint(-50, -10), random.randint(-50, -10), 0],
            [0, 0, 0]
        ]
        for i in range(len(track)):
            #前两个特殊处理
            if i==1 or i == 0:
                continue
            #前五分之一数据波动为1,只要时间波动就行
            #模拟刚加速时的正常波动,并且判断是不是相差大于二。
            if i > len(track)/5 and track[i+1][0] - track[i][0]>2:
                track[i][0] = track[i][0] + random.randint(0, 1)
            #中间模拟加速,x波动增加,时间波动变慢
            if i > len(track)/3*1 and  i < len(track)/3*4:
                track[i][0] = track[i][0] + random.randint(1, 4)
                track[i][2] = track[i][2] - random.randint(5, 10)
            #模拟时间波动
            if track[i][0]<x:
                track[i][2] = track[i][2] + random.randint(0, 1)
                new_track.append(track[i])
            #跳出
            if track[i][0] >= x:
                track[i][0]  = x
                new_track.append(track[i])
                break
        #最后一个特殊处理
        new_track.append([x, new_track[-1][1], new_track[-1][2] + random.randint(200, 400)])
        return new_track

总结

不过这个方法像机器人的分数很高,82分,通过率也很高,基本能通过,通不过就是识别出错了。基本九成以上

像用那位大佬的函数就更好了,像机器人分很低

分数就很低,就很像人为操作了。

底图还原分析

这玩意我也不懂,也是直接拿大佬公开的

底图还原函数如何定位,直接勾选画布

找到这个函数

然后问AI就行

我用大佬公开的函数

python 复制代码
from PIL import Image
import requests
import io
from io import BytesIO
IMG_SHUFFLE_ORDER = [
    39, 38, 48, 49, 41, 40, 46, 47, 35, 34, 50, 51, 33, 32, 28, 29, 27, 26, 36, 37, 31, 30, 44, 45, 43, 42, 12, 13, 23,
    22, 14, 15, 21, 20, 8, 9, 25, 24, 6, 7, 3, 2, 0, 1, 11, 10, 4, 5, 19, 18, 16, 17,
]
# 图片会被切分为 10x80 的小图
IMG_SHUFFLE_X_STEP = 10
IMG_SHUFFLE_Y_STEP = 80
# 最后图片的宽高
IMG_WIDTH = 260
IMG_HEIGHT = 160
# 根据链接下载图片
def downloadImg(url: str):
    r = requests.get(url, verify=False)
    return spliceImg(Image.open(io.BytesIO(r.content)))
def downloadImgsmail(url: str):
    r = requests.get(url, verify=False)
    with open('sliceimg.jpg', 'wb') as f:
        f.write(r.content)
def spliceImg(img: bytes):
    img = Image.open(io.BytesIO(img))
    # 创建一个图对象片
    newImg = Image.new('RGB', (IMG_WIDTH, IMG_HEIGHT))
    # 按照顺序循环 52 次
    for i in range(len(IMG_SHUFFLE_ORDER)):
        x = IMG_SHUFFLE_ORDER[i] % 26 * 12 + 1
        y = IMG_SHUFFLE_Y_STEP if IMG_SHUFFLE_ORDER[i] > 25 else 0
        # 根据刚才 JS 的逻辑,把图片裁剪出一小块儿
        cut = img.crop((x, y, x + IMG_SHUFFLE_X_STEP, y + IMG_SHUFFLE_Y_STEP))
        # 根据刚才的逻辑,确定新图片的位置
        newX = i % 26 * 10
        newY = IMG_SHUFFLE_Y_STEP if i > 25 else 0
        # 把新图片拼接过去
        newImg.paste(cut, (newX, newY))
    newImg.save('img.jpg')
    output = BytesIO()
    newImg.save(output, format='JPEG')  # 将图像保存到 BytesIO 对象中
    image_bytes = output.getvalue()
    return image_bytes

返回错误的结果

请参考这篇文章

【验证码逆向专栏】某验全家桶细节避坑总结 - 吾爱破解 - 52pojie.cn

再补充一个,w2生成时,传入参数改变了一点

像这些,

我把这个值去掉,减少一个,w2也返回success正确结果,但最终结果是错误的。可能有些值减少也不影响

怎么也不成功

我只是想说,虽然但是一般人不会在w2掉坑的,但我在w2吃过坑,我还傻乎乎一直分析w3。

相关推荐
傻啦嘿哟1 小时前
实战:爬取某联招聘职位需求并生成词云——从零开始的完整指南
爬虫
q***01652 小时前
Python爬虫完整代码拿走不谢
开发语言·爬虫·python
码农很忙2 小时前
爬虫成本优化秘籍:从零到高性价比的实战指南
爬虫
艾莉丝努力练剑6 小时前
【Python基础:语法第一课】Python 基础语法详解:变量、类型、动态特性与运算符实战,构建完整的编程基础认知体系
大数据·人工智能·爬虫·python·pycharm·编辑器
深蓝电商API13 小时前
爬虫界的 “核武器”:Splash + Scrapy 动态渲染终极方案
爬虫·scrapy·splash
Z***G47920 小时前
网络爬虫学习:借助DeepSeek完善爬虫软件,实现模拟鼠标右键点击,将链接另存为本地文件
爬虫·学习·计算机外设
烤汉堡1 天前
Python入门到实战:post请求+cookie+代理
爬虫·python
e***19351 天前
爬虫学习 01 Web Scraper的使用
前端·爬虫·学习
Hacker_Oldv1 天前
Python技能进阶:探索Selenium库,实现网页自动化测试与爬虫
自动化测试·软件测试·爬虫·python·selenium·职场和发展