AdGuard · 触摸检测
等待交互
广告安全 · 手机端

识别机器人的
触摸行为特征

2025-03-11 · 滑动页面或点击广告区域

自动化脚本(Appium / UIAutomator)生成的触摸事件与真人差异显著:点击时长通常不足 5ms,滑动轨迹近乎完美直线,速度恒定,横向无任何抖动。

在下方广告区域点击,或在页面上滑动,右上角评分会即时更新,底部面板展示每个维度的详细得分。

广告
📢
广告内容区域
点击触发检测

滑动时,系统计算轨迹直线程度(路径长 vs 起终点距离)、速度变异系数(CV < 0.03 判定匀速)、横向抖动的信息熵,以及 scroll 步长的标准差。真人滑动在任何一项上都与脚本存在统计显著差异。

维度一 · 轨迹直线程度

检测公式是:起终点直线距离 ÷ 实际路径总长度。真人用手指在屏幕上滑动时,即使是刻意划直线,路径也会因为手腕转动和手指压力变化产生轻微弧度,这个比值通常在 0.92 到 0.98 之间。

UIAutomator 的 swipe() 方法在内部直接用两点坐标做线性插值,生成的路径比值往往超过 0.999,在像素级别几乎是完美直线。这个差异用肉眼完全看不出来,但数学上一目了然。

维度二 · 速度变异系数

变异系数(CV)= 标准差 ÷ 均值,衡量速度的相对波动程度。真人滑动通常从静止加速、中段匀速、末段减速或惯性滑行,CV 一般在 0.15 到 0.45 之间,有明显的节奏感。

脚本生成的滑动由于是按固定时间间隔发出触摸事件,每帧移动距离几乎相同,CV 往往低于 0.03。系统将这个阈值作为"匀速判定线"——低于它意味着速度过于稳定,不符合人类运动规律。

值得注意的是,极慢的刻意滑动也可能触发这个维度,因此单维度异常不会直接判定为机器人,需要结合其他维度的综合评分。

维度三 · 横向抖动熵

对于一次近似垂直的滑动,"横向抖动"指的是每个触摸采样点偏离起终点连线的垂直距离。将这些距离序列量化后计算 Shannon 信息熵:多样性越高,熵值越大;分布越集中(比如全部接近 0),熵值越低。

真人手指因为握持角度、肌肉微颤,横向偏移通常在 2 到 15 像素之间随机分布,熵值较高。脚本生成的事件坐标严格沿直线分布,横向偏移几乎全为 0,熵值趋近于 0。当熵值低于 0.20 且采样点足够多时,系统给出强烈的机器人信号。

维度四 · Scroll 步长标准差

页面滚动时,系统记录每次 scroll 事件触发时 window.scrollY 的变化量。真人滑动因为惯性、手指抬起速度不同,每次滚动步长变化较大,标准差通常超过 10。

自动化脚本(如 Appium 的 scroll() 或 JavaScript 注入的 window.scrollBy(0, 300))每次调用的步长完全固定,标准差接近 0。这是最容易被忽视、也是最容易暴露的特征之一。

综合评分机制

四个滑动维度的分数通过加权融合得出综合可疑度:取所有维度中的最高分(权重 60%)加上均值(权重 40%)。这样设计的原因是:机器人通常在某一个维度上会有极端表现,而真人即使在某项上偶尔数值偏高,也不会所有维度同时异常。

滑动维度的分数会与点击维度(isTrusted、点击时长、触摸压力、落点重复率、触点半径)合并计算,最终评分超过 0.45 即触发机器人警告。阈值可以根据实际业务的误判容忍度调整——广告主对误判容忍度低,可以调高到 0.55;反欺诈场景要求更严格,可以降到 0.35。

局限性与对抗

纯参数检测存在固有局限:高级对抗脚本(如 Frida Hook 级别的框架)可以在触摸事件注入时加入随机抖动和变速,刻意模拟人类曲线,从而绕过基于统计阈值的检测。

更完整的防御体系通常会在此基础上叠加服务端的 IP 行为序列分析、设备指纹持久化追踪,以及点击间隔的时间序列异常检测。单点防御永远存在绕过空间,纵深防御才是正解。

不过对于绝大多数量产型广告作弊工具来说,它们追求的是规模化低成本,不会为单个页面定制对抗方案。本模块针对的正是这类工业化机器人,在这个场景下检出率可以达到 90% 以上。

检测维度
点击时长
isTrusted
触摸压力
落点重复
触点半径
直线程度
速度方差
横向抖动
scroll步长