Android抓包理论浅析
The following article is from 编码安全 Author 编码安全
背景
在android逆向分析或爬虫的时候,必然需要对APP的通信数据包做抓取和分析。
抓包主要是针对APP中的网络通讯数据,在客户端向服务端上报的过程中将数据进行拦截。
一般是抓取HTTP、HTTPS、TCP、UDP这些通信过程中的网络数据包。
在android系统中7.0版本对网络数据包抓取是一个分割层,在android 7.0之前,通过抓https 数据包都是通过安装中间人正式的方式进行抓包。Android7.0之后,因此需要结合对hook方式进行抓包。
抓包方式
Hook app中的业务层,根据业务代码逻辑找到触发请求的函数,例如按钮触发数据上报提示框等,通过分析后找到发送数据包函数进行做hook打印。
系统框架层的hook,直接hook系统源码发送和接收数据的函数。
中间人抓包,通过使用工具charles、fiddler、burp等工具进行数据包拦截抓取,中间人抓包在HTTP请求时,抓包软件的证书在中间伪装服务端接收客户端的数据请求。接着冒充客户端,发送数据请求给服务端。在中间拿到客户端和服务端通信的数据。
网卡抓包、路由器抓包。
Hook抓包
通过网络模型图,http通信的数据包是处于应用层的一种封装,所以要抓取tcp数据包的时候就可以抓取http包。http最终也是调用tcp连接来传输数据的。所以就可以直接分析tcp通信的调用流程就可以了。在调用链中。任意一个含有我们传递参数的位置都可以打印出想要的明文信息。
hook更加完整的数据包方式
1、找到tcp请求发送数据的native函数处
2、hook函数打印发送的数据以及目标服务器地址、端口。
3、找到tcp请求接受数据的native函数处
4、hook函数打印接收的数据以及目标服务器地址、端口。
https实际上就是http+ssl。由于http发送的数据直接就是明文。安全性非常差。https会在数据发送前,先用ssl进行加密。
中间人抓包
通过charles、Burp Suite、fiddler等工具进行抓包,都是采用中间人的方式抓包。由于https使用的是加密方式,需要使用证书的公钥去交换加密再发送数据。通过客户端向服务端发送网络数据时,中间人就假装自己是服务端。抓包工具将自己证书的公钥发送给客户端,然后拿到客户发送的数据后,再伪装成客户端,把自己的证书公钥发送给服务端。大概可以理解成一个双面间谍。客户端面前冒充服务端,服务端面前冒充客户端。
HTTPS都是基于TLS协议的, 它的特点就是需要确认传输双方的身份。确认了身份之后再传输数据, 这样就能避免中间人攻击了。
防止中间人抓包的方案:服务端上进行检测客户端交互使用的证书是否是正确的。
点个在看你最好看