吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 28420|回复: 59
上一主题 下一主题
收起左侧

[其他原创] 【按键精灵】根据滑块验证的特征破解斗鱼客户端滑动验证码

  [复制链接]
跳转到指定楼层
楼主
打字的小强 发表于 2019-2-17 14:35 回帖奖励
本帖最后由 打字的小强 于 2019-4-29 21:00 编辑

应该是独创吧,反正没人跟我一样,就是速度有点慢(1分钟左右),而且成功率不是百分百,分享一下,百度了一下,五花八门,大多数讲的不详细,要么太高深,人工智能训练,灰度化图片,按键精灵好像不能够实现吧,自己研究研究吧。
先找到一个有滑动验证码的app,百度了一下,就是斗鱼了。
斗鱼登陆界面->忘记密码里面->手机号找回

分析特征,找到思路再来写代码。
粗略说下思路再仔细分解,1。分析要滑动的图片的高度,就是纵坐标位置,2,分析要滑动的图片的横位置,3,空缺的位置,4,滑
第一步确认要滑动的图片的最上面的Y坐标。最下面的Y坐标,就是高度,以确定要滑动的图片中线在哪里,找中心就是确定要滑动的图片具体的位置在哪里。
模拟器分辨率设置如图,首先科普一下X坐标是横着的,Y坐标是纵的,最左上角的坐标是0,0。先确定整个图片的大小,等下要用,左上角是140,381,右下角是399,540,得出结论,这个图片高度是540-381=159。


找到要移动图片的规律,我找到的规律就是图片周围有点黑。有点黑怎么用脚本表达呢?用到按键精灵两个命令综合运用,GetPixelColor和ColorToRGB。GetPixelColor是获取指定颜色,ColorToRGB是分解颜色成RGB,黑色的RGB是#000000。
接下来写一个函数
[Asm] 纯文本查看 复制代码
 Function sumc(x, y)
// 获取指定点颜色
rColor = GetPixelColor(x, y, 0)
//分解成RGB三个值
ColorToRGB rColor, r, g, b
//计算三个值得和,后面获取很多的点的分解成RGB三个值和对比
res=  r+g+b
End Function

这个函数的内容是计算某个点的RGB的三个值和
接下来找到要移动的图片的上限在哪里,就是Y坐标值
可以从图片中看出来这个图片的总是在按钮的正上方,横坐标是160,遍历这条线上所有的点的RBG值,和最小的地方就是要移动的图片的最上面的地方(大多数是最上面,有时候会找的是最下方,这就是为什么不会百分百成功,等下会做下判断),这条线多长呢?就是最开始找的图片Y范围,整个图片的左上角位置的Y坐标到右下角的Y坐标值。381到540。

写代码

[Asm] 纯文本查看 复制代码
//取最上面的点的RGB三个点的值
sumc (160, 381)
mix = res
For i = 381 To 540
        sumc 160, i
//        依次对比,比取第一点还小,就更新一下最小值,遍历完成就找到了最小值。
If mix > res Then 

        mix = res
//        找打的最小的值对应的i值就是要找的最黑的地方的Y坐标值,也就是要移动的图片最上面的地方
        mixr = i
End If
Next

Dim mtop= mixr
TracePrint "要移动的图片的上限Y坐标"&mtop


第二步,图片最上面的坐标找到,接下来找最下面,最下面,就好找点,不会遍历381到540的范围,而是根据测量最下边的Y的坐标范围是最上边的Y坐标+40到最上边的Y坐标+120,(如果上一步刚找到的坐标是最下边,那么最上边的Y的坐标范围是最上边的Y坐标-120到最上边的Y坐标-40)

写代码
[Asm] 纯文本查看 复制代码
fx1 = mtop +40
fx2 = mtop+120

sumc (160, fx1)
 mix = res


For i = fx1 To fx2 
        sumc (160, i)
If mix > res Then 
        mix = res
        mixr = i
End If
        
Next
TracePrint "要移动的图片的下限Y坐标"&mixr
Dim mlow  = mixr

 mali = Fix((mtop+mlow)/2)
TracePrint "要移动的图片中线坐标Y坐标"&mali        

现在求到要移动的图片中线坐标Y坐标,在求这条中线上要移动的图片最左边X坐标。要移动的图片最左边X坐标的范围是140到140+30=170的范围内,在这个范围内找最黑的地方,这个绝对没错的,140是最开始测得的整个图片左上角的横坐标X的值,170看图就知道了。

代码如下
[Asm] 纯文本查看 复制代码
sunc (140, mali)
 mix = res
For i = 140 To 170
                sunc (i,mali)
If mix > res Then 
        mix = res
        mixr = i
End If
Next
h1=mixr
TracePrint "要移动的图片最左边X坐标"&mixr



第三步,找到空缺位置,空缺图片的X位置在140+50=190到399的位置,在这个范围内找最黑的地方,(这个地方可能会出错,也就是可能会识别要移动的图片突出的地方,这个范围可能会识别到要滑动的图片突出的地方,或者找到空缺的最右边的地方,这些例外几率比较小,暂时没有找打什么好的解决办法)

写代码
[Asm] 纯文本查看 复制代码
sumc (190, mali)
 mix = res
For i = 190 To 399
                sumc (i,mali)
If mix > res Then 
        mix = res
        mixr = i
End If
Next
h2=mixr
TracePrint "空缺的位置的最左边X坐标"&mixr

最后一步就是移动,按键精灵最简单的Swipe命令式不能使用的,app会判断是机器操作还是人工操作,因为Swipe命令滑动的过程不是一个人能滑出来的,很快很匀速。所以要用到紫猫插件的超级滑动命令,所有的参数都要用上,才能正真的识别成人工滑动的

[Asm] 纯文本查看 复制代码
moveto = h2-h1
TracePrint "要移动的距离为"&moveto

zm.Swipe  (154, 825, 154+moveto, 825,200,3,-100,-1,true)


总结一下一下,所有代码,代码量不多,写的有点仓促,乱乱的,封装一下函数,变量名改一下比较好看一点。亲测能够成功,有点问题还不知道怎么解决,可以集大家的智慧,提供下思路,给我指点一下也可以,所以不能说百分百成功,总之功能能够实现,很开心哈。
[Asm] 纯文本查看 复制代码
Import "zm.luae"
Dim x,y,rColor,res,mix,mixr,r,g,b,fx1,fx2, mali,h2,h1,moveto,网络时间
 Function sumc(x, y)
// 获取指定点颜色
rColor = GetPixelColor(x, y, 0)
//分解成RGB三个值
ColorToRGB rColor, r, g, b
//计算三个值得和,后面获取很多的点的分解成RGB三个值和对比
res=  r+g+b
End Function

网络时间=GetNetworkTime()
Traceprint 网络时间

//取最上面的点的RGB三个点的值
sumc (160, 381)
mix = res
For i = 381 To 540
        sumc 160, i
//        依次对比,比取第一点还小,就更新一下最小值,遍历完成就找到了最小值。
If mix > res Then 
        mix = res
//        找打的最小的值对应的i值就是要找的最黑的地方的Y坐标值,也就是要移动的图片最上面的地方
        mixr = i
End If
Next

Dim mtop= mixr
TracePrint "要移动的图片的上限Y坐标"&mixr
fx1 = mtop +40
fx2 = mtop+120
sumc (160, fx1)
 mix = res
For i = fx1 To fx2 
        sumc (160, i)
If mix > res Then 
        mix = res
        mixr = i
End If
        
Next
TracePrint "要移动的图片的下限Y坐标"&mixr
Dim mlow  = mixr
 mali = Fix((mtop+mlow)/2)
TracePrint "要移动的图片中线坐标Y坐标"&mali
        
sumc (140, mali)
 mix = res
For i = 140 To 170
                sumc (i,mali)
If mix > res Then 
        mix = res
        mixr = i
End If
Next
h1=mixr
TracePrint "要移动的图片最左边X坐标"&mixr

sumc (190, mali)
 mix = res
For i = 190 To 399
                sumc (i,mali)
If mix > res Then 
        mix = res
        mixr = i
End If
Next
h2=mixr
TracePrint "空缺的位置的最左边X坐标"&mixr

moveto = h2-h1
TracePrint "要移动的距离为"&moveto
zm.Swipe  (167, 575, 167+moveto, 575,200,3,-100,-1,true)
网络时间=GetNetworkTime()
Traceprint 网络时间

QQ截图20190217135249.png (83.31 KB, 下载次数: 12)

QQ截图20190217135249.png

免费评分

参与人数 10吾爱币 +14 热心值 +8 收起 理由
CrazyNut + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
threekidney + 1 + 1 辛苦了
混沌猪八戒 + 1 + 1 我很赞同!
2264482522 + 1 我很赞同!
wyw211532 + 1 + 1 我很赞同!
smile1110 + 1 谢谢@Thanks!
那一年的白洁啊 + 1 用心讨论,共获提升!
chenai2016 + 1 + 1 大神斗鱼不是会封按键精灵等的宏吗??
错误的思路 + 1 大神,接脚本的单子吗
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
刹那光华 发表于 2019-11-2 23:18
这个我用的滑块验证拖动。效果还行。x轴分段。y轴小范围不规则偏移

[Lua] 纯文本查看 复制代码
Function 滑动拼图(X1, Y1, X2, Y2, 延迟)
    Dim 时间 = TickCount()
    Dim 次数 = Int((X2 - X1)/100)
    TracePrint "次数",次数
    Dim 步进 = Int((X2 - X1)/次数)
    TracePrint "步进",步进
    Dim 延时 = Int(延迟/(次数+3))
    TracePrint "延时",延时
    Dim Px(),Py(),Pt()
    Px(0) = X1
    Py(0) = Y1
    Pt(0) = 延时
    For i = 1 To 次数
        Px(i) = Int(Px(i - 1) + 步进 + cy.RndNum(-30, 30))
        Py(i) = Int(Py(i - 1) + cy.RndNum(-10, 10))
        Pt(i) = cy.RndNum(Int(延时 * 0.8), Int(延时 * 1.2))
    Next
    TouchDown Px(0), Py(0), 0
    Delay Pt(0)
    TracePrint "按下",Px(0), Py(0),Pt(0)
    For i = 1 To 次数
        TouchMove Px(i), Py(i), 0, Pt(i)
        TracePrint "滑动",Px(i), Py(i), Pt(i)
    Next
    TouchMove X2, Y2, 0, 延时
    TracePrint "归位",X2, Y2, 延时
    Delay 延时
    TouchUp 0
    TracePrint "滑动耗时",TickCount() - 时间
End Function
沙发
冥风 发表于 2019-2-17 14:42
3#
like钱 发表于 2019-2-17 15:27
4#
_小白 发表于 2019-2-17 16:32
谢谢楼主分享
5#
xuanxingkong 发表于 2019-2-17 18:08
一直不会用按键精灵,看到标题就来学习下
6#
1.shui 发表于 2019-2-17 19:15
谢谢分享,好方法
7#
Super丶咖啡 发表于 2019-2-18 00:08
先收藏下,拿来以后做参考
8#
 楼主| 打字的小强 发表于 2019-2-18 08:30 |楼主
like钱 发表于 2019-2-17 15:27
这么费劲直接用打码平台不就好了吗

自己的东西才是好东西啊
9#
Quincy379 发表于 2019-2-18 14:46
没分了,下次给你!
10#
单人床 发表于 2019-3-4 23:30 来自手机
先确定图片阴影处,鼠标按下向右拖动一点,识别阴影是否被覆盖,没有则继续循环
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 21:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表