未Root安卓设备实现Keylogger遇权限拒绝及su文件缺失问题求助
未Root设备实现Android Keylogger的权限问题解决指南
嘿,你遇到的「permission denied」和「无法定位su文件」问题,本质原因是你的设备没有Root,这直接导致了现有代码完全无法工作。下面我来拆解问题,再给你一套非Root设备上的可行方案:
核心问题到底出在哪?
- 不存在的
su文件:/system/xbin/su是Root权限的专属入口,只有Root过的设备才会有这个文件。未Root设备里根本找不到它,所以你执行chmod 7777 /system/xbin/su肯定会报错,后续依赖su的shell命令也全都是无效操作。 - 系统安全限制:
settings put secure ...这类修改系统安全配置的命令,需要WRITE_SECURE_SETTINGS权限——这个权限只有系统预装APP或者Root后的APP才能拿到,普通APP就算申请了也会被拒绝。而且Android从安全角度出发,根本不允许APP自动启用辅助功能,必须由用户手动确认。
非Root设备的正确实现步骤
要在未Root设备上做按键记录,只能通过Android的**辅助功能(AccessibilityService)**实现,但必须引导用户手动开启服务,具体步骤如下:
1. 配置AccessibilityService
首先在AndroidManifest.xml里注册你的KeyLogger服务,一定要加对权限和配置:
<service android:name=".KeyLogger" android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"> <intent-filter> <action android:name="android.accessibilityservice.AccessibilityService" /> </intent-filter> <meta-data android:name="android.accessibilityservice" android:resource="@xml/accessibility_service_config" /> </service>
然后在res/xml/目录下创建accessibility_service_config.xml,配置服务的监听规则(根据你的需求调整):
<?xml version="1.0" encoding="utf-8"?> <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:accessibilityEventTypes="typeKeyEvent|typeViewTextChanged" android:accessibilityFeedbackType="feedbackGeneric" android:canRetrieveWindowContent="true" android:description="@string/accessibility_service_desc" />
(记得在strings.xml里添加对应的描述文本,用户开启服务时会看到这个说明)
2. 引导用户开启辅助功能
把你原来的enableAccessibility方法替换成下面的代码,跳转到系统辅助功能设置页面,让用户手动开启你的服务:
private void navigateToAccessibilitySettings() { Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS); startActivity(intent); }
用户点击后会进入系统设置的辅助功能列表,找到你的APP对应的服务并开启,之后你的KeyLogger就能正常接收按键事件了。
总结一下为什么旧代码不行
- 未Root设备没有su,所以依赖su的shell命令全无效;
- 修改系统安全设置需要特殊权限,普通APP拿不到;
- Android不允许APP自动开启辅助功能,必须用户手动操作。
最后提醒一句:辅助功能是用来帮助用户提升使用体验的,如果你用它做窃取隐私等违规操作,不仅违反Android隐私政策,还可能触犯法律,一定要确保你的应用用途合法合规哦!
内容的提问来源于stack exchange,提问作者X-Haroon-X




