安卓安全学习之从环境搭建到activity劫持
安卓环境的搭建 方法1 :eclipse+sdk+ADK+JDK
百度:
https://blog.
方法2:eclipse+adt-bundle
下载地址:
http://dl.
方法3:JDK+Android Studio
安卓框架简要说明
1.Android 操作系统是一个软件组件的栈,分为五部分和四个主要层
android 四个主要层从底层到应用分别是
1).linux 内核层 (linux kernel)
提供大约115 个linux 补丁,提供了基本的系统功能,进行管理,内存管理,设备管理等
2).程序库分为两个部分
android 程序库
基本的java程序库,比如是用户界面构建,图形绘制和数据库访问
android 运行时
这个部分是Dalvik虚拟机的关键组件,
3)应用框架
以jiava的形式提供很多的高级服务,
比如:活动管理者,内容管理,资源管理,视图管理等。
4)应用程序
就是android 程序,比如游戏等
2.安卓应用程序组件:
主要为以下四大组件
Activities 描述UI 并且处理用户和机器屏幕的交互
Services 处理应用程序关联的后台操作
Broadcast Receivers 处理操作系统和应用程序之间的通信
Content Providers 处理数据和数据库管理方面的问题
Activities:一个活动标识一个具有用户界面的单一屏幕,
列子: 一个邮件应该可以包含,一个活动用于显示新邮件列表,另一个用来编写邮件,再一个活动是Activity类的子类
Service: 是运行在后台的,执行长时间操作的组件,比如在看小说的同时播放音乐
broadcast receivers:广播接收 程序间消息的通信
content providers:一个程序到另一个程序提供数据。
3.安卓程序文件界面说明:
src :包含项目所有的.java 源文件,
gen :包含编译器生成的R.文件,引用了所有的项目中的资源,该文件不能被修改
bin : 这个文件包含Android 由APT 构建的.apk 包文件,以及安卓应用程序的其他东西
res/drawable-hdpi: 这个目录下包括所有的高密度屏幕设计所需的deawable对象
res/layout 用于放置定义用户界面的文件
res/values 这个目录存放各种各样的资源xml文件-一般用于颜色的定义
androidmanfest.xml 这个是应用程序的清单文件,描述程序的特性和应用程序的各种组件说明(相当于说明书)
Fragments 代表活动中的第一个行为或者一部分用户界面
Views 绘制在屏幕上的UI元素,包括按钮和列表等
Layouts 控制屏幕格式,展示视图外观的view的继承
intents 组件间的消息连接线
Resources 是外部元素,列如字符串资源,常量资源等
manifest 应用程序的配置文件(主要文件说明)
(主要活动的文件代码是放在MainActivity.java 里面,这是实际的应用程序文件,将要被转化位Dalvik的可执行文件运行.而Manifesst文件。是一个说明书。声明所有的组件,这个文件是Android 操作系统和应用程序之间的接口,因此,如果没有在这个文件中声明你的组件,将无法被操作系统识别。)
如下面:
(String文件时在res/value 文件夹下,它包含应用程序使用到的所有文本,列如,按钮,标签,默认文本,以及其他相识的strings
Layout文件按 这个文件就是构建程序界面的,可以改变应用程序的布局,在"Hello World" 这个文件有默认的布局)
如下:
创建及程序运行
创建名为qwe的虚拟机
选择手机型号最好选择低版本好调试
接下来就是创建安卓程序
默认就是helloword 直接点击运行MainActivity.java文件,看虚拟机是否有程序生成
hello word 成功
Activity劫持原理及实现
1.activity的调度机制
android 的调度机制为了用户体验,对于不同的应用程序之间的切换,基本上是无缝的
切换的只是一个activity而已,前面提到过acitivity控制了前端和用户的交互,界面的展示
当一个界面切换到另一个界面,那么当前界面就会被覆盖,android 系统的调度是由android系统的ams的activity管理服务 ,如果要切换界面,消息先传到ams, 当AmS收到要启动或停止Activity的消息时,它先更新内部记录,再通知相应的进程运行或停止指定的Activity。当新的Activity启动,前一个Activity就会停止,这些Activity都保留在系统中的一个Activity历史栈中。每有一个Activity启动,它就压入历史栈顶,并在手机上显示。当用户按下back键时,顶部Activity弹出,恢复前一个Activity,栈顶指向当前的Activity。
2.由调度机制引起的android 设计缺陷--activity 劫持
如果在启动一个activity 时,我们加入一个标志位FLAG_ACTIVITY_NEW_TASK,他就会置顶
马上呈现给客户,这样问题是,假设我们有一个恶意程序不停的扫描当前进程,当切换界面的进行启动的时候,就启动一个伪装的activity ,如果这个activity是登陆界面,那么钓鱼成功
实现原理:
如果我们注册一个receiver,响应android.intent.action.BOOT_COMPLETED,使得开启启动一个service;这个service,会启动一个计时器,不停枚举当前进程中是否有预设的进程启动,如果发现有预设进程,则使用FLAG_ACTIVITY_NEW_TASK启动自己的钓鱼界面,截获正常应用的登录凭证。
编写劫持代码:
原理:第一在后台开启一个线程,循环家庭前台进程是否为目标进程,如果是拿用intent启动伪造页面到前台,只需要发送上面提到的FLAG_ACTIVITY_NEW_TASK
将劫持程序加入虚拟机
我们劫持代码是通讯录,所以点击通讯录程序弹出界面:
如何防止app劫持:
当劫持发生时当前activity 一定会被压到后台,然后前台弹出我们的钓鱼窗口
而如何判断是用户自身点击进入后台是关键,点击home键和返回键,所以排除这两种方式其他方式就是劫持了这是一种简单的检测思路吧,具体代码实现下次学习。