声明:本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布
目录
- 简介
- 借鉴方案&测试结果
- 端口法检测思路
- 实现方案
- 测试结果
- Demo地址
简介
最近有业务上的要求,要求app在本地进行诸如软件多开、hook框架、模拟器等安全检测,防止作弊行为。
防作弊一直是老生常谈的问题,而软件多开检测往往是防作弊中的重要一环,在查找资料的过程中发现多开软件公司对防多开手段进行了针对性的升级,即使非常新的资料也无法做到通杀。
所以站在前人的肩膀上,继续研究。
借鉴方案
借鉴方案来自以下两个帖子
《Android多开/分身检测》blog.darkness463.top/2018/05/04/…/
《Android虚拟机多开检测》www.jianshu.com/p/216d65d99…
文中的方案简单总结起来是4点 1.私有文件路径检测; 2.应用列表检测; 3.maps检测; 4.ps检测;
代码此处不贴了,这四种方案测试结果如下
测试机器/多开软件* | 多开分身6.9 | 平行空间4.0.8389 | 双开助手3.8.4 | 分身大师2.5.1 | VirtualXP0.11.2 | Virtual App * |
---|---|---|---|---|---|---|
红米3S/Android6.0/原生eng | XXXO | OXOO | OXOO | XOOO | XXXO | XXXO |
华为P9/Android7.0/EUI 5.0 root | XXXX | OXOX | OXOX | XOOX | XXXX | XXXO |
小米MIX2/Android8.0/MIUI稳定版9.5 | XXXX | OXOX | OXOX | XOOX | XXXX | XXXO |
一加5T/Android8.1/氢OS 5.1 稳定版 | XXXX | OXOX | OXOX | XOOX | XXXX | XXXO |
*测试方案顺序1234,测试结果X代表未能检测O成功检测多开; *virtual app测试版本是git开源版,商用版已经修复uid的问题;
可以看到的是,检测效果不是很理想,没有哪一种方法可以做到通杀市面排名靠前的这些多开软件,甚至在高版本机器上,多开软件完美避开了检测。
端口监听法思路
为了避免歧义,我们接下来所说的app都是指的同一款软件,并定义普通运行的app叫做本体,运行在多开软件上的app叫克隆体。并提出以下两个概念
狭义多开:只要app是通过多开软件打开的,则认为多开,即使同一时间内只运行了一个app
广义多开:无论app是否运行在多开软件上,只要app在运行期间,有其余的『自己』在运行,则认为多开 (有点《第六日》的意思,克隆人以为自己是真人,发现跟自己一模一样的人,都认为对方是克隆人)
我们前面所借鉴的四种方案,都是去针对狭