当前位置:安全客 >> 知识详情

安卓Hacking Part 1: 应用组件攻防(连载)

2014-12-05 10:47:06 阅读:0次 收藏 来源: 360安全播报

最近小编在学习安卓hacking的时候发现老外的一套不错的教程,由浅入深,适合新手科普,准备陆续给大家翻译出来跟大家共同学习,欢迎交流!

***********************************我是万恶的分割线*****************************************


随着手机应用的快速增长,手机应用安全成为了目前安全界最热门的一个话题。在这篇文章中,我们来看一下怎样攻击安卓应用组件。

什么是安卓应用组件?

应用组件是组成安卓应用的关键部分。每个应用都是由一个或者多个组件组成,并且每个都是单独调用。这里主要分为4个主要的组件,介绍如下:

Activity: 是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务(例如打电话,发短信等)

Service(服务): 在后台提供持续性服务,并不需要一个用户界面

Content Providers(内容提供者): 以表格的形式把数据展现给外部的应用。换句话来说Content Providers可以被认为是连接两个处理器的之间的接口。

Broadcast Receivers(广播接收器): 广播接收器是一个接受系统级广播的组件,(例如电量低,重启,耳机插入等)尽管大部分广播都是由系统发出,应用本身也可以发起广播。

背景知识:

####################

相关代码下载(http://yunpan.cn/cfs8zHiW8rf5g  提取码:20c3)

如下图展示,这个应用有两个Activity。第一个Activity接受一个密码输入,如果用户输入了正确的密码他就能够进入“私有区域”,否则他会收到一个密码错误的警告。本文中使用的密码为”password”。我们这里使用黑盒测试的方法来尝试突破密码保护。

t01e061e72c707511b0.png

http://p9.qhimg.com/t01c4986b8891f8f19c.png

准备工作:

安装安卓SDK

一个没有root的安卓手机

信息收集:

1.使用APK tool反编译应用

2.分析AndroidManifest.xml文件中的Activity组件

每一个安卓应用都有一个包名称,每一个Activity都有对应的类名称。第一步就是找到包的名称和敏感的类名称。尽管有其他的方法获得这些信息,AndroidManifest.xml是好方法之一。我们可以通过反编译应用来获得这个文件。

1.下载APKTOOL (https://code.google.com/p/android-apktool/downloads/list)

2.把程序放置在跟APKTOOL同级目录中

3.使用以下命令来反编译apk文件:

apktool d testapp.apk

t01908bce24013da8f2.png

反编译完毕,我们可以看到一个”testapp”目录,其中有一个AndroidManifest.xml文件

t010dbc68454b3f4272.png

现在我们需要搜索包名称和Activity组件

所有的Activity都会显示在<activity></activity>标签当中,因此在这些标签中的内容就是一个Activity。查看这个AndroidManifest.xml文件,我们可以找到两个Activity组件:

t01b7e6af73abcd5f92.png

通过分析AndroidManifest.xml,我们获得了以下信息。

com.isi.testapp 是包的名称

com.isi.testapp.Welcome 是正确登录后的界面

攻击脆弱的Activity组件:

我们的目标是:绕过密码进入登录后的界面

未实现目标,现在有几个途径:

1.使用Activity Manager启动敏感的Activity

2.使用一个恶意的应用调用其他应用的Activity

3.使用Mercury框架来发动这种攻击,此框架会在之后的文章中使用

使用Activity Manager启动敏感的Activity

Activity Manager是一个安卓SDK中附带的工具,这个工具可以被用来调用应用的Activity或者服务。我们也可以使用它来绕过。

1.把设备连接到电脑上,使用”adb shell”获得一个shell

2.使用” am start –n com.isi.testapp/.Welcome”来启动Welcome Activity

我们现在就可以看到Welcome Activity而不需要密码。

使用一个恶意的应用调用其他应用的Activity

另一个调用其他应用的Activity的方法是写一个恶意的应用,让它通过包名称和Activity名称来调用。下图展示了程序部分代码。在我们这个案例中,恶意程序不需要申请额外权限来调用Welcome Activity。

t01fdc59b26baa17414.png

使用Mercury框架

这中攻击也可以使用Mercury框架来实现,我们在之后的课程中还会再介绍。

保护应用程序组件

1.设置android:exported属性为false

在AndroidManifest.xml文件中,我们应该设置下面的属性来保护应用。在我们的案例中com.isi.testapp.Welcome是我们要保护的Activity

t017697bb382001955a.png

上面的代码限制了其他应用或者系统组件调用这个Activity。只有拥有和这个应用相同的user id才能够访问这个Activity。

2.通过权限控制限制访问

android:exported属性不是唯一的限制措施。我们还可以通过基于权限的方法来定制一个Activity的权限。这个可以限制应用之间的访问权限。

注意:以上讨论的安全措施适用于安卓的其他应用组件。

参考:

http://developer.android.com/guide/components/index.html

原文地址:

http://resources.infosecinstitute.com/android-hacking-security-part-1-exploiting-securing-application-components/

目录

安卓Hacking Part 1: 应用组件攻防(连载) 

安卓Hacking Part 2: Content Provider攻防(连载)

安卓Hacking Part 3:Broadcast Receivers攻防(连载) 

安卓Hacking Part 4:非预期的信息泄露(边信道信息泄露)

安卓Hacking:Part 5:使用JDB调试Java应用 

安卓Hacking Part 6:调试Android应用 

安卓 Hacking Part7:攻击WebView

安卓Hacking Part 8:Root的检测和绕过

安卓hacking Part9: 不安全的本地存储:Shared Preferences 

安卓Hacking Part 10:不安全的本地存储

安卓Hacking Part 11:使用Introspy进行黑盒测试 

安卓Hacking Part 12: 使用第三方库加固Shared Preferences 

安卓Hacking Part 13:使用Drozer进行安全测试 

安卓Hacking Part 14:在没有root的设备上检测并导出app特定的数据 


本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:

参与讨论,请先 | 注册 | 匿名评论
发布
用户评论
ruchi 2017-12-19 19:59:56
回复 |  点赞

A very well-developed post with step by step guidance on Ethical Hacking. The way you explained each point with necessary details and maintained the good balance between theory and practice is really commendable.I have a dream I want to join some cybersecurity team in the country that’s why I am looking for an online course, I want to learn Offensive Security, Mobile App Security, Network Security, Web App Security, Exploit Development, etc.And also want to be a Hacker.please help me how can I be Hacker?

吃瓜群众 2017-12-05 00:21:17
回复 |  点赞

你好,下载链接失效了,国外原文中很多个apk文件也找不到了,可否分享一份到github?

yuan_baobao 2014-12-05 11:20:07
回复 |  点赞

正在验证并翻译Part2啦,有好的建议欢迎回复!

2017-11-23 11:25:26
回复 |  点赞

可以直接去原文下载

360U638532406 2017-09-14 10:38:44
回复 |  点赞

这套教程非常不错,但是链接失效了,跪求再发一次,感谢。

360U638532406 2017-09-14 10:38:44
回复 |  点赞

这套教程非常不错,但是链接失效了,跪求再发一次,感谢。

小高11110000 2015-08-06 16:54:06
回复 |  点赞

不错 很好

SudoHac 2014-12-24 15:48:41
回复 |  点赞

测试正常,可能是提取码输错了

360U996826977 2014-12-24 11:29:59
回复 |  点赞

相关代码下载(http://yunpan.cn/cfs8zHiW8rf5g 提取码:20c3) 提取码错误?

360U996826977 2014-12-24 11:29:59
回复 |  点赞

相关代码下载(http://yunpan.cn/cfs8zHiW8rf5g 提取码:20c3) 提取码错误?

2014-12-06 19:11:02
回复 |  点赞

灰常感谢!

360U346011283 2014-12-05 16:51:51
回复 |  点赞

不错的教程

聂焱_2012 2014-12-05 15:29:05
回复 |  点赞

>&#39;&#39;&#39;1/

查看更多