Android安全性问题总结(精选11篇)
Android安全性问题总结 第1篇
Android开发安全性注意事项: 本地数据库加密机制
本地SharedPreferences保存信息要加密
统一日志输出开关控制(开发测试日志输出打开,版本正式上线日志输入关闭)正式包需要混淆打包
app与服务器交互接口参数以及返回数据需要进行数据加密 app与服务器交互接口需要有token过期失效机制 声明适当的manifest权限
关于Android组件暴露的问题可以在不需要暴露的组件在AndroidManifest.xml中为这个组件加上属性android:exported=”false”
Android安全性问题总结 第2篇
如果点击Start a new Android Studio project是没有反应的,并且在Configure下面的SDK Manager是灰色的,这是因为没有安装Android SDK的缘故。这时候一般有两种做法: 然后再启动程序就会打开项目向导界面,这个时候如果点击Start a new Android Studio project是没有反应的,并且在Configure下面的SDK Manager是灰色的,这是因为没有安装Android SDK的缘故。这时候一般有两种做法:
1.自己没有SDK,需要从网络下载;打开向导的Configure-Settings,在查找框里面输入proxy,找到下面的HTTP Proxy,设置代理服务器,并且将Force https://… sources to be fetched using http://选中,然后退出将上面在idea.properties配置文件中添加的那条配置项注释掉重新打开Android Studio等刚开始的向导把Android SDK下载安装完成就可以了。
2.3.自己有SDK,重新指定SDK路径;打开向导的Configure->Project Defaults->Project Structure,在此填入你已有的SDK路径。
以上都不是时,SDK Manager中进行edit,最后单击finished即可,再次单击建立新的工程
二、使用虚拟机碰见的问题总结
问题1:Intel HAXM is required to run this AVD,VT-x is disabled in BIOS;
解决方法: 就是 重启的你的电脑。按F2或其他的吧
(根据你的电脑来决定)然后进入到BIOS中。选择Config --cpu -- Intel-Virtualization Technology 将这个选项开启。然后你在执行虚拟机 就没有问题了。
问题2:如果出现 访问网络时提出网络错误 用浏览器测试出现
net::err_name_not_resolved
解决方法:
我告诉你的牛逼解决方式就是重启虚拟机了。反正我当初就是这么解决的。
也有说通过adb 设置DNS的方式来处理。只是我当初输入adb 查询DNS的时候 整个软件都卡死了。Studio都卡死了。所以我最后才采取了重启的方式。
问题3:虚拟机中没有中文输入法
虚拟机中语言能切换到中文简体,但是输入法 没有了google输入法,而是换成了AOSP输入法。这个输入法把神器的是很多种语言都有 但是就是没有中文。所以大家如果还想输入中文的话,我想说你就不要滑动找是否有中文了。因为我已经找了几遍了,没有就是没有。
解决方法:
亲 你还是自己下个输入法安装到你的虚拟机上吧。
问题4:安装输入法到虚拟机中的是时候如果出现了:Failure [INSTALL_FAILED_NO_MATCHING_ABIS]
解决方法:
我出现的这个问题就是安装搜狗输入法的时候出现的
方案一:将你的虚拟机的cpu换成arm的吧。(但是这个arm的格式 会比较卡,因为咱们普通的开发的电脑中 CPU装的是Int的。)
方案二:将你的虚拟机的版本进行降号 5.1版本以下的就能成功
方案三: 换个公司的输入法产品吧。
问题4:安装输入法到虚拟机中的是时候如果出现了:Failure [INSTALL_FAILED_NO_MATCHING_ABIS]
解决方法: 我出现的这个问题就是安装搜狗输入法的时候出现的
方案一:将你的虚拟机的cpu换成arm的吧。(但是这个arm的格式 会比较卡,因为咱们普通的开发的电脑中 CPU装的是Int的。)
方案二:将你的虚拟机的版本进行降号 5.1版本以下的就能成功
方案三: 换个公司的输入法产品吧。
Running an x86 based Android Virtual Device(AVD)is 10x faster.We strongly recommend creating a new AVD
什么意思?就是说啊 你现在启动的这个虚拟机会比较慢的,你如果换成x86格式的cpu的话,那么速度会提高10倍呦,你要不就不启动这个arm格式的算了。
这个就没有什么解决方案了: 你点击OK 的话 你的虚拟机就不会启动了。直接点击右边的关闭就可以了。反正也只是一个提示而已。
总结: 你的电脑是什么样的系统你在生成虚拟机的时候就选择什么样的cpu吧。否则的话 更耗费资源也更卡,根本体会不到 新版虚拟机的流畅度。
我一度感觉这个已经和Mac本中的ios虚拟机有的一拼了。当然 还是不入人家那么流畅了。但是最起码有不用去羡慕了。
Android安全性问题总结 第3篇
在日常生活中, 我们使用最多的工具就是手机了。打电话、发短信这是手机的基本功能, 我们每个人每天都在使用手机跟亲戚、朋友、同学、客户等进行联系和沟通, 既丰富了我们的日常生活, 也拉近了人与人之间的距离。另外, 照相机是每个手机的必备功能, 允许我们随时随处拍照, 我们也会将一些美好的风景记录下来, 有时也会将一些重要的资料拍成照片保存下来, 方便观看。备忘录是智能手机上的一个很常用的应用, 我们会将一些重要的信息, 比如帐号、密码、亲戚朋友的生日等信息记录下来, 防止忘记。此外, 我们在等公交、坐火车的时候, 喜欢登录QQ、微博等程序跟别人沟通交流、浏览一些新闻资讯等, 这些构成了我们使用智能手机的大部分时间。
如果我们的手机落在办公室或者被别人拿去玩的时候, 我们不愿意让别人看到自己的隐私, 但是又不能时刻盯着他们是不是看到了自己的私密内容, 这时候就需要一个隐私保护的程序来做这些工作了。有的时候, 我们还会因为粗心大意, 将自己的手机弄丢或者被小偷偷走, 手机里的隐私将会被泄漏无遗, 给我们的生活带来很大的影响, 这时候就需要一个程序来保护我们的个人隐私。
手机里的个人隐私比如短信、通讯录、照片等, 需要打开特定的程序才可以浏览, 屏幕解锁的应用程序应该依此为突破口, 对手机屏幕进行加一把保护锁, 让其他用户不可以打开手机屏幕, 查看手机里面的隐私信息。具体说来, 屏幕解锁应用程序应该具备设置、修改屏幕保护密码的功能。
1 gesture.key (图形密码) 部分
Android手机上有一个屏幕解锁的应用, 在Android设备上, 用户可以通过设置锁定图案作为密码对设备用户界面进行锁定, 锁定界面如图1所示。
一般的Android手机的锁定界面由九个点构成, 设定图案需满足以下三个要求:至少四个点;最多九个点;无重复点。
这种看似复杂的解锁方式在Android存储时使用的是明文转换后采用散列方式存储。Android设备图案锁定的加密存储过程如图2。
下面设置一个图形加密锁测试一下:
(1) 图形输入。输入图3中的图案 (看上去是个“2”, 使用了九个点。)
(2) 明文加密。这一步是系统自动完成的, 首先是九个点的数据含义, 含义是这样的:从左上角起编号为00, 至右下角止编号为08。那么上图中“2”的编码应该是000102050403060708。使用SHA1算法对上述十六进制编码进行计算后得到密文“333d9f31c209ce1217bc165c5baa7307b06bbf87”。这一步系统会自动将图案转换成编码, 再由编码算出密文。因此我们是看不到的。
(3) 密文存储。计算好密文后, 系统会将密文存储在/DATA/SYSTEM/GESTURE.KEY文件中, 我们可以使用“adb pull/data/system/gesture.key gesture.key”将这个密码文件下载到本地, 得到密码文件后, 用记事本打开是乱码的, 要用十六进制编辑器打开才可以看到密文。
可以看到密文和上一步我们计算出来的是一样的。
对上面算法总结一下规律。从密码明文的编码来看, 各单数位数字为零, 双数位数字不重复地排列, 并将这个排列进行单次SHA1运算。那么也就是说, 通过数学计算可知, 由于单数位确定, 双数位不重复, 则根据Android图案锁定规则可以设置的锁定图案总数是固定的, 4个数的密码个数为9*8*7*6=3024。5个数的密码个数为15120个。6个数的密码个数为60480个。7个数的密码个数为181440个。8个数和9个数的密码个数都是36288个。也就是说一共密码的可能个数为985824个。由于密码复杂程度不高, 破解相对容易。只要做一个字典进行暴力猜解就可以将正确密码解出来且速度很快。生成的字典50多m, 暴力破解速度基本是秒破的。智能到你只要在电脑上安装了你的手机驱动 (豌豆荚这些装了就有了) 并且手机已经root, 那么就可以直接插上手机就破解了, 即使在锁屏状态下插上电脑也能破解!
一开始我就没打算把明文跟密文直接在内存中生成, 因为我觉得生成会很慢, 效率会很低, 这样一来在MFC中如果仅用单线程处理的话程序会假死!所以我做了一个字典, 用来存放明文跟密文, 在使用的时候把整个字典文件全部装入内存, 然后用密码进行子串匹配。
2 PASSWORD.KEY (数字密码) 部分
另外一种保护屏幕的方法是通过设置密码来实现的, 这样子会产生一份password.key保存在/data/system/, 下面先来看看对于这个文件的处理的源代码:
它是先对原始输入密码进入加盐处理, 然后分别进行SHA1加密和MD5加密形成两部分组合而成的KEY, 这样子就提高了密码安全性。但是能过研究发现这个加盐的随机数会保存在用户的数据库中的一个字段里。/data/data/com.android.providers.settings/databases里的settings.db, 用SQLite Expert Personal 3打开这个数据库。
3 结语
由于知道了这个随机数, 其安全性受到了极大的威胁, 由于其密码长度是在4到16位的字符或者数字组成, 完全可以通过数据字典对其进行爆破。
上图是通过数据字典进行暴力破解的结果, 可以看到已经成功地解出了开机密码。
参考文献
[1]凡里伟.Android平台手机防盗系统的设计与实现[D].大连:大连理工大学, 2012
[2]公磊, 周聪.基于Android的移动终端应用程序开发与研究[J].计算机与现代化.2008, 8 (15)
Android安全性问题总结 第4篇
关键词:Android系统;开源;手机病毒;恶意软件;恶意代码;隐私泄露;杀毒软件
中图分类号:TO311.52 文献标识码:A 文章编号:1006-8937(2015)18-0079-01
1 产生Android系统病毒的原因
首先要提出的问题是,为何Android系统会出现如此之多的网络安全问题呢?针对这个问题,我们要先了解Android系统的一个重要性能——开源。简言之,就是指源代码是开放的,任何人都可以查看、更改源代码。那么有人会问,岂不是所有的人都可以修改Android系统的代码?答案显然是否定的。Android系统并不是完全开源的,换言之,只是大部分的代码对人们是开放的。那么又有人会问,开源对我们普通的非计算机人员并没有什么直接作用,与网络安全又有何关系?那么接下来举个例子来解释开源:假如你有一台Android系统的手机,那么你可以在第三方下载你想要的任何程序(软件,工具,游戏等),除此之外,你还可以自己研发程序,并且将自己研发的程序供给别人装在Android系统的终端使用。这就是系统的开源性,再比如苹果的IOS系统就是不开源的,就是说苹果手机的软件不能在别处下载,只能通过苹果商店购买。了解了开源的概念,我们就不难理解为何Android系统会出现那么多网络安全问题了。
其次,病毒是如何侵入人们的手机的呢?Android系统手机的用户可以通过第三方下载程序,那么同样的,不法分子就可以通过对软件的程序进行修改,并在代码中加入恶意病毒。当用户下载这个应用程序时,病毒就会植入到手机中,不法分子就可以以此方法从而达到窃取消费者私人账号信息的目的。
2 常见的安卓病毒
2.1 WIFI风险类病毒
首先,我们来了解什么是不安全Wi-Fi热点。360安全专家解释称:“不安全Wi-Fi热点其实就是在数据传输的上游设置了一道阀门,所有接入者的数据都通过这个阀门与相应的网站进行传输,黑客通过一些特定的攻击设备,就可以对这些数据进行记录和抓取分析。这样,接入者的账号、密码等个人信息就被不法分子一览无余。”
其次,我们来看一则数据。日前,腾讯移动安全实验室发布的《2015年Q1手机安全报告》显示,一季度Android手机病毒包新增1829188个,相对去年同期,同比增长12倍。此外,Wi-Fi风险加大,7.8亿腾讯手机管家用户每天有超过2亿次Wi-Fi连接,其中风险Wi-Fi占比1.68%。随着Wi-Fi的大面积普及,Wi-Fi的风险也在加大。2015年第一季度,腾讯手机管家用户每天有超过2亿次WiFi连接,其中风险Wi-Fi占比1.68%。风险Wi-Fi主要构成是ARP中间人攻击、虚假钓鱼、DNS劫持,其中,虚假钓鱼Wi-Fi就占比27%。这个数据就足以表明,当我们用户在不知情的情况下接入不安全Wi-Fi时,被他人窃取私人信息的几率非常大。
最后,我们来了解什么是虚假Wi-Fi钓鱼,不法分子又是通过何种手段窃取用户的私人信息?所谓虚假Wi-Fi钓鱼,是指犯罪分子通过架设一个与某公共Wi-Fi热点同名的Wi-Fi网络,吸引用户通过移动设备接入该网络,然后就可以通过分析软件窃取这些接入虚假Wi-Fi热点用户的资料,包括Wi-Fi登录密码以实现对在网用户进行恶意攻击,导致网络瘫痪、窃取网上购物的支付账号密码,网上银行的信息等。
2.2 恶性代码类病毒
这类病毒是专门针对Android平台的恶意软件,采用SP(Service Provider,服务提供者)吸费的模式非法获利的情形屡见不鲜。用户一旦中毒,病毒将拦截10086发送到手机的任何短信、上传手机设备信息、手机SIM卡信息,最终会定制大量短信增值业务,扣去高额话费。当用户通过第三方下载应用程序时,被植入的扣费软件代码在安装后,或立即发作或定时发作,私自向SP发送业务定制信息,屏蔽10086等扣费确认短信并自动回复,完成扣费后自动删除短信记录,整个过程完全暗箱操作,用户无法看出任何痕迹。换言之,消费者在这一过程中是完全不知情的,而且不法分子并不会留下任何痕迹。
2.3 手机支付类病毒
新型的Android病毒“短信僵尸病毒”的原理更为复杂,该病毒可针对网银、支付、汇款等高度机密信息进行欺诈,导致用户的网银财产损失。“短信僵尸病毒”对于网银的攻击方式不是直接攻击网银系统,而是间接攻击,当病毒拦截到含有“转、卡号、姓名、钱、账号、行、元、汇、款”等一系列跟钱有关的内容的短信时,就会删除这条短信,并把原短信中的收款人帐号改成病毒作者的,再将伪造过的短信发到中毒手机。由于中国许多手机用户都通过手机短信来进行手机支付,而且很多银行都会将账单信息发送到用户的手机中,所以当用户的手机受该病毒感染之后,银行卡和账户信息很容易就会被该病毒截取并进行小额支付。
3 网络安全问题的应对措施
3.1 对Android系统的开发人员而言
3.1.1 基于手机病毒的查杀技术
手机病毒的查杀技术的基本原理是根据病毒代码的特征,编写适当的软件,通过对病毒的比对,对其进行过滤。这种方法能够较深增次的清除病毒,并且是系统效率有所提高。对于我们用户而言,就是通过Android手机上的应用商店下载查杀病毒的软件,实时监控手机,防患于未然。
3.1.2 基于Android系统平台恶意代码的逆向分析技术
逆向分析技术是指将应用程序进行反汇编,通过分析反汇编代码来理解应用程序的功能,即在不执行应用程序的情况下对其行为进行分析的技术,是目前最主要的恶意代码处置机制,被广泛应用于恶意代码分析和公安网络侦察工作中。
3.2 对消费者或用户而言
尽量少在第三方网站下载存在风险的应用程序,如果一定要下载,最好在信誉良好的原始开发商的网站下载。最好使用谷手机提供的官方应用商店,如果无法使用的话,尽量从正规的应用商店下载软件,不安装破解的应用软件。
4 结 语
基于Android系统的网络安全性问题已得到越来越多的专业人士和手机软件开发商的重视,这也就意味着Android系统在向越来越完美的方向发展。在人们无时无刻都依赖于智能手机的今天,作为手机用户的大多数人群,更应该充分树立安全意识。我们应尽量选择正规渠道购买手机;选择官方网站;正规渠道下载应用;下载安装应用前,细心留意应用权限;安装手机安全产品。
相信在我们的共同监督和努力下,必然能解决Android系统的网络安全问题,让不合法,不文明的网络行为远离我们的生活。
参考文献:
Android安全性问题总结 第5篇
Android除了给予用户进程以单独的uid外,给系统服务也分配了固定的uid,诸如system/core/include/private/android_filesystem_config.h文件中定义了这些固定的uid:
#define AID_SYSTEM1000
#define AID_RADIO1001
#define AID_BLUETOOTH1002
#define AID_GRAPHICS1003
#define AID_INPUT1004
#define AID_AUDIO1005
#define AID_CAMERA1006
#define AID_LOG1007
..........传统的做法是,出了root,其它全是普通用户,两类用户的权限在内核里是规定死的,这也保证了UNIX内核的安全性。比如dev目录下的设备文件,一般用户主是root,而且对其他用户不开放读写能力。用户使用设备一般通过系统调用如ioctl,而系统调用属于受信代码。
Android的问题是,引入的这些系统用户,实际上在权限方面是无法与普通uid区分的,如果系统用户能访问一个设备,那么一般用户也能。所以,Andoid没有别的选择,只能默认开启设备文件的全局读写。这在systemcore/init/device.c做了定义:
{ “/dev/urandom”,0666,AID_ROOT,AID_ROOT,0 },{ “/dev/ashmem”,0666,AID_ROOT,AID_ROOT,0 },{ “/dev/binder”,0666,AID_ROOT,AID_ROOT,0 },设备文件当然还是存放于/dev目录下,但dev目录的填充不是由udev做的,而是由Android的init进程做的。这个步骤由make_device函数完成,各个设备的权限来自于上述device.c文件的规定。
Android学习总结 第6篇
零零碎碎的总结:
1.客户端的功能逻辑不难,UI界面也不难,但写UI花的时间是写功能逻辑的两倍.2.写代码前的思考过程非常重要,即使在简单的功能,也需要在本子上把该功能的运行过程写出来.3.要有自己的知识库,可以是一个工具类,把写过的,看过的好的代码放进去,也可以是一个笔记本软件.因为只有放在知识库里的东西,才是你最重要的财富.4.如果你想做自由职业者,你需要学英语,因为在国外的盈利比国内多很多.如果你想进大公司,好公司,你需要学英语.你想深入学习android,但中文的android文章太少了,你查查百度,到处都是copy来copy去的hellword,所以,你需要学英语.如果你想出国,你需要学英语.5.Http协议要研究透彻.http的信息头有什么信息,分别代表什么,信息体有什么信息,代表什么,都要搞的明明白白.scoket也是一样.6.在eclipse里的layout文件都有graphical Layout.通过这个好好的把UI调整好.7.Android里的junit每次运行都会打包新的apk到设备上跑.效率非常慢.如果是跟android无关的测试,最好自己建立一个单纯的java项目做测试.8.面试的时候不要觉得自己提的薪水太高,物以稀为贵明白吗?不管你的期望薪资多少,都有可能实现,这只是时间问题.9.如果一家小公司通过猎头找到你,即使公司在小,也比外面那些40,50人的公司还要好.不要觉得公司不行,担心会倒闭.放心吧,至少活1年是没问题的.10.不要把自己绑在android上,有空也研究下IOS(最近小弟就准备研究ios,刚买了6本书...).11.移动互联网最少还有10年的快速增长.android最少还有两年的快速增长.走android这条路是不会错的.12.有空多学点开放平台的SDK.比如新浪微博,腾讯微博,淘宝平台,支付宝移动支付平台,快钱移动支付平台等等..这些都是不愁没市场的.13.即使技术再差,也要发布一个应用到market上去.因为这样你才了解做一个应用的逻辑.14.每个月拿到薪水省500-1000元出来.这些钱投在买学习资料,去培训班上课...在培训班,花再多的钱也是值得的.15.你真正的价值在项目经验和对底层的认识上.不要忽略基础知识.16.如果有空把Android的源代码看一下.底层的东西很枯燥,但这些很值得学.17..程序员其实是艺术家.代码重构和设计模式,是非常非常重要的东西,必须要学
18.不要去维护一个项目,要去做一个项目.19.一开始不要轻易去大公司,虽然大公司是可以让你呆一辈子的.但你的起点低,以后成就也低.20:每天早上提前20分钟上班,5分钟把今天的工作计划写好.15分钟用来看各大It论坛的新闻.21:如果以前没做过java,那就把SSH看下,自己搭建一个小服务器.这是为了接私活用.22:PS一定要学,接私活用.23:多下载市面上好的应用,每天都用,只有这样你才能了解市场.现在所有的APK都可以反编译,看源代码麻烦,但看layout和图片很容易,所以....你懂的.24.要有羞耻心.25.老板仅仅要求你把东西做完,需求完成.但你必须对自己要更严格一点.写一段代码,从网上复制一份代码,并不是可以用就行了,你还必须明白他的原理,为什么这样就可以?这才是对你最有用的地方,这也是你今后薪资增长的保证.26.要懂得舍得.移动领域发展太快,必要时必须要用钱换时间.不然你会远远落后别人(我之前花了4000大洋去培训班学IOS三天).27.要明白自己想要什么,什么才能最大性价比提高你的能力.对我来说,能让我提高最大的,就是Android和IOS同时会,并且自己可以做架构设计.28.看android技术书籍最快的学习方法,先通读一次.然后把书本上的demo一个一个写出来.不要觉得太容易不去写.很多东西都是这样,看起来简单,但做起来难.最后再对照自己写出来的程序代码去理解书本的意思.29.应用和游戏是2个方向,没有一个公司会同时做游戏又做应用,即使是外包公司,大多也只做一块.专精一个就可以了.30.每次做完一个项目,要强迫自己做总结,通过这个项目,我学到了什么新技术?犯了哪些
SB错误?
Android 个人总结 第7篇
通过本学期的的学习,我知道了android是由google开发的一款手机平台,android的基本架构是基于linux内核,由内核向外的反别为库和应用架构,然后就是我们手机上的可视化应用了,android是一个系统,但是并非是操作系统。
在开发之前,我们首先要搭建一个开发环境,用的是java编程的eclipse,我们从网上下载sdk包,里面包含了android开发常用的工具,android既是手机操作系统,也是跨平台(windows,mac,linux)的开发工具,虽然是使用linux为核心的平台,但是你可以在很多地方感觉到类似做网页开发的感觉。具有本身独特的进程管理方式,完整的上网功能,搭配了google地图,Gmail等服务,即使像我们这些尚未入门的开发者也能开发出自己理想的应用程序来。
刚开始的时候,得知android开发需要使用java语言心里了小小的畏惧,但随着学习的渐渐深入就会发现android平台只是使用了java的语法而已,所以,即使我们不具备java语言开发的基础,也可以放心地加入到android开发当中来。
第一节课,老师向我们详细介绍了开发界面右边窗口的内容,首先是src目录,里面包含了我们开发界面的java文件以及各种我们创建的类组成的开发包。然后是gen目录,里面涵盖的是系统的类文件(如R.java,Buidconfig.java)与android系统的依赖文件(Android Dependencies)。再下来是assets(用户资源文件),里面文件的访问是通过文件路径的形式调用。Bin文件里面包括了res资源文件,android项目配置文件androidmanifest以及我们开发之后产生的后缀为.apk的应用程序文件。Res是系统资源目录,我们要用到得图片资源,颜色资源,字符串资源都在里面。一般的开发都要用到界面文件也包含在里面。
Eclipse具有史上超豪华的手机控件,包括常用的文本文件,文本框,按钮,进度条等,还有特殊形式的email,gmail文本框,在开发过程当中,很多控件都是以拖拉的形式拖拽到开发界面上,大大地减少了我们开发时候的工作量,在配置文件中,我们可以添加各种各样的系统动作,以及系统服务,还可以建立用户自己的文件库。
当我们开发完成的时候,就可以运行手机模拟器,在上面,我们可以像操作当今市场上最流行的android手机一样操作我们的模拟器,可视化的界面可以我们随心所欲地下载我们开发的应用程序到模拟器上,就可以实现步步跟进,想要修改哪里就一目了然了,模拟器上人性化的设计界面大大方便了用户与机器之间的交流。如果我们拥有一部android系统的手机的话,就可以把自己开发的应用程序下到手机上,看到自己的成果,顿生成就感,真的很有乐趣。也加大了我对学习android的信心。
Android安全隐患抬头 第8篇
同期,专门为各类智能手机提供安全服务的美国科技公司Lookout也发布了一份研究报告,报告称,2011年上半年,针对Android手机的恶意软件数量呈迅猛增长之势,目前遭遇恶意软件感染的几率比半年前增长了2.5倍。
“新式Android恶意软件甚至可以记录感染手机的通话。”研究人员警告称。
陷入 “深渊”
进入2011年,Android手机出货量继续激增。据调查公司ABI Research数据显示,Android手机第一季度出货量超过3000万部,全面超越Symbian,成为全球第一大智能手机系统。
但另一方面,自2010年以来,Android手机已经出现了不和谐的因素,众多木马程序纷纷来袭,用户资料丢失、隐私被窃的现象屡见不鲜。据瞻博网络发布的报告称,自2010年起,Android平台上的恶意软件数量已激增400%。今年以来,恶意软件问题又发生数起:2月,“Android吸费王”恶意扣费软件连续植入超过100款应用软件进行传播;5月,“Android蠕虫群”恶意软件强力突袭,入侵手机后自动外发大量扣费短信。此外,继“X卧底”之后,“Android窃听猫”、“Android短信大盗”、“Android血吸虫”等恶意软件也大举进犯,严重威胁用户的隐私安全。
6月29日,网秦发布的《2011年5月手机安全报告》显示,Android平台的病毒感染率也在不断升高,5月份其感染率达到了30.2%。数据显示,5月份在各手机平台中,Symbian平台以59.5%的比率居感染平台第一,Android平台以30.2%的比例居第二位。但是,为什么是Android?
首当其冲
当然,Android并不是惟一一款成为犯罪分子攻击目标的移动操作系统。苹果iOS及其它平台同样存在恶意软件问题,但Lookout报告显示Android平台的安全问题最为严重。目前,Android手机全球市场份额已达50%。
Android缘何成为恶意软件的首要冲击对象?专家认为,其令人称道的开放性是造成这一结果的最重要原因。
“全面开放而监管不力势必造成应用五花八门、良莠不齐。”业内人士指出,开放性让Google对自身系统的控制能力远不及苹果,合作伙伴为了更贴合自己的终端及用户,纷纷都对Android的代码进行修改,由此形成了众多的版本分化。这样不仅给很多开发商造成多版本设计的重复技术投入,同时也为Android自身统一规范监管造成困难,难以形成品质保证。
譬如,今年5月,Google试图对Android进行全面升级,但由于系统版本的多样繁杂,因此已开发的恶意软件补丁仅仅只能覆盖到Android 2.2以上的版本,更早版本的Android系统仍存在漏洞,不能得到及时维护。
另一方面,Android系统的开放性也导致审查制度的缺失。只要是开发好的软件均可以放在平台上供网上用户下载,这就为恶意软件的出现和传播大开方便之门,黑客趁机将恶意程序植入到常用软件中,而且可以不断更新,使得恶意程序不断变种繁殖下去。
“Google对Android平台应用的审核不严格是导致问题的重要原因。通常情况下,开发者将应用上传至苹果应用商店,需经其专业部门审核一个星期左右方可进入市场流通,而这一时间在AndroidMarket仅为1至2天,而在内地的一些Android市场,审核力度则更为薄弱。”香港GreenTomato公司应用开发工程师刘俊杰表示。
未来仍需乐观
渠道安全环境的相对薄弱,为黑客提供了大量可乘之机。因此业内人士呼吁,建立一个安全的网络环境或已成为必需。
“起码来说,Google应该采用特征库的方式对已知恶意软件进行扫描。”安全软件厂商Veracode首席技术官Chris Wysopal 表示,鉴于传统的基于特征库的反病毒软件已经无法检测出最新的恶意软件,同时已有的恶意软件有可能通过较大规模的变异而逃过反病毒软件的特征码扫描。Wysopal建议,Google阵营应该采用基于行为的反病毒软件对Android程序进行排查。
对于Android系统的安全问题,Google表示,正在扫描新式恶意应用,试图让Android平台的安全威胁降至最低。Google还积极与制造商和通信商展开合作,当Android Market中出现恶意应用时,Google及其合作伙伴便会发布安全补丁。
“安全是Android开发团队的首要任务。我们将致力于开发新的防护功能,以应对今后可能出现的各种攻击。”Google表示。
对于Android未来的走向,有关人士依然抱乐观的态度。刘俊杰就表示:“长远来看,我们仍然看好Android平台的发展潜力,由于这一系统本身具有开放性特点,使得开发者可以更容易地进行应用的底层优化,而在苹果系统上则难以做到。随着开发者、手机厂商对Android开发经验的增多,以及系统本身的不断优化,相信问题将会得到改善。”
相关链接
用户防范须知
面对日益严峻的恶意软件攻击形势,为了保护用户的隐私及信息安全,互联网专家建议用户:
1.安全意识时时有。针对恶意软件的病毒性征,经常性地查询一下自己的话费有没有异常的消耗,及时加以防范。
2.软件下载需小心。在通过应用商店、手机论坛等渠道下载软件程序后及时进行安全检测,软件安装时也应尽量小心,阻止恶意插件的安装,并应尽可能地在比较安全的软件商店或官方软件平台下载。
Android方案总结 第9篇
如上图,应用程序的开发过程中我们使用了飞思卡尔的i.MX51 EVK Hardware。设备提供的支持如下:多标准音频回放;多标准视频回放;开放的系统支持;
二、软体结构
1、Android系统的初始化流程图如下所示:
BeginMkdir: /dev,/proc,/sys,/dev/pts,/dev/socketaction_for_each_trigger(“early-init”, action_add_queue_tail);property_set(ro.XXX)open_devnull_stdio():fd is 0,1,2device_initaction_for_each_trigger(“init”, action_add_queue_tail)log_init: /dev/__kmsg__property_initaction_for_each_trigger(“early-boot”, action_add_queue_tail);parse_config_file(“/init.rc”)Check have /dev/consoleaction_for_each_trigger(“boot”, action_add_queue_tail);import_kernel_cmdline: /proc/cmdlineload_565rle_image(INIT_IMAGE_FILE)queue_all_property_triggers()get_hardware_name: /proc/cpuinfoIf load okrestart_processes()Yparse_config_file(/init.%s.rc)Show Image, and Print “A N D R O I D”to ttyEnd
可以具体描述如下:(1).初始化log系统。
(2).解析/init.rc和/init.%hardware%.rc文件。
(3).执行 early-init action in the two files parsed in step 2。
(4).设备初始化,例如:在 /dev 下面创建所有设备节点,下载 firmwares。
(5).初始化属性服务器,Actually the property system is working as a share memory.Logically it looks like a registry under Windows system。
(6).执行 init action in the two files parsed in step 2。
(7).开启 属性服务。
(8).执行 early-boot and boot actions in the two files parsed in step 2。
(9).执行 Execute property action in the two files parsed in step 2。
(10).进入一个无限循环 to wait for device/property set/child process exit events。
2、方案基本框架,如下图所示:
Native codeDaivik runtimeAndroidNDKappsJNIAndroidSDKappsAndroid app frameworkStandard librariesLinux kernel+Android extension
(1)图中Native Code包含一系列运行与Linux内核之上,由C/C++语言写成的库,这些库提供基本的系统级功能。其为应用层提供了本地开发的可扩展性,在此次开发过程中,Native Code主要为我们提供了音视频的编解码(即我们在此层开发了我们自己的音视频的编解码)。系统中主要使用的是G711音频编解码,实现语音的本地录音及播放;FFMPEG视频解码,进行图像视频的解码,实现视频的实时播放。
(2)Dalvik runtime的相关介绍。Android系统的应用开发语言是Java,而保障这一点的就是Android runtime。Java语言的运行需要有虚拟机的存在,而Android runtime 的核心就是一个称之为Dalvik的虚拟机。另外,Android runtime还包含了一个强大的Java核心类库。这个类库从功能上涵盖了传统Java核心类库的大多数功能。应用程序调用Android 函数库(即Android runtime中的Java核心类库)中的函数时,其实只是调用的一个函数名,具体实现在Native Code中的Library中。即是Library为上层的应用提供API供开发使用。(3)关于JNI。Java Native Interface(JNI)标准,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。我们开发的音视频本地编解码库,就是通过JNI来使用的。如下,private static native void InitEnv();private static native int drawFrame(Bitmap bitmap, byte[] inbuffer, int buf_len);这是我们在程序中调用的本地函数,先要使用关键字native进行本地声明。static { System.loadLibrary(“decode”);}
这是用来加载我们的c动态库的,上面的native声明中的方法就是在我们加载的库中具体实现的。
Android安全性问题总结 第10篇
0x00 前言
0x10 Android软件常见漏洞原理及检测
0x11 敏感信息明文保存
0x12 程序文件及进程权限问题
0x13 网络数据明文传输
0x14 组件权限安全问题
0x15 其它
0x20 自动化审计工具——DroidAppAuditter
0x30 业界Android软件安全现状
0x40 总结
0x50 关于我们
【正文】
0x00 前言
随着移动互联网的发展,移动终端安全也越来越受到关注,特别是Android系统的崛起,互联网上的各类Andriod软件数量迅速上升。因Android系统是开源的,导致各种android恶意软件迅猛增加,成为手机系统的最大受害者。与此同时,android系统和软件本身的漏洞也进一步危害到用户的隐私安全。本文主要针对Android软件安全进行审计,提供一些常见的安全检测点,并借此实现自动化审计工具,最后评估下业界常见android软件安全的现状。
0x10 Android软件常见漏洞原理及检测
0x11 敏感信息明文保存
敏感信息明文保存一直是Andriod软件常容易出现的,这些敏感信息包括用户密码、住址、姓名等等内容,特别是密码问题。有些支持“记住密码”功能的软件常常将密码明文保存在软件目录下的某xml文件中,若手机中毒或者被其它恶意软件利用,直接读取xml文件中的明文密码然后远程发送给攻击者,这将会严重影响到用户帐号安全。以下是用于检测敏感信息的关键代码:
foreach $msg (@msgs) { my $base64msg = encode_base64($msg); my $md5msg = md5_hex($msg); if(/$msg/) { print “[高危]:$curfile: 行 $lines: 发现明文敏感信息:$msg !!!”; $SearchStrResult .= “[高危]:$curfile: 行 $lines: 发现明文敏感信息:$msg !!!”; push (@risk_level,4); $highnum++; } if(/$base64msg/) { print “[高危]:$curfile: 行 $lines: 发现 Base64 敏感信息:$base64msg !!!”; $SearchStrResult .= “[高危]:$curfile: 行 $lines: 发现 Base64 敏感信息:$base64msg !!!”; push (@risk_level,4); $highnum++; } if(/$md5msg/) { print “[安全]:$curfile: 行 $lines: 发现 MD5 加密信息:$md5msg !!!”; $SearchStrResult .= “[安全]:$curfile:行 $lines:发现 MD5 加密信息:$md5msg !!!”; push (@risk_level,1); $secnum++; } }
以下是当检测到明文密码时的输出结果(已过滤掉包名):
[高危]:data/data/com.***.v7/shared_prefs/rem_password.xml: 行 3: 发现明文敏感信息:passwd123 !!!
0x12 程序文件及进程权限问题
如果我们限制程序目录的权限,禁止其它第三方软件访问,也能够在一定程度上防止明文密码泄露,除非软件已获得root权限,而软件一般无需root权限,大多是一些恶意软件或者杀毒软件才会用到,对于普通软件应该遵循“最低授权原则”,尽量以最低权限来完成所需操作,避免权限被恶意滥用。因此也可将程序目录权限和进程是否为root权限作为一个检测点,以下是DroidAppAuditter检测到问题时的输出结果:
[低危]:-rw-rw--w- :data/data/com.snda.cloudary/shared_prefs/UserInfo.xml[低危]:存在Root权限 !
0x13 网络数据明文传输
在2月UCWEB浏览器被爆存在明文密码网络传输漏洞,若开启“云端加速”功能,在登录一些SSL站点时,它会将用户发送的WEB请求会转发到UC的代理服务器上,并且未进行任何加密处理,可能导致用户密码泄露。最初UC不承认此问题,后来在微博上确认存在此漏洞。对于存在明文网络传输的软件,若结合中间人攻击就极有可能造成密码泄露,特别是在KFC、麦当劳等公共场所。在Android中本身自带有tcpdump可用于网络抓包,再借助perl模块去解析cap,或者利用wireshark的命令行工具来解析也是可行的(以下为示例代码,不考虑命令注入问题):
print “[*] 捕获网络数据包......”; system(“adb shell tcpdump -p -vv -s 0 -c 500 -w /sdcard/$targetfile.cap”); print “[*] 提取cap文件至PC端分析......”; system(“adb pull sdcard/$targetfile.cap $cwd/TestSoft/$targetfile/$targetfile.cap”);print “[*] 解析cap数据包......”; system(“$cwd/tshark/tshark.exe -r $cwd/TestSoft/$targetfile/$targetfile.cap -V >$cwd/TestSoft/$targetfile/$targetfile.txt”);
以下是检测到明文敏感信息网络传输时的输出结果:
[中危]:存在明文传输内容:password=passwd123&provider=sdo&login=13613****** [低危]:存在 IMEI(国际移动设备身份码)隐私信息窃取行为、IP地址隐私信息窃取行为、SIM序列号隐私信息窃取行为:channel=6666&model=sdk&ip=10.0.2.15&mac=&sim=89014103211118510720&imei=000000000000000&size=480*800&os=2.2&platform=Android&version=1.0.5.1&ua=Mozilla/5.0 (Linux; U; Android 2.2; zh-cn; sdk Build/FRF91) AppleWebKit/533.1
0x14 组件权限安全问题
在Android中存在多种组件,比如Content Provider、Broadcast Receiver等等,这些组件可能因权限设置不当导致信息泄露或者钓鱼欺骗等攻击。在,香港理工大学的安全研究人员陆续报告了许多android软件中存在的Content Provider信息泄露漏洞(参见链接:www4.comp.polyu.edu.hk/~appsec/),由于程序对Provider的权限设置不当,导致第三方软件可读取Content Provider提供的信息,其危害程度取决于Content Provider提供的信息内容,比如联系人、电话、短信等隐私信息就可能包含其中,
默认情况下,Content Provider的权限为android:protectionLevel=”normal”,最好的权限设置应为signature或者signatureOrSystem,进而避免被第三方恶意软件利用。下面是DroidAppAuditter中用于检测Content Provider权限的关键代码:
while(index($cont[$line],“
-1){ print ”[中危]:Content Provider:$ProviderName 权限为“normal”,可能导致敏感信息泄露!“; $CheckComponentResult .= ”[中危]:Content Provider:$ProviderName 为“normal”权限,可能导致敏感信息泄露,建议修改为“signature”或者“signatureOrSystem”!“; ……省略…… }
除protectionLevel权限问题外,
20盛大的安全研究人员DoDo在其博客写一系列关于Android安全的文章,其中有篇就提到关于Broadcast Receiver的问题,链接见:www.sectop.com/?p=128,这个依然是组件权限控制的问题,由于Broadcast Receiver被允许外部调用,可能被第三方恶意软件标记相关action给正常应用发送broadcast,那么正常应用就会对此进行响应处理,其危害程度也是取决于正常应用对广播接收采取的操作,比如发送短信、任务栏通知等操作,就有可能被用于钓鱼欺骗。防御此问题最简单的方法就是通过android:exproted来关闭receiver对外部应用的响应,但可能在同一公司开发的一些产品之间需要进行相互广播通讯,此时就可采取DoDo在文中提到的另一种方法:在receiver方的androidmanifest.xml中增加
自定义权限项,并在sendbroadcast方得androidmanifest.xml中增加
if(index($cont[$line],”android:exported=“flase”“) >-1){ print ”[安全]:Broadcast Receiver:$Receiver 禁止被外部调用!“; $CheckComponentResult .= ”[安全]:$Receiver 禁止被外部调用!“;}elsif(index($cont[$line],”android:permission=“) == -1){ print ”[低危]:Broadcast Receiver:$Receiver 可被外部调用,可能造成钓鱼欺骗,建议添加 android:exported=“flase”!“; $CheckComponentResult .= ”[低危]:Brodcat Receiver:$Receiver 可被外部调用,可能造成钓鱼欺骗,建议添加 android:exported=“flase”!“; ……省略……}
除receiver和content provider的权限问题外,其它组件如service和activies也可能存在权限安全问题,亦可将其列入检测范围。
0x15 其它
除上文中提到的各个安全检查点之外,读者还可进行扩充,比如其它组件权限、XSS、SQL注入检测、内存泄露、intent fuzzing等多个方向进行分析,DoDo’s Blog上面也有一些安全文章可作为参考,大家如果有什么好的思路或检测点也可邮件与本人交流:riusksk@qq.com。
0x20 自动化审计工具——DroidAppAuditter
对于业务量较大的公司,Android软件产品可能会很多,若一一通过手工检测,就会影响到效率,因此实现一款自动化审计工具是非常有必要的,至少可以减轻工作量,以腾出更多的时间出来看片……笔者将此审计工具命名为DroidAppAuditter,主要用Perl语言编写的,支持Android模拟器和实体机,可自动安装apk文件并运行软件,然后实现动态自动化检测,并图文并茂地输出分析报告。最后这里附上一份输出的完整分析报告,如下图所示,报告中的漏洞已于年修复:
0x02 业界Android软件安全现状
2011年我们借助自动化审计工具DroidAppAuditter,对业界各个主流Android软件进行安全审计,共审计了29个国内流行的Android软件,其中存在明文保存密码的有10个,其它XSS漏洞、明文传输,以及隐私窃取的行为共有12个,所有被审计的软件有超过一半是存在安全漏洞的。由此可见,目前android软件安全还未受到业界重视,但这也将成为今后发展的趋势。最后附上审计结果的部分截图,如下图所示:
0x03 总结
本文主要探讨了Android软件的一些常用安全检测点,并通过代码实现自动化审计工具,希望对各位有所帮助,如果你有更好的检测方案,也可与本人探讨。至于审计工具,由于各种原因就不公开了,因为我相信:“授人以鱼不如授人以渔”。
0x04 关于我们
腾讯安全应急响应中心(Tencent Security Response Center)简称TSRC,是腾讯公司负责突发安全事件处理的团队,如果您对腾讯产品和业务有任何安全上的建议和意见可以与我们联系,也欢迎有意在互联网安全行业发展的同学加入我们。
邮箱:security#tencent.com
Android面试题总结 第11篇
1.简述Activity的生命周期?
1)Activity的生命周期通过7个生命周期方法onCreate(),onRestart(), onStart(), onResume(), onPause(),onStop(),onDestroy()来体现。2)其中6个生命周期方法是成对对应起来的,哪里创建的对象,一般应该在其对应的方法中销毁。
onCreate()--onDestroy()onStart()--onStop()onResume()--onPause()3)当程序启动之后,第一个Activity经过的生命周期方法是:onCreate()→onStart()→ onResume()方法,当第一个Activity A启动第二个Activity B的时候(备注:第二个Activity完全遮盖住第一个Activity,并且这个过程中没有出现点击Home键,或者第一个Activity被杀死等异常情况,并且两个Activity的启动模式是标准模式),这两个Activity经历的生命周期方法是:
A onPause()→ B onCreate()→ B onStart()→ B onResume()→ A onStop()→(此时Activity A已经在回退栈的最低端,Activity B已经在Activity A的上面,在回退栈的最顶端)当通过点击后退键退出Activity B的时候:
(此时Activity B 弹出回退栈)→ B onPause()→ A onRestart()→ A onStart()→ A onResume()→ B onStop()→ B onDestroy()此时B 被销毁
2.简述Service的生命周期?
1).如果在Activity中通过调用startService()方法启动一个Service的话,那么生命周期是:
onCreate()→ onStartCommand()→ 运行中 →(如果自己或者客户端(如Activity)调用了stop Service的方法的话)→ onDestroy()2).如果在Activity中通过调用bindService()方法启动一个Service的话,那么生命周期是:
onCreate()→ onBind()→ 运行中 →(如果有客户端(Activity)调用了unBindService()方法与Service解除绑定时)→ onUnbind()→ onDestroy()3.有几种控件布局的方式?
1)RelativeLayout:相对布局,可以根据相对位置来调整控件的位置。推荐使用相对布局,更利于屏幕的自适应。2)LinearLayout:线性布局,控件之间的水平排列或者垂直排列。但是如果要想构建复杂布局,要进行多层的LinearLayout布局嵌套,但是这样会运行布局载入效率。
3)FrameLayout:帧布局,控件与控件之间处于上下叠加的状态。
备注:还有两个已经不怎么用的布局:TableLayout:表格布局 AbsoluteLayout 绝对布局。
布局实现方式有两种:xml文件静态实现,代码动态实现。
一般xml文件中可以实现布局控制的话,就不建议放在代码中实现布局控制,因为在xml文件中实现布局控制,可以做到布局与代码分离。4.有几种数据存储方式,分别是什么? 1)SQLite数据库存储结构化数据。
2)文件存储:分为内部存储和外部存储(SD卡)两种存储方式。3)SharedPreferences共享参数,键值对形式存储。4)网络存储。
5.IntentService与Service有什么区别? IntentService是Service的子类
1)Service如果要处理异步请求(如耗时操作)的话,需要自己启动一个worker thread,如果启动多个worker thread来处理相关事务的话,各线程之间无法很好的控制。而IntentService可以将多个异步请求的Intent放入队列中,封装了一个开启worker thread的onHandleIntent()方法,来依次处理放入队列中的Intent,只有一个worker thread在运行,同一时刻只有一个Intent被处理,当一个Intent处理完了之后才会处理另外一个Intent。
2)Service可以通过startService()或者bindService()方法来启动,而IntentService则是通过startService()方法来启动。3)Service适合多线程处理异步请求。而IntentService则适合处理需要排队的请求。
6.StartService与bindService之间的区别?
1)StartService启动了Service之后无法与Activity之间进行通信,与现有的Activity分离,即使Activity被杀掉了之后,Service还可以运行,同时通过设置Service的粘性,还可以让Service被杀掉之后,可以自启动。而bindService启动Service之后,与绑定的Activity之间有关系,可以依据Server/Client模式来进行通信(binder客户端主动请求模式,或者通过信使),但是无法设置Serrvice的粘性。2)StartService启动的Service,Activity中可以调用stopService()方法来结束一个Service,或者通过Service自己调用stopSelf()方法来结束Service。而bindService只能通过Activity()来调用unbindService()方法来结束Service,Service会调用onUnBind()方法,以及onDestroy()方法。
7.ArrayAdapter BaseAdapter CursorAdapter的区别?
ArrayAdpter CursorAdapter都是BaseAdapter的子类。都是用来填充那些含有item的控件。
1)主要区别是数据来源不同。ArrayAdapter数据来源是Object数组,CursorAdapter数据来源是数据库的Cursor,而BaseAdapter适合创建复杂自定义的item内容,通过继承BaseAdapter类,重写相关方法来实现。
8.Handler与Looper之间的关系? 1)Handler和Looper的关系就好比,坐地铁过安检时候:每一个人可以理解为一个Handler,一个人的一个或者多个东西看做Message而循环滚动的检查台装置可以看做是Looper,而要检查的东西排成队列可以理解为MessageQueue消息队列。
2)Looper是Handler和MessageQuene之间的桥梁,Looper将Handler发送过的消息放入MessageQueue,同时Looper也将MessageQueue中的Message发送给Handler来处理。
9.res文件夹与assets文件夹有什么区别? 1)res文件夹中的资源在会在R.java文件中生成ID,代码中可以直接通过R.id的形式来访问。而assets文件夹中的资源不会在R.java文件中生成ID,需要通过AssetsManager通过IO流的方式来访问。
2)res文件夹中的文件会被压缩,而assets文件中的文件不会被压缩。
3)Res不能自定义目录名,不支持多层目录。而assets支持自定义目录名,支持多层目录。
10.广播接收器有几种注册方式,分别是什么?