Https漏洞在安卓程序中

HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。握手过程的简单描述如下:
1.浏览器将自己支持的一套加密规则发送给网站。
2.网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
3.获得网站证书之后浏览器要做以下工作:
a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
b) 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。
c) 使用约定好的HASH计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。
4.网站接收浏览器发来的数据之后要做以下的操作:
a) 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
b) 使用密码加密一段握手消息,发送给浏览器。
5.浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。
这里浏览器与网站互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码,并且可以正常的加密解密数据,为后续真正数据的传输做一次测试。

对于https的攻击更多的是采用假证书的方法来欺骗客户端。在浏览器和网站的握手过程中,浏览器在获得网站证书后需要验证证书的合法性,在安卓程序中google 的API会对证书的合法性进行检查,检查包括以下几方面内容: 签名CA是否合法; 域名是否匹配;是不是自签名证书;证书是否过期。发现异常后即终止请求并抛出异常。因此在安卓应用开发时developer通常覆盖google的证书检查机制(X509TrustManager)来通过测试。而在覆盖的检测机制中忽略对证书的安全性检查,接受异常的 https证书,继续危险链接。

利用这个漏洞可以利用假证书来进行流量劫持 (伪造fake wifi, DNS劫持等)。

时间: 2024-10-03 10:38:59

Https漏洞在安卓程序中的相关文章

解析观察者模式在安卓程序中的应用——如何实现跨界面Handler通讯

这里特使用了github中的一个项目作为例子进行解析,地址为:https://github.com/LiqiNew/HandlerFrame/tree/master/handlerFrame/src/main/java/com/liqi/handler 本例子针对安卓程序实现了跨界面的Handler通讯.传统来说,安卓程序中的Handler是只能在一个界面类中运行的,并不能让他存在于其他的界面类,但在这个项目中,"只要在HandlerFrame里面订阅过的对象,在任何界面都可以发送信息去跟订阅对

Android新的漏洞的应用程序中的发现!

最近,趋势科技发现一些Android中的漏洞应用程序内存.来发动攻击.我们调查了两个受影响的应用程序,大家来感受一下: 1.超过一千万次安装.及在下载页面拥有数十万笔用户留言的生产力应用程序(生产力应用程序是能够提高企业生产力或者软件开发能力的软件组件.) 2.超过一百万次安装.及在下载页面拥有数千笔使用者留言的购物相关应用程序 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaXF1c2hp/font/5a6L5L2T/fontsize/400/fil

Delphi XE7的安卓程序如何调用JAVA的JAR,使用JAVA的类?

本文使用工具和全部源码下载: http://download.csdn.net/detail/sunylat/8190765 为什么我们要在Delphi XE7的安卓程序调用Java的JAR,使用JAVA的类?如果能够这样做,那么就意味着我们把Delphi开发的安卓程序扩展到了一个更大的开发范围了,理论上可以调用任意JAVA编写的代码,对于同时精通Delphi和JAVA的程序员来说,简直如虎添翼!! 我差不多用了一天时间吧,最终在老猫的帮助下,成功实现了在Delphi XE7的安卓程序中调用JA

冲向大牛之安卓:学习界面怎么在程序中画出来

今天看了一个内存管理软件,界面全是在程序中画出来的,了解后才发现原来这种内存管理软件因为界面时常在变化所以只能在程序中通过代码来实现,这就要设计到安卓中的view类了,直接上代码: import android.os.Bundle;import android.app.Activity;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android

通过assets像安卓程序目录中导入数据库文件出现错误的解决办法

错误提示如下,下面的错误信息 08-13 07:36:31.396: W/System.err(9814): java.io.IOException 08-13 07:36:31.416: W/System.err(9814):  at android.content.res.AssetManager.readAsset(Native Method) 08-13 07:36:31.416: W/System.err(9814):  at android.content.res.AssetMana

安卓开发中内存问题分析(一)工具篇

内存泄漏和内存溢出是安卓开发中经常碰到的问题,如何能够快速有效的发现并追踪内存泄漏或者内存溢出的源头,是每个开发者都需要掌握的技巧,今天我给大家带来常见的内存分析工具使用方法,希望对大家今后的开发带来帮助. 使用Eclipse分析应用内存使用情况 具体步骤如下: 1.启动eclipse后,切换到DDMS透视图,并通过Window-ShowView打开Devices视图.Heap视图 2.连接手机或者模拟器后,在DDMS的Devices视图中将会显示手机设备或模拟器的序列号,以及设备中正在运行的部

安卓开发中使用Genymotion模拟器

在安卓开发中,运行和调试自己所写的安卓程序需要用到模拟器 在一般情况下 是直接在这创建一个模拟器,但是这种自带的模拟器运行效率不佳,而且启动时间漫长 所以,我们可以换一款安卓模拟器 Genymotion安卓模拟器.详情百度 官网地址:https://www.genymotion.com/ 1.Genymotion下载安装完成 2.在eclipse中配置调用Genymotion 官网对于eclipse中插件的安装方法 要安装Genymotion的Eclipse插件 在Eclipse中,去帮助/安装

简单记录下安卓环境的搭建和第一个安卓程序的破解

来自<Android软件安全与逆向分析> 一.配置安卓环境 1.安装JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html DwonLoads->下载JDK 我下载的版本是  jdk-8u91-windows-x64.exe 一路安装好了之后,添加用户变量 JAVA_HOME 值为安装目录 I:\Android\jdk 并将I:\Android\jdk\bin添加到PATH中 CMD-> 输入ja

AndroidStudio学习笔记-第一个安卓程序

要带一个本科生做一部分跟安卓有点关系的项目,于是趁着机会学习一下编写安卓程序. 第一篇材料来自谷歌官方,传送门:https://developer.android.com/training/basics/firstapp/index.html.由于官方例程写的很清楚了,基本上只要按着步骤就好了,所以不打算完全的复制粘贴,主要实践过程中我的一些理解和思考. 1. 创建新工程 一个安卓程序的层次结构为 Application -> many activities (可以理解为很多个界面) -> l