autojs简介与对抗

前言

最近发现现在大多安卓工具很多都是autojs和按键精灵等这些非常易于开发的工具来做黑灰产自动化工具,此帖也是由此做为出发点来展开说说这个autojs,我们如何去做对抗。由于笔者对这块也是刚了解学习不久而且这篇帖子也会说的很简单,有很多不足的地方或者解释不充分还请大佬们指出。

autojs介绍与版本

autojs介绍

我们知道使用js来编写一个apk是多么的爽,ui部分不使用xml,代码部分不使用Java,全程使用js来编写对刚入门想要开发一款安卓应用来说是一件非常方便易学的事,所以就有了autojs这么一款工具。

是的,我也觉得autojs这款工具对于老人难以进行复杂的操作和子女进行微信视频提供了很大的帮助,具体有没有人这样做我也不知道。

autojs版本

autojs的版本还是分得比较多,现在常用版本分为:autojs4.1、 autojs pro7、autojs pro 8、autoxjs(此帖子也是围绕这个版本来的)但是本身autojs的作者已经不更新了,并且这个开源项目也已经删除,原因是这款工具被太多的黑灰产利用了。还有一些其他的版本,但是主流还是上面那4个版本用的比较多,其中pro7和pro8都是收费版但是现在都被破解了。现在还在更新和维护的是autoxjs。

autojs原理

1.这个软件的ui界面并不是由js写的。是这个软件提供了一个可以编写界面的js环境。这个软件本身的界面是由Java和Android XML编写的。
2.这是利用了AccessibilityService的API。参见AccessibilityService的getRootInActivieWindow()函数。
common模块提供了其他各个模块的公用类、工具等,例如一些数据结构、View工具类等。是其他各个模块的依赖。
automator模块实现了自动操作的大部分内容。包括选择器的实现、简单操作的实现、控件节点的封装等。是autojs模块的依赖。
autojs模块是Auto.js的JavaScript运行环境,包括脚本引擎的封装,核心运行库的实现,对JavaScript层暴露的API,JavaScript和Java的交互。同时提供了管理运行的JavaScript脚本的服务。
app模块是界面、业务逻辑。依赖autojs模块。
项目主要需要Android基础,和uiautomator基础没有太大关系

执行流程

由于现在的autojs版本没有做太多混淆处理,而因为他本身就是一款模拟点击的app,我们去做分析的话可能不会有太多价值,比较源码里面也都是模拟点击的api,后续我们对抗肯定也不会从模拟点击的api入手,所以这个执行流程我简化为:读js代码-->有加密则执行解密-->先转换ui部分代码为xml代码再转换js代码为art字节码-->对界面做展示。

文件结构

怎么去判断一个apk是autojs开发的只需要找assets/project有js文件和一个json文件就可以判断,其次就是看libc库,里面有
"libjackpal-androidterm5.so",
"libjackpal-termexec2.so"
这两个也可以确定是autojs开发的app

解密js

如果加密过的js肯定会执行解密,这里我们可以从两个地方进行hook拿到解密后的js

 

其实这两个点都可以做一个hook,我自己做的一个小工具也是把这两个点做了hook,首先就是第一个函数StringScriptSource这个点,他会传入两个String参数,一个是解密的文件名一个是解密后的js,可以把解密后的文件名和js做保存。

 第二个就是解密的函数,如果hook解密的函数需要对返回值做转换然后保存即可,直接在这个函数做hook后面的逻辑我们也不用管。

这两个点就已经可以拿到源码了,如果做了加固,再换以下classloader即可,这边贴出使用xposed做的hook

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

public void de_autojs(ClassLoader classLoader) {

    XposedHelpers.findAndHookConstructor("com.stardust.autojs.script.StringScriptSource", classLoader, java.lang.String.class, java.lang.String.classnew XC_MethodHook() {

        @Override

        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {

            super.beforeHookedMethod(param);

            XposedBridge.log("xiaoc----StringScriptSource" + param.args[0].toString());

            //XposedBridge.log("xiaoc----StringScriptSource"+param.args[1].toString());

            mainhook.main(param.args[1].toString(), param.args[0].toString());

        }

        @Override

        protected void afterHookedMethod(MethodHookParam param) throws Throwable {

            super.afterHookedMethod(param);

        }

    });

    XposedHelpers.findAndHookMethod("com.stardust.autojs.engine.encryption.ScriptEncryption", classLoader, "decrypt"byte[].class,

            int.class,

            int.classnew XC_MethodHook() {

                @Override

                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {

                    super.beforeHookedMethod(param);

                }

                @Override

                protected void afterHookedMethod(MethodHookParam param) throws Throwable {

                    super.afterHookedMethod(param);

                    String str = mainhook.bytesToString((byte[]) param.getResult());

                    XposedBridge.log("xiaoc_ScriptEncryption" + str);

                    mainhook.main(str, "de");

                }

            });

}

对抗思路

虽然我们上面拿到了源码,但我一开始也说了我们即使拿到源码也看不出东西全是autojs模拟点击的方法,如果要做对抗我们应把重点放到无障碍服务与风控上。

这也是我的主要对抗思路,下面介绍几种思路。

1.无障碍列表可疑应用

获取已开启无障碍的应用,通过入口函数来查看,包含autojs字样或者stardust字样,直接闪退即可,但是使用这种方法也得考虑自己的用户场景,有误杀的可能,最好结合多种来进行检测。也可进行动态检测,如果发现此款app后端发现是黑灰产工具,也可以直接闪退(笔者有点不成熟,最好不不要使用哈哈,会有更好的检测手段)

1

ResolveInfo{ea35d2a org.autojs.autoxjs.v6/com.stardust.autojs.core.accessibility.AccessibilityService m=0x108000}

2.主动抛出异常

上面的介绍图中说到,AccessibilityService这个是无障碍服务,如果没有这个服务我是实现不了模拟点击的,我们可以通过主动抛出异常,来检测控件是否被Accessibility控制按下或者滑动。

 

 

通过以上两张图,我们已经可以很形象的看出来,通过轨迹特征来判断一个app被自动化脚本操作检测起来是多么简单事

4.群控、按部就班

如果被群控了,那么肯定是多个用户在一个比较集中的时间内开始作业,而他们的作业路径非常统一都是按部就班的执行一切操作,此时我们可以先把这批账号拉入监控名单,一旦触发可直接封

总结

其实现在大厂的检测很多都是做的风控检测,也就是后面所说的两种,但肯定是远远不止这两种,主要还是围绕着来做,说起来简单做起来难,现针对模拟点击也没有一个很好的针对客户端来做检测,包括按键精灵、触动精灵等脚本等工具。总结下来还是做好风控。

笔者废话

整篇看下来很简单,内容也不多,都被简化了而且也挺多没提到,就好比无障碍这个服务是如何去调用并实现点击功能的整条链路,或许如果能去学习下无障碍这个服务怎么实现的一个点击或者说阅读autojs的源码会有更好的对抗思路,文章很简单,笔者也是做一个记录,后面如果有更好的客户端检测手法也会给读者们贡献出来,让这个圈子更卷

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/250437.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】认识数据结构 (通俗解释)

目录 1.认识数据结构 1.1 什么是数据结构 1.1.1 什么是数据? 1.1.2 什么是结构? 1.1.3 通俗比喻: 1.1.4 标准概念概念定义: 1.2为什么需要数据结构? 1.认识数据结构 1.1 什么是数据结构 数据结构是由"数…

【Springcloud篇】学习笔记二(四至六章):Eureka、Zookeeper、Consul

第四章_Eureka服务注册与发现 1.Eureka基础知识 1.1Eureka工作流程-服务注册 1.2Eureka两大组件 2.单机Eureka构建步骤 IDEA生成EurekaServer端服务注册中心,类似于物业公司 EurekaClient端cloud-provider-payment8081将注册进EurekaServer成为服务提供者provide…

【QT】贪吃蛇小游戏 -- 童年回忆

成品展示 项目分析: 🐍基本元素如下 🐍小蛇的设计,初始大小蛇头占一个方块,蛇身占两个方块。 🐍关于小蛇的移动,采用蛇头前进方向增加一个方块,蛇尾减掉一个方块的实现方法。 &#…

yum命令下载出现Failed to synchronize cache for repo ‘AppStream‘, ignoring this repo.

修改下面的配置文件 问题: cd /etc/yum.repos.d 修改下面四个文件 vim CentOS-Base.repo vim CentOS-AppStream.repo vim CentOS-Extras.repo vim CentOS-PowerTools.repo测试yum是否正常 yum -y install wget

Linux 高并发服务器

多进程并发服务器 使用多进程并发服务器时要考虑以下几点&#xff1a; 父进程最大文件描述个数(父进程中需要close关闭accept返回的新文件描述符)系统内创建进程个数(与内存大小相关)进程创建过多是否降低整体服务性能(进程调度) server /* server.c */ #include <stdio…

8.DNS域名解析服务器

目录 1. 概述 1.1. 产生原因 1.2. 作用&#xff1a; 1.3. 连接方式 1.4. 因特网的域名结构 1.4.1. 拓扑&#xff1a; 1.4.2. 分类 1.4.3. 域名服务器类型划分 2. DNS域名解析过程 2.1. 分类&#xff1a; 2.2. 解析图&#xff1a; 2.2.1. 图&#xff1a; 2.2.2. 过…

Entity实体设计

Entity实体设计 &#x1f4a1;用来和数据库中的表对应&#xff0c;解决的是数据格式在Java和数据库间的转换。 &#xff08;一&#xff09;设计思想 数据库Java表类行对象字段&#xff08;列&#xff09;属性 &#xff08;二&#xff09;实体Entity编程 编码规范 &#x1f4a…

IDEA JDBC配置

一、在pom中添加依赖 <dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency></dependencies> 然后同步一下 二、编写代码…

Ubuntu18.04安装Matlab流程笔记

提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 Ubuntu18.04 安装Matlab流程 下载安装包和破解文件安装Matlab注册并运行 下载安装包和破解文件 matlabR2019A源码 提取码:2ztb 下载的Linux matlab2018a文件夹内有三个文件&#xff1a; # 解压Matlab201…

vue-3d-model

vue-3d-model - npm GitHub - hujiulong/vue-3d-model: &#x1f4f7; vue.js 3D model viewer component 通过该插件降低Threejs的使用难度 vue项目加载三维模型&#xff0c;我把模型放在了服务器的tomcat里面&#xff0c;需要对tomcat的fbx项目文件夹设置跨域&#xff0c;如…

关于破解IDEA后启动闪退的问题

问题描述&#xff1a;2023.1启动不了&#xff0c;双击桌面图标&#xff0c;没有响应。 解决办法&#xff1a; 打开C:\Users\c\AppData\Roaming\JetBrains\IntelliJIdea2023.1\idea64.exe.vmoptions 这个文件。 内容如下所示&#xff1a; 删除红框的数据以后&#xff0c;再登录…

算法41:掉落的方块(力扣699题)----线段树

题目&#xff1a;https://leetcode.cn/problems/falling-squares/description/ 在二维平面上的 x 轴上&#xff0c;放置着一些方块。 给你一个二维整数数组 positions &#xff0c;其中 positions[i] [lefti, sideLengthi] 表示&#xff1a;第 i 个方块边长为 sideLengthi &…

Docker 阿里云镜像仓库CR使用实践

一、使用容器镜像&#xff0c;查看镜像&#xff0c;创建&#xff0c;推送&#xff0c;拉取阿里云镜像 CR镜像管理&#xff08;阿里云容器镜像服务&#xff08;Container Registry&#xff09;&#xff09; 登录实例 未创建的镜像名称也可以push、docker的私有仓库需要提起创建…

[.NET] 查询当前已安装所有 Win32 与 UWP 应用

为了获取当前设备用户已安装的所有应用程序, 一般来讲有两种方案. 一种是通过查询 “shell:AppsFolder” 目录下所有项, 一种是从开始菜单中获取所有快捷方式, 然后加上查询所有已安装的 UWP 应用, 最后得到总列表. 如需代码参考, 请看 github.com/SlimeNull/WindowsAppsQuery …

基于Web停车场管理系统

技术架构&#xff1a; Spring MVC JSP MySQL 有需要该项目的小伙伴可以私信我你的Q。 功能描述&#xff1a; 基于Web停车场管理系统主要用于实现停车场相关信息管理&#xff0c;基本功能包括&#xff1a;系统信息管理模块、车位信息管理模块、IC卡信息管理模块、固定车主…

【PaddleSpeech】语音合成-男声

环境安装 系统&#xff1a;Ubuntu > 16.04 源码下载 使用apt安装 build-essential sudo apt install build-essential 克隆 PaddleSpeech 仓库 # github下载 git clone https://github.com/PaddlePaddle/PaddleSpeech.git # 也可以从gitee下载 git clone https://gite…

后端软件三层架构

一、三层架构简介 三层架构是软件开发中广泛采用的一种经典架构模式&#xff0c;其核心价值在于通过清晰的任务划分来提高代码的可维护性和重用性。具体来说&#xff0c;三层架构主要包括以下三个层次&#xff1a; 持久层&#xff08;DAO层&#xff09;&#xff1a;这一层主要…

设备的层次结构 - 驱动程序的复杂层次结构

由于设备对象的水平结构和垂直结构&#xff0c;组成了Windows设备的树形结构图。在Windows中出事的时候会有一个根设备&#xff0c;为了理解简单&#xff0c;我们将PCI总线想象成根总线&#xff08;根总线其实不是PCI总线&#xff0c;只是为了理解方便&#xff09;。查到PCI总线…

京东物流基于 StarRocks 的数据分析平台建设

作者&#xff1a;京东物流 数据专家 刘敬斌 小编导读&#xff1a; 京东集团 2007 年开始自建物流&#xff0c;2017 年 4 月正式成立京东物流集团&#xff0c;截至目前&#xff0c;京东物流已经构建了一套全面的智能物流系统&#xff0c;实现服务自动化、运营数字化及决策智能化…

基于WordPress开发微信小程序1:搭建Wordpress

2年前&#xff0c;在知乎上提问&#xff1a;多数公司为什么宁愿自研也不用wordpress二次开发建站&#xff1f; - 知乎 (zhihu.com)&#xff0c;收到了&#xff0c;很多回答 自己打算做一下提升&#xff0c;便有了自己基于wordpress开发微信小程序的想法 项目定位 基于wordpre…