自动化脚本防检测、防风控终极方案!

在我们编写自动化脚本实现自动化测试、rpa等任务时,有时候会遇到风险提示,检测提示,甚至有的错误防范时直接禁止执行。本人长期从事自动化脚本领域工作,从早期的按键精灵,到autojs,到现代的冰狐智能辅助,积累了不少经验,现免费分享一种防风控、防检测的终极方案,绝对真实有效,希望对大家有帮助。

检测自动化脚本的常用技术手段

1.检查root

目前几乎所有的常见app都会自动检测手机有没有root,这个很容易做到,一旦发现手机root就会将其标记为“风险”类型,过一段时间后就会被封杀,因为一般正常用户不会使用root后的手机作为日常来用。比如:按键精灵等各种精灵就是通过root手机来提供自动化能力的。

2.检查adb

ADB(Android Debug Bridge)是一个功能强大的命令行工具,它允许你与Android设备进行通信,包括安装和调试应用程序、管理文件、模拟用户输入等。利用ADB,你可以创建自动化脚本来执行一系列任务,从而模拟用户操作或进行批量管理。

一般正常用户不可能使用开启debug权限手机(一般用户也不知道如何打开debug权限),所以只要是开启debug权限的手机一定不是正常用户(99%可能是开发调试机器),所以现在基本绝大多数app只要遇到开启debug权限的就会标记为异常用户,被封杀概率极大。比如:Appium等平台就是使用adb方式提供的自动化能力。

防风控的终极方案

1.定制rom介绍

有没有一种方案可以彻底防风控呢,那就是“定制rom”方案。定制ROM通常指的是对Android操作系统源代码进行修改和重新编译,以适应特定硬件或满足特定需求的过程,简单来说就是在android系统中内置自动化脚本能力,不需要通过任何第三方硬件,也不需要adb、root、无障碍等手段,直接将自动化脚本的能力内置在操作系统中供自动化脚本调用使用。理论上来说没有任何有效的方法可以检测,而且因为是内置在系统内部,所以其权限非常大可以提供非常强大的能力,比以往任何自动化方案都强大。

2.定制rom提供的能力

  • 脚本常驻内存(不需要做任何配置),实现了真正的常驻内存,永远不会被杀掉,因为直接赋予了系统核心模块的优先级,只要手机不重启,脚本就可以一直运行。
  • 完美支持黑屏运行、随时随地亮屏和自动解锁,不会被中断,比如在我们不需要运行脚本时,直接远程控制手机黑屏,需要运行时远程控制量屏继续运行。
  • 支持直接静默杀掉任何正在运行的app。
  • 支持完美地截屏,在任何情况下都可以正确无误的截屏,非常高效率。
  • 在不开启无障碍的情况下支持获取当前界面的ui树,控件树等,更关键的是以前通过无障碍看不到的ui控件也可以看到,比如有的app的某些页面用无障碍来看是空白,没有任何控件,但是通过定制rom提供的能力,可以直接看透这些“空白”页面,显示所有的真正的控件,可以说定制rom具有一定的“透视”能力。
  • 当然最基本自动化能力也必须全部支持,比如点击、滑动、各种按键,输入文本等等。

3.哪些手机支持定制rom

一般常用的手机都支持定制rom,只要可以解锁bl就可以刷机,比如小米、华为、荣耀、oppo,vivo、一加、各种国外品牌手机等等。根据刷机难易程度、成本高低,我们推荐使用一加手机、小米手机、各种国外手机等

4.支持哪些自动化脚本平台

定制rom是一个通用的系统,不和特定的自动化脚本平台绑定,支持所有的自动化脚本平台。比如autojs、冰狐智能辅助等,都可以很容易的在定制rom上运行。

5.定制rom支持哪些api

我个人总结了下,把部分常用的定制rom的功能用冰狐智能辅助(我本人长期使用冰狐智能辅助😊)的js脚本列举出来(当然你也可以用其他平台的脚本写,原理都一样),供大家参考(由于篇幅有限,我这里只列出了一部分功能,更多的自己去研究哈)

// 灭屏
function blacken() {
    exeCommand('sleep')
}

// 亮屏
function lighten() {
    exeCommand('wakeup')
}

// 一般不需要调用,因为开启冰狐后会自动关闭锁屏功能
function unlock() {
    exeCommand('unlock')
}

// 按下home
function home() {
    exeCommand('home')
}

// 按下power
function power() {
    exeCommand('power')
}

// 按下back
function back() {
    exeCommand('back')
}

// 停止某个应用程序
function stop(packageName) {
    exeCommand('stop', {packageName: packageName})
}

// 模拟点击
function click(x, y) {
    exeCommand('click', {x: x, y: y})
}

// 模拟点击
function tap(x, y) {
    exeCommand('tap', {x: x, y: y})
}

// 模拟点击
function swipe(x1, y1, x2, y2, duration) {
    if (undefined == duration) {
        duration = 500
    }

    exeCommand('swipe', {x1: x1, y1: y1, x2: x2, y2: y2, duration: duration})
}

// 长按
function longClick(x, y) {
    exeCommand('longClick', {x: x, y: y})
}

// 开启改输入法后才能使用iputText输入中文
function enableIME(enable) {
    exeCommand('enableIME', {enable: enable})
}

// 输入文本
function inputText(text) {
    exeCommand('inputText', {text: text})
}

// 剪切
function cut() {
    exeCommand('cut')
}

// 拷贝
function copy() {
    exeCommand('copy')
}

// 粘贴
function paste() {
    exeCommand('paste')
}

// 音量+
function valumeUp() {
    exeCommand('valumeUp')
}

// 音量-
function valumeDown() {
    exeCommand('valumeDown')
}

// up
function up() {
    exeCommand('up')
}

// down
function down() {
    exeCommand('down')
}

// left
function down() {
    exeCommand('left')
}

// right
function down() {
    exeCommand('right')
}

// ok
function ok() {
    exeCommand('ok')
}

// enter
function enter() {
    exeCommand('enter')
}

// delete
function del() {
    exeCommand('delete')
}

// space
function space() {
    exeCommand('space')
}

// tab
function tab() {
    exeCommand('tab')
}

// key
function key(code) {
    exeCommand('key', {keyCode: code})
}

// 执行adb命令
function exeAdbCmd(code) {
    exeCommand('adbCmd', {code: code})
}

// 静默开启无障碍,静默无障碍一般不会被检测到。如果没有在打包时修改过包名就不用填packageName。
function enableAccessibility(packageName) {
    if (strIsEmpty(packageName)) {
        packageName = 'com.libra.aznfz';
    }
    exeCommand('enableAccessibility', {enable: true, classPath: packageName + '/com.libra.sar.robot.RobotService'})
}

function exeCommand(cmd, params) {
    if (strIsNotEmpty(cmd)) {
        var intent = new Intent();
        intent.setAction('com.android.smart.ACTION_COMMAND').setPackageName('com.android.settings');
        intent.putExtraData('cmd', cmd);
        if (params) {
            for (var key of params) {
                intent.putExtraData(key, params[key]);
            }
        }
        sendBroadcast(intent)
    }
}

总结

本文介绍了定制rom的各种强大功能,可以cover住几乎所有常见场景,定制rom的出现为自动化脚本领域注入了新鲜血液,是自动化脚本领域防风控的一种终极解决方案。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值