我的编程空间,编程开发者的网络收藏夹
学习永远不晚

AccessibilityService实现今日校园自动签到/守护进程/定时自动唤醒/自动解锁/绕过Android系统解锁

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

AccessibilityService实现今日校园自动签到/守护进程/定时自动唤醒/自动解锁/绕过Android系统解锁

今日校园自动签到/守护进程/定时自动唤醒/自动解锁

本人是长江师范的大三狗,闲来无事,就对今日校园下了狠手,

写这个app研究了大量地Android源码,结构体系,弄了几天真的是煞费苦心,

说实话对我这个大三狗的Android个人开发经验提升蛮大的。

另外本人还发现了Android一个有趣的漏洞,在自动解锁提到,

可以对这个漏洞进行一个自己想法拓展,有兴趣的朋友可以看看。

以下内容仅供学习,切勿用于商业用途。

源码地址:https://github.com/dingyadong/TodayScampusAutomaticSignIn

喜欢的老哥点个star吧!

本项目由AccessibilityService服务开发实现了一下几大功能: 自动签到:

功能主要通过AccessibilityService服务进行自动化操作,
每个同学的签到过程可能不一,有些同学可能需要拍照或者点击其他按钮,可以在源代码中适当修改一下。

保活进程/定时拉活

主要采用的BroadcastReceiver以及AlarmManager搭配定时广播保活方式守护进程,
做这个保活进程的很大一部分原因是因为,高版本的Android系统采用了进一步的优化省电策略,
用户在一段时间没有操作后,进程会被自动杀死,为了保证我们的app能够顺利得进行自动化签到,
就必须要进行进程保活。这个主要是到达指定的精确时间,自动拉活我们的程序。

定时自动唤醒

这个功能不用多解释,主要是AlarmManager定时服务来唤醒手机,
android8.0及以上版本在对手机息屏后都CPU都会进入休眠状态,
所有的线程、广播、服务都会停止。
这一块功能主要解决了AlarmManager定时不准确的问题,能适应手机相应的版本

自动解锁

出现的问题

这一块功能相当费劲,原本我想通过让app自动解锁打开第三方软件的,
但是手机在有密码锁或者指纹锁等锁的权限时,息屏无法打开第三方(今日校园)的软件,
只能打开本软件的activity,主要是因为android的安全性,无法完成这一些操作;
最后实验无果,换了种思路就是手机在没有密码锁(或人脸锁等)实现自动解锁,
但是在这种情况(没有密码锁的时候)手机依然是需要上滑解锁的,
为了解决这个问题我想了很多的办法。

失败的思路

比如用adb shell命令, 或者用AccessibilityService服务的GestureDescription来实现锁屏时上滑解锁,
其实这里有很大的坑,就是adb shell命令无法在手机息屏时执行,
需要root权限,而ROOT对于用户体验太差,就果断放弃了这种思路;
利用GestureDescription手势解锁也有特别大的坑,因为上滑解锁的要求是非常高的。
因为谷歌考虑到手机放在裤包里或手提包里时上滑解锁可能会误触解锁, 所以手势解锁解锁必须要有一个加速度
也就是说滑动的时候要保持一个加速度的问题,但是GestureDescription无法设置加速度,换一种角度来说就是太麻烦了;
所以我又放弃了这种思路,程序员是干什么吃的?就是要有钻研精神,就算翻互联网一个底朝天我也要弄出来!
最后我又去CSDN和Android的源码研究了一下解锁过程。

解决的过程

功夫不负有心人,正当我快被这个崩溃时发现了KeyguardManager这个宝藏,来看以下代码:

KeyguardManager km= (KeyguardManager) context.getSystemService(KEYGUARD_SERVICE);
KeyguardManager.KeyguardLock kl = km.newKeyguardLock("unLock");
//解锁
kl.disableKeyguard();

kl.disableKeyguard()的方法我去android API了解了一下,
他其实并不是解锁屏幕,而是把锁屏功能给禁用了。
锁屏界面其实就是一个activity
CSDN很多博主都说disableKeyguard()是解锁方法,其实这个是大错特错!
通过disableKeyguard()我们就可以实现在锁屏中显示我们的app,
但是disableKeyguard()有个很严重的问题就是,
使用此方法会禁用手机home键、菜单键、以及返回键。
为什么呢?因为谷歌担心你在使用此方法禁用锁屏界面时,绕过锁屏去触犯用户的隐私,
所以上滑解锁其实也阻碍了很多APP绕过解锁去执行一些违规操作,
但是谷歌他万万没想到我是谁?长师界的Jon Skeet(国外很火的一个编程大神).
不好意思ヽ(≧□≦)ノ我这个人太自恋了。。。

我竟然发现了Android一个奇怪的漏洞:

我们让app通过BroadcastReceiver自动唤醒手机以后禁用解锁, 然后拉活我的app软件加载到主界面中,
主界面跳转到第三方今日校园app,
今日校园完成一系列自动签到后是无法返回到home主界面的,
因为home键是被disableKeyguard()方法给禁用了, 怎么办了?我又是翻遍了整个互联网,
正当千钧一发之际,我脑袋里突然来了灵感,
AccessibilityService不是有那个模拟的全局home键吗?
他可不可以绕过disableKeyguard()去打开home呢?
说时迟那时快,吭吭吭代码就已经打上去了。

AccessibilityService的GLOBAL_ACTION_HOME  

这个方法竟然能真的绕过disableKeyguard()去模拟home并回到主界面!
最神奇的还不是这个,第二天我闹钟响了,因为闹钟是在锁屏时显示的,
当时我睡意朦胧打开手机尽然发现锁屏闹钟不见了,只有锁屏界面和闹钟的声音,
等我解锁后,我发现没有地方可以关闭闹钟!?
这意味这什么?意味着我们现在是处于盗梦空间的梦中梦
意思就是我们这个锁屏之外还有一个锁屏,
然后我再通知栏找到了闹钟的提醒,我单击下去,竟然又回到了第一个锁屏界面!
这太有意思了!那么我们返回来想一想,那我们之前那个锁屏又去哪里了呢?
那么我们在拓展一下思维,去做一些....
这个技术不可言喻,免得被你们拿去做羞羞的事情,
这个谜就等你们自己去探索吧,哈哈!

手机需要的权限

无障碍服务
锁屏显示
后台弹出界面【这个权限貌似只有小米和红米有】
如果没有这个权限可能需要申请白名单,
因为我手里只有小米手机,白名单功能没写出来,
CSDN上有很多相关代码。

可能出现的问题

这个软件可能因为不同品牌导致部分功能失效,
其实我在JumpPermissionManagement这个类里面已经考虑了不同手机品牌,
但是还是有可能出现很多问题:比如某些手机的品牌不同系统可能还是不能兼容。
这个问题就需要程序员自己解决了,我只是提供一个大致的思路而已。
不懂得可以提问,我抽时间解答。
另外这个项目不定时更新,也可能会无限延期更新。
喜欢弄的老哥fork一下吧

喜欢本文的同学可以转载本文章,提供原作者文章链接:https://blog.csdn.net/qq_37377691/article/details/105827526

DeepGym 原创文章 7获赞 33访问量 3万+ 关注 私信 展开阅读全文
作者:DeepGym


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

AccessibilityService实现今日校园自动签到/守护进程/定时自动唤醒/自动解锁/绕过Android系统解锁

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

AccessibilityService实现今日校园自动签到/守护进程/定时自动唤醒/自动解锁/绕过Android系统解锁

今日校园自动签到/守护进程/定时自动唤醒/自动解锁 本人是长江师范的大三狗,闲来无事,就对今日校园下了狠手, 写这个app研究了大量地Android源码,结构体系,弄了几天真的是煞费苦心, 说实话对我这个大三狗的Android个人开发经验提
2022-06-06

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录