Android密钥logging器

简介:我想在Android安全性上创build一个POC,它需要确定是否有任何KeyLogger在Android设备上运行。 如果它正在运行或安装在设备上,那么在我的Android应用程序中禁用它。

查询:

1)这是可能创buildAndroid键盘logging器拦截键盘事件,并作为服务在后台运行?

2.)这是否有可能确定是否有任何后台进程handelling键盘事件?

3.)我可以通过我的应用程序代码来阻止任何其他后台服务(不属于我)吗?

如果有的话,请帮助我提供合适的链接。

Solutions Collecting From Web of "Android密钥logging器"

我知道这个问题已经有了一个可以接受的答案,但我不同意接受的答案!
这可以通过可访问性API在android中完成。
看看下面的程序:

types机器

它使用可访问性API,并正确地存储您在任何应用程序中键入的每个关键笔划,这本质上是一个关键logging器的function!
编辑:我不完全确定TypeMachine使用什么,但你应该能够使用此方法获取辅助function服务的文本。 例如,下面的代码可以用来获得一个新的文本:

void onViewTextChanged(AccessibilityEvent accessibilityEvent, AccessibilityNodeInfo accessibilityNodeInfo) { List text = accessibilityEvent.getText(); CharSequence latestText = (CharSequence) text.get(0); Log.i(MY_TAG, latestText.toString()); } 

经过一整天的研究,我得出了下面的结论。

Android不允许您拦截来自后台服务的默认软键盘input。 拦截这些事件的唯一方法是自定义键盘。

我总结如下:

在后台服务中不支持键盘事件的Android密钥logging。 一些链接如下:

第1点: Google Android开发者

由于软input方法可以使用多种创造性的方式input文本,因此不能保证在软键盘上的任何按键都会产生关键事件:这由IME自行决定,事实上发送这种事件是不鼓励的。 您绝不应该依赖于在软input方法上接收KeyEvent。 特别是,默认的软件键盘决不会将任何按键事件发送到任何目标为Jelly Bean或更高版本的应用程序,并且只会发送一些按下删除和返回键的事件给目标冰淇淋三明治或更早的应用程序。

http://developer.android.com/reference/android/view/KeyEvent.html

Android Jelly Bean是:4.1至4.3.1 Android IceCream Sandwich:4.0

软input方法上的按键不需要触发这个监听器中的方法,事实上也不鼓励这样做。 默认的安卓键盘不会触发任何lockingJelly Bean或更高版本的应用程序的任何键,而只会将其按键传送给目标为冰淇淋三明治或更早版本的应用程序。

http://developer.android.com/reference/android/text/method/KeyListener.html

第2点:堆栈溢出KeyEvents只能由活动来处理,因为它们是用户按键的界面,只有当它们位于前景中时才是如此。 即使在后台运行的服务也不打算对用户input做出反应。

Android – 在后台按硬键的监听器

是否有可能创build一个监听硬件按键的Android服务?

第3点:为Google工作的Romain Guy Romain Guy( https://stackoverflow.com/users/298575/romain-guy )也在服务中确认onKeyDown? (全球热键)

第4点 :其他参考:

Google android-developers组: https : //groups.google.com/forum/#!topic/ android-developers/o– GUWmqXdI

它只能通过使用自定义键盘来完成: 得到按键,并在android中抛出另一个键

如果您认为我错过了任何东西,请添加您的评论。