大家好,我是公众号3分钟学堂的郭立员~,本文所讲内容仅供学习参考,请勿非法使用。
前言有一些验证有行为检测,是用仿人工轨迹可以挺高一些通过率。
仿人工轨迹原理
(一)脚本滑动的特征
这里我开启指针,看一下滑动的轨迹。

①、脚本滑动是一条直线。
②、脚本滑动的停顿点都是等距的,一段比较长的滑动会自动分成若干个停顿点。
③、脚本滑动时匀速的,每一段耗时都是一样的。
(二)如何去掉脚本滑动的特征
①、分段滑动,从一个点到另外一个点滑动肯定是一条直线,所以采用分段得到一条曲线。

②、解决等距的问题,就是每一个分段距离不一样。

③、匀速的问题,每一分段耗时用一个随机数代替。
下面提供一个横向滑动的范例:
- Dim x = 76, y = 800, x1 = 514
- TouchDown x, y, 1
- Do
- x = x + Int(10 * Rnd() + 2)
- If x >= x1 Then
- x = x1
- Exit Do
- End If
- TouchMove x, y + int(10*Rnd()+2), 1, int(10*Rnd()+2)
- Loop
- TouchMove x, y + int(10*Rnd()+2), 1, int(10*Rnd()+2)
- TouchUp 1
复制代码
(三)仿人工轨迹
上面的方式已经去掉了脚本滑动的特征了,但是和人工滑动还是有一些区别。

看这个滑动是不是有点奇怪,滑动的轨迹像心电图一样,上下不停的跳动,平时我们滑动除非刻意的抖动,一般来说不会画出这样的轨迹。我们平时滑动一般是缓缓向上,然后再缓缓向下,再缓缓向上,交替变化,但是交换的平缓。
Dim x =
76, y =
800, x1 =
514Dim y0 =
0, n =
1TouchDown x, y,
1Do y0 = y0 + n
If y0 >=
5 Then
n = -
1 ElseIf y0 <= -
5 Then
n=
1 End If
x = x + Int(
10 * Rnd() +
2)
If x >= x1 Then
x = x1
Exit Do
End If
TouchMove x, y + y0,
1, int(
10*Rnd()+
2)
LoopTouchMove x, y + int(
10*Rnd()+
2),
1, int(
10*Rnd()+
2)
TouchUp 1到这一步基本差不多了。后面再说一些特点,但是代码不太好写,这里就只说说思路。

这是一个手动滑动的轨迹,可以看到每次拐点的时候,停顿点的数量要比其他位置多,这是应为拐点停顿时间较长,产出的停顿点就多。还有就是起始位置和结束位置的停顿点比较多。局部也会出现一段直线,并不是说曲线里面完全没有直线。这些特征有兴趣的话也可以加在里面。