分享Android App安全加固行业分析报告【图】

 更新时间:2016年9月20日 19:58  点击:1633
本文人产来分享一篇Android App安全加固行业分析报告,原来的内容是ppt文件,为了方便大家浏览,直接把图片截取下来放文章上了。

鉴于当前Android App安全加固市场火爆,特整合一个当前行业内较流行的安全加固厂商的安全加固产品介绍,希望能为大家拨开迷雾,见安全加固之真章!

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

分享Android App安全加固行业分析报告【图】

UXSS是一种利用浏览器或者浏览器扩展漏洞来制造产生XSS的条件并执行代码的一种攻击类型,本文我们来看看Android UXSS阶段性小结及自动化测试。

0x00 科普

WebView(网络视图)android中加载显示网页的重要组件,可以将其视为一个浏览器。在kitkat(android 4.4)以前使用WebKit渲染引擎加载显示网页,在kitkat之后使用谷歌自家内核chromium。

Uxss(Universal Cross-Site Scripting通用型XSS)UXSS是一种利用浏览器或者浏览器扩展漏洞来制造产生XSS的条件并执行代码的一种攻击类型。可以到达浏览器全局远程执行命令、绕过同源策略、窃取用户资料以及劫持用户的严重危害。

同源策略所谓同源是指,域名,协议,端口相同,浏览器或者浏览器扩展共同遵循的安全策略。详见: http://drops.wooyun.org/tips/151

0x01 事件

近段时间android UXSS漏洞持续性爆发涉及android应用包括主手机流浏览器、聊天软件等。下面截取几个案例。

WooYun: 搜狗手机浏览器跨域脚本执行漏洞之一

WooYun: 手机QQ安卓版两处跨域问题

WooYun: 猎豹/360/欧鹏/百度/遨游等手机浏览器安卓客户端UXSS(影响android4.4以下版本)

WooYun: UC浏览器Android最新版(4.4)跨域漏洞(不受系统版本限制)

引用某厂商对此漏洞的回应

非常感谢您的报告,此问题属于andriod webkit的漏洞,请尽量使用最新版的andriod系统。

的确漏洞产生的原因是因为kitkat(android 4.4)之前webview组件使用webview内核而遗留的漏洞。使用最新的android系统当然安全性要更高而且运行更流畅,但是有多少人能升级或者使用到相对安全的android版本了。下图来自谷歌官方2014.09.09的统计数据。

Android开发的UXSS阶段性小结及自动化测试教程

看起来情况不是太糟糕,有24.5%的android用户是处于相对安全的版本下。但是官方数据的是来google play明显和大陆水土不服。国内就只能使用相对靠谱的本土第三方统计了。下图是umeng八月的统计情况

Android开发的UXSS阶段性小结及自动化测试教程

能使用到相对安全的android系统的用户不到8%,那么问题来了~我要换一个什么的样的手机了。忘记我是个?潘苛耍?剖只?薹ㄉ?兜 kitkat也没钱换手机。那就只能选择使用相对安全的应用来尽量避免我受到攻击。于是我们收集了一些命中率较高的POC来验证到底哪些app更靠谱一些。

    https://code.google.com/p/chromium/issues/detail?id=37383
    https://code.google.com/p/chromium/issues/detail?id=90222
    https://code.google.com/p/chromium/issues/detail?id=98053
    https://code.google.com/p/chromium/issues/detail?id=117550
    https://code.google.com/p/chromium/issues/detail?id=143437
    https://code.google.com/p/chromium/issues/detail?id=143439
    CVE-2014-6041

为了方便大家也能够方便测试其他应用我们尝试写出一个自动化的脚本来完成此项工作。

0x02 测试

http://zone.wooyun.org/content/15792

下图为360浏览器在android 4.2.2下的测试结果

Android开发的UXSS阶段性小结及自动化测试教程

下图为搜狗浏览器在android 4.4.3下的测试结果

Android开发的UXSS阶段性小结及自动化测试教程

测试代码将放入github供大家参考,欢迎大神来修改

代码地址: https://github.com/click1/uxss

在线测试地址: http://uxss.sinaapp.com/index.php

0x03 对比

我们对主流手机浏览器进行了横向对比,测试对象包括:UC浏览器、搜狗浏览器、百度浏览器、360安全浏览器、欧鹏浏览器、遨游云浏览器、猎豹浏览器。测试结果见下图。

Android开发的UXSS阶段性小结及自动化测试教程

0x04 建议

厂商(仅供参考):

1、服务端禁止iframe嵌套 X-FRAME-OPTIONS:DENY 。详见:http://drops.wooyun.org/papers/104

2、客户端使用 setAllowFileAccess(flase) 方法禁止webview访问本地域。详见: setAllowFileAccess(boolean)

3、客户端使用onPageStarted (WebView view, String url, Bitmap favicon) 方法在跳转钱进行跨域判断。详见[onPageStarted (WebView view, String url, Bitmap favicon)][8]

4、客户端对iframe object标签属性进行过滤。

用户:

1、使用漏洞较少的app,及时更新app。

2、不要随意打开一些莫名其妙的链接。

3、有钱你就买新手机吧,android L马上出来了。(可以通过google play推送安全补丁,呵呵)

手机开发中地图应用是相当广范的,现在我们来看看Android开发中如何获取google Map API Key的方法。

地图应用使用com.google.android.maps这个包。通过MapView控件使用。但是之前需要申请一个用于开发的API Key,这个key会和当前的计算机用户绑定。然后通过这个key去官方申请就可以拿到一个开发用的api key了

<1>首先找到用户的debug.keystore文件,可以再”运行“里面搜debug.keystore;如:c:usersAdministrator.androiddebug.keystore

<2>接下来获取MD5指纹,网上很多说的有误。貌似新版默认是出现sha1加密的。通过添加-v 参数会显示所有。

首先运行cmd,在dos界面里,输入

keytool -list -v -keystore c:usersBystander.androiddebug.keystore

命令,然后会让你输入keystore密码,

输入:android,之后,会出现指纹认证MD5,如下:

Android开发如何获取google Map API Key

<3>去官方生成真正的api key

访问 Sign Up for the Android Maps API 输入那串值,同意条款,确定后要求用Google帐号登录。然后会拿到一个key。ok

TexturePacker是一款把若干资源图片拼接为一张大图的工具,现在我们来看看如何用TexturePacker软件实现*.pvr.ccz和png格式图片互转。

这两天在看一个安卓游戏,资源挺不错的,解压后发现animation里的图片格式全是pvr.ccz,查了下,这是做2D游戏spirit图打包后的格式,用的软件是TexturePacker,知道了软件那就知道如何解回去了。

下载TexturePacker

安装TexturePacker

将如下代码存成批处理

@echo off
path %path%;"C:Program Files (x86)TexturePackerbin"
for /f "usebackq tokens=*" %%d in (`dir /s /b *.pvr *.pvr.ccz *.pvr.gz`)
do (TexturePacker.exe "%%d" --sheet "%%~dpnd.png" --data "%%~dpnd.plist"
--opt RGBA8888 --allow-free-size --algorithm Basic --no-trim --dither-fs)
pause

将上面的批处理放在你的文件夹目录下,运行即可(支持遍历子目录)

将图片打包成pvr.czz,同样是需要一个批处理

@echo off
path %path%;"C:Program Files (x86)CodeAndWebTexturePackerbin"
for /f "usebackq tokens=*" %%d in (`dir /s /b *.png`) do (
TexturePacker.exe "%%d" --sheet "%%~dpnd.pvr" --data "%%~dpnd.plist"
  --opt PVRTC4 --allow-free-size --algorithm Basic --no-trim --dither-fs
)
pause

利用这个工具,我们来下载游戏资源图片就方便多啦,虽然此工具是商业收费的,不过也有免费版。

本文我们以图文并茂的方式来讲讲如何用 Android-X86 和 VirtualBox 搭建一个高性能的Android开发环境,学习Android的同学可以参考学习一下。

不知道有多少Android开发着对Android虚拟机的那悲剧的性能有意见,反正我的看法是:那速度实在是太坑爹了!

为什么Android虚拟机比iOS和WP7的虚拟机要慢很多呢?原因如下:

1. Android 模拟器模拟的是 ARM 的体系结构(arm-eabi),而 iOS 和 WP7 的模拟器的目标体系结构都是 x86 的,另外 iOS 的模拟器中运行的 App 也是编译为 x86 的。这样一来 Android 模拟器需要做一些额外的二进制翻译工作。

2. Android 模拟器用的是 QEMU 的全系统模式(full system),也就说它模拟时需要启动整个 GUEST 系统,初始化各种模拟设备。相反的,iOS 和 WP7 的模拟器只是 user-mode 的模拟。

3. 在 Android 模拟器之中还需要跑一个 Dalvik VM,用以执行 Android 应用的 bytecodes。

综上所述,慢的一个主要原因就是虚拟机不是跑在x86上而是模拟的ARM,有没有办法弄个x86的Android呢?

答案是当然有———开源项目Android-x86,这个牛B的开源项目将Android移植到了x86平台,系统运行的时候不再需要模拟成ARM,这样就能直接将Android装在PC或虚拟机上流畅的运行了。

万事俱备,只欠东风了,下面我就来讲一下我使用Android-X86和VirtualBox打造手机开发模拟器的整个流程

1.下载Android-x86系统镜像文件

首先下载android-x86-2.2-generic.iso(直接点击该链接),镜像文件大约82MB

2.在VirtualBox上创建虚拟机

操作系统选择Linux,版本选择Linux 2.6

2011091920493586

 

内存建议为512MB

2011091920503414

 

硬盘默认8GB即可,因为是开发用,8GB绰绰有余了

虚拟机创建好之后,还需要修改一些配置

首先是调整网卡,连接方式建议选择bridged adapter这样虚拟机在局域网中有独立IP可以方便访问,然后控制芯片要选择为PCnet-PCI II,否则Android-x86无法识别网卡

2011091917175250

 

如果你想有声音的话需要在声音设置面板将控制芯片设置为soundblaser 16

2011091917182930

 

把虚拟机的光驱设置为我们刚才下载的Android-x86 iso之后,启动虚拟机

2011091917185753

 

思想之地原创文章,谢绝转载

3.安装Android-x86到虚拟机

虚拟机启动后,你可以看到下面的画面

2011091917192456

 

第一和第二的项目是让你不用安装体验高、中DPI的Android-x86,有兴趣的话可以先运行体验一下x86的速度

我们要安装Android到硬盘,选择最后一项后回车

Installation – Install Android-x86 to harddisk

接下来我们会进入安装界面,界面效果如下

2011091917200516

 

我们选择Create/Modify partitions来创建分区

首先我们选择new来创建新分区

2011091920522868

 

选择Primary创建主分区

2011091920525582

 

分区大小采用默认大小即可

2011091917284778

 

然后我们设定该分区可以引导(选中Bootable后回车),这是分区的flag会显示boot,然后我们再选择write将修改写入到硬盘(选择write之后还需要输入yes来确认)

2011091920535959

 

分区完毕后再选择quit即可退出,退出后,我们就能看到刚才分配的新分区被识别出来了

2011091920542162

 

按下回车选择该分区,这时会询问采用什么分区格式格式化分区,建议选择ext3

2011091920544391

 

选择好格式后系统会再跟你确认一遍,输入yes安装就会开始了

安装中途会询问你是否安装Grub,这里一定要选择YES,因为我们后需要Grub来自定义启动Android

2011091920550125

 

安装Grub的时候会询问你是否将/system目录安装为读写模式(设为读写可以更方便的debug,但是会占用更多的空间和安装时间),选择yes

2011091920552694

 

回车后安装就会开始了

2011091920554221

 

安装结束后,会弹出一个菜单

三个选项分别是

运行Android

创建一个虚拟SD卡

重启

2011091920560383

 

因为我们开发肯定会用到SD卡,所以在此我们创建一个虚拟SD卡

创建时会询问SD卡的大小,根据你的需要设定即可,我在此设定的是128MB

2011091920561958

 

回车后安装程序就会开始初始化sd卡了

格式完毕后,会提示重启,此时退出虚拟机光驱中的系统盘后重启,重启后就能进入Android系统了

注意使用在Android系统中使用鼠标的时候需要设置Virtual Box禁止自动鼠标独占,否则鼠标在Android中无法正常使用

2011091920563952

 

Android-x86运行截图:

2011091920565581

 

思想之地原创文章,谢绝转载

4.自定义虚拟机分辨率

我们在开发时肯定需要测试不同的分辨率,那么如何自定义Android虚拟机的分辨率呢?

首先我们需要从Virtual Box的设定入手

打开cmd,进入Virtual Box的下你创建的虚拟机的目录,我创建的虚拟机叫Android-x86,我的账户是Administrator,在我Windows XP上的路径是

C:Documents and SettingsAdministratorVirtualBox VMsAndroid-x86

注意:

1.在不同操作系统下路径会有一些不同,请根据操作系统的实际情况寻找,原则上都是在你当前用户的个人文件夹里

2.Android-x86是我创建的虚拟机的名称,如果你的和我的不同,请修改为你创建的虚拟机的名称

在这里我们需要使用VirtualBox提供的命令行工具来给你的虚拟机添加一个自定义分辨率,例如我想添加一个现在流行的手机屏幕分辨率 480×800,那么我们输入的命令如下

“C:Program FilesOracleVirtualBoxVBoxManage.exe” setextradata “Android-x86” “CustomVideoMode1″ “480x800x16“

上面的命令中,加粗的部分是要根据你自己电脑上的情况进行修改的,相关解释如下:

“C:Program FilesOracleVirtualBoxVBoxManage.exe”

是Virtual Box命令行工具VBoxManage.exe的完整路径,请根据你电脑上安装的VirtualBox的实际路径修改

注意:如果路径中含有空格请使用双引号将整个路径包起来

Android-x86

这个是虚拟机的名称

480x800x16

这个是自定义的分辨率,请根据自己的需要修改,后面的16指的是16位颜色,请勿修改

如果你想增加更多的分辨率,请修改参数后多次运行该命令即可

2011091920582365

 

修改完毕之后,启动虚拟机,在Android的启动画面选中选项后按两次e键编辑内核启动参数,增加一个参数 vga=ask,具体流程如下

启动画面按e键

2011091920585367

 

进入新画面后再按一次e键

2011091920591190

 

这时进入内核参数编辑状态,增加参数 vga=ask

2011091920593093

 

编辑完毕后按回车保存修改结果,这时会回到上一个页面,此时按下b键启动

此时系统会提示你按回车进入分辨率选择界面,我们按回车继续

2011091920595016

 

进入页面之后,你可以看到所有系统支持的分辨率,这时请寻找你刚才设定的分辨率,在下图中,可以找到在先前设定的 480×800的分辨率,注意其前面的16进制代码360,如果想以该分辨率启动虚拟机,我们就输入360再回车即可

2011091921001954

 

回车后Android就会按照你设定的分辨率来启动了,下图是以480×800分辨率启动的Android-x86虚拟机截图

2011091921022911

 

注意:

如果你需要系统采用你指定的分辨率启动,需要在每次Android虚拟机启动的时候执行上面步骤的操作来修改内核参数启动Android

如果你想Android在启动的时候就默认进入分辨率选择画面或者默认采用你指定的分辨率启动虚拟机,那么可以参考以下步骤

1. 进入android虚拟机后按alt+F1进入命令行

2. 输入mkdir /data/fs

3. 挂载硬盘,使用下列命令

mount -t 硬盘格式 /dev/block/硬盘名称 /data/fs

硬盘格式为你虚拟机硬盘的格式,我这里是ext3 硬盘名称则是你虚拟机的

硬盘名称我这默认是sda1,表示第一个sata硬盘, linx下具体的硬盘命名规则请自行Google之

mount -t ext3 /dev/block/sda1 /data/fs

将硬盘挂在到 /data/fs文件夹上

4. vi /data/fs/grub/menu.list 编辑启动菜单列表 (vi这个命令行编辑器怎么用请自行Google之)

5. 和刚才启动时一样,在第一个kernel那一行的末尾增加 vga=ask 后保存

6. 重启虚拟机,这时候你就会发现每次Android启动的时候就会询问分辨率了

5.使用eclipse ADT在虚拟机上远程调试开发

现在虚拟机已经配置完成,下面来讲解如何使用eclipse来在上面运行和调试Android应用程序

在前面设定虚拟机的时候我把虚拟机的网卡设置成了bridged adapter,这样虚拟机在局域网中相当于一台独立电脑,你可以给它设置一个ip或者讲其网卡设置为dhcp状态来自动获取ip,我下面只讲解一下在 dhcp状态下如何查看android虚拟机ip的方法:

进入android虚拟机,按alt+F1进入命令,输入netcfg命令来查看网络状态,参考界面如下

2011091921034649

 

其中eth0就是当前的网卡,后面的ip地址就是通过dhcp获得的ip地址

弄清楚之后再按alt+F7返回图形界面

此时我们打开eclipse,进入android开发插件的设定界面,选择ddms,勾选 Use ado host, 并在ADT host value 一栏填写虚拟机的ip地址,具体界面请参看下图

2011091921041388

 

选择ok保存后,在ddms界面的device菜单上选择重启adb服务,重启后,就能看到ddms连接上虚拟机了

2011091921043722

 

接下来就能和平常一样在虚拟上运行和测试你的Android程序了,enjoy~

最后总结一下这个环境的优缺点:

优点:

1.高速,相比Android SDK的虚拟机,无论是启动还是运行,本虚拟机要快上很多很多,让你可以流畅的运行测试你的Android应用,当然,也能舒服的在电脑上体验到Android系统:)

2.可以模拟平板电脑的环境

缺点:

1.硬件支持还是悲剧,像打电话,短信,重力感应,GPS摄像头什么的你还是得去弄台真机器调试(不过这些东西本来就不是模拟器能做的)

另外补充一下虚拟机中主页、返回、关机、菜单对应的键盘按键

Home键 -> Win键

返回键 -> ESC键

挂机键 -> alt+F4

菜单键 -> 键盘菜单键,一般在右边win键和ctrl键中间

[!--infotagslink--]

相关文章

  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • 详解前端安全之JavaScript防http劫持与XSS

    作为前端,一直以来都知道HTTP劫持与XSS跨站脚本、CSRF跨站请求伪造。防御这些劫持最好的方法是从后端入手,前端能做的太少。而且由于源码的暴露,攻击者很容易绕过防御手段。但这不代表我们去了解这块的相关知识是没意义的,本文的许多方法,用在其他方面也是大有作用。...2021-05-24
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • Android模拟器上模拟来电和短信配置

    如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
  • 夜神android模拟器设置代理的方法

    夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
  • android自定义动态设置Button样式【很常用】

    为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
  • Android WebView加载html5页面实例教程

    如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
  • 深入理解Android中View和ViewGroup

    深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
  • Android自定义WebView网络视频播放控件例子

    下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
  • Android用MemoryFile文件类读写进行性能优化

    java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20
  • Android设置TextView竖着显示实例

    TextView默认是横着显示了,今天我们一起来看看Android设置TextView竖着显示如何来实现吧,今天我们就一起来看看操作细节,具体的如下所示。 在开发Android程序的时候,...2016-10-02
  • android.os.BinderProxy cannot be cast to com解决办法

    本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20
  • Android 实现钉钉自动打卡功能

    这篇文章主要介绍了Android 实现钉钉自动打卡功能的步骤,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下...2021-03-15
  • Android 开发之布局细节对比:RTL模式

    下面我们来看一篇关于Android 开发之布局细节对比:RTL模式 ,希望这篇文章对各位同学会带来帮助,具体的细节如下介绍。 前言 讲真,好久没写博客了,2016都过了一半了,赶紧...2016-10-02
  • 安全地关闭MySQL服务的教程

    普通关闭 我的mysql是自己下载的tar包,自己设定安装目录来安装的。停止mysql服务,说来简单,但不知道的话,还真是挠头。在这和mysql入门的同学们共享:)正确方法是,进入mysql的bin目录下,然后执行./mysqladmin -uroot -p shut...2015-11-24
  • Android中使用SDcard进行文件的读取方法

    首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!--...2016-09-20
  • Android开发之PhoneGap打包及错误解决办法

    下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。 在我安装、配置好PhoneGap项目的所有依赖...2016-09-20
  • 用Intel HAXM给Android模拟器Emulator加速

    Android 模拟器 Emulator 速度真心不给力,, 现在我们来介绍使用 Intel HAXM 技术为 Android 模拟器加速,使模拟器运行度与真机比肩。 周末试玩了一下在Eclipse中使...2016-09-20
  • Android判断当前屏幕是全屏还是非全屏

    在安卓开发时我碰到一个问题就是需要实现全屏,但又需要我们来判断出用户是使用了全屏或非全屏了,下面我分别找了两段代码,大家可参考。 先来看一个android屏幕全屏实...2016-09-20
  • Android开发中布局中的onClick简单完成多控件时的监听的利与弊

    本文章来为各位介绍一篇关于Android开发中布局中的onClick简单完成多控件时的监听的利与弊的例子,希望这个例子能够帮助到各位朋友. 首先在一个控件加上这么一句:and...2016-09-20