Android商业软件开发全程实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第1章 安全,安全,安全

1.1 Android“吸费门”事件及其思考

小安:大致博士,最近很多朋友都在问我一个关于Android手机安全的问题,因为他们的Android手机总是莫名其妙地被扣除费用,尤其是那些刷过机的朋友!据说网上很多刷机的ROM都悄悄内置了一些恶意程序,要么扣除费用,要么窃取用户的隐私数据等;还有啊,他们还说,Android一直在宣称自己是一个真正开放、开源和完全免费的平台,全世界所有的开发者和厂商只要有实力都可以根据自己的需要定制有自己特色的Android系统,这就更让他们觉得Android不安全了,使用的时候总是提心吊胆的。

大致:关于Android手机安全的问题是在2010年底曝光的,当时正值Android飞速发展的高峰期,用户量一路飙升,突然一个晴天霹雳:基于开放系统的Android手机出现了普遍的吸费情况,很多Android手机系统通过悄悄地发送短信和对短信的处理进行相关服务的订阅,从而在用户不知情的情况下扣除手机话费,这和当年的SP如出一辙,会严重阻碍Android的发展。其实,在此之前,这种情况就已经存在,因为Android是一个开放的系统,开发者能够调用很多底层的功能进行很多在其他手机平台上无法实现的功能,进而获利。其实说到底,问题还是归结于普通开发者开发出来的软件赢利难。到目前为止,个人开发者如果想在Android平台上通过自己开发的软件赢利,核心途径就是广告,并且通过广告赢利一般是很不稳定的,国内用户基本都没有付费使用软件的习惯,在生存压倒一切的法则面前,开发者只能铤而走险了。当然,一些厂商在Android应用已经赢利,缺乏有效监管的情况下,也从事于扣除用户手机费用和窃取用户隐私数据的行为。

小安:喔,原来是这样啊!您这么一说,我以后都不敢使用Android手机啦。

大致:其实也没有这么可怕啦,只要我们对Android上扣除用户话费或窃取用户信息的程序做到知己知彼,并加以适当的防范措施,就能够在安全的情况下尽享Android之乐啦!

1.1.1 “吸费门”程序介绍

在Android上吸费或者能够窃取用户信息的程序一般有以下特点。

(1)安装的隐蔽性:一般都是在用户不知不觉的情况下安装的,例如很多刷机的朋友在使用ROM刷机的时候,可能就已经被ROM制作者绑定了恶意程序,再如一些看上去很好的软件在用户主动安装的时候也可能会绑定一些恶意程序等。

(2)启动的隐蔽性:这些恶意程序一般都会随着系统启动而自动启动,即使一些高级用户发现了这些恶意程序并想办法进行了关闭,但恶意程序还会随着系统的再次启动而启动。

(3)运行的隐蔽性:此类程序一般都没有运行界面,均在后台秘密工作。发送短信定制付费信息,获取用户的通讯录和通话记录并上传到网络,窃取用户的短信信息并加以处理,监听电话并进行电话录音等,当然也可以把用户手机拍的照片秘密上传到网络上,这一切都是在用户几乎没有任何觉察的情况下在后台秘密进行的。

(4)顽固性:一般而言,即使一些细心的用户发现了这些恶意程序,也不太可能结束该程序,因为恶意程序完全可以通过代码的手段在程序结束的时候重新启动程序。可能用户此时会想到重新启动系统,但重新启动的时候这些恶意程序也会随着系统重新启动,顽固至极。

总之,这些程序的核心特点就是隐蔽而顽固,破坏性极大,令普通用户不知所措。

1.1.2 “吸费门”程序运行流程

在Android上吸费或者能够窃取用户信息的程序一般的运行流程如下。

第一步:随着Android系统的启动而启动。

第二步:在后台秘密地通过发送短信等定制付费信息,秘密地获取用户的通讯录和通话记录并上传到网络,窃取用户的短信信息并加以处理,监听电话并进行电话录音等,当然也可以把用户手机拍的照片秘密上传到网络上,这一切都是在用户几乎没有任何觉察的情况下在后台秘密进行的。

第三步:在系统运行时,当用户结束这些恶意程序的时候,这些恶意程序会在结束时自动重新启动。

第四步:循环第一步到第三步。

1.1.3 “吸费门”程序实现代码

小安:那您能不能说说这些该死的程序的实现代码啊,知己知彼、百战百胜嘛!

大致:其实这些程序的实现代码也没有太特别的地方,它们和优质程序代码相似,只是被人恶意使用了而已!

下面参照电话监听器(关于电话监听器,后面会详细分享)简要说明一下程序的实现代码。

(1)在配置文件AndroidManifest.xml中配置一个Receiver接收器,该Receiver接收器中要添加如下代码,接收系统发出系统启动广播,代码如下所示。

<intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>

(2)在Receiver接收器中启动Service,代码如下所示。

Intent service = new Intent(context,PhoneService.class);
context . startService(service);     //激活服务组件

(3)在Service中进行相关的秘密工作。