每次分析一个app,抓包环节都少不了。如果要抓包,就看app采用什么通信协议了。由于http的各种不安全性,目前大部分APP基本都使用https的通信协议。所以连抢包都变得越来越不友好了。无论是使用burpsuite还是fiddler,目前抓包工具的基本原理都是中间人的方式。原理是这些工具充当中间人,把客户端伪装成服务器,把服务器伪装成客户端。HTTPShttp即超文本传输??协议,是互联网上使用最广泛的网络协议。它是一种客户端和服务器请求和响应标准(TCP),用于将超文本从WWW服务器传输到本地浏览器,这可以提高浏览器的效率并减少网络传输。但是,它也有一些缺点。例如,通信使用明文,内容容易被窃听;通讯方身份未经核实,可能被伪装;无法证明消息的完整性,因此可能会被篡改。因此,http的增强版https应运而生。https中的s即ssl或tls,是在原有HTTP的基础上增加了数据加密、解密、身份认证的安全层。HTTP+加密+认证+完整性保护=HTTPShttps需要CA证书。我们之前提到的中间人需要将客户端伪装成真实的服务器。要求是当客户端向我们发送网络请求时,我们必须能够给指定的域名颁发证书。公钥证书,公钥证书可以通过系统的安全验证。一般来说,服务器不太关心我们是不是真正的客户端。他不管你是谷歌浏览器还是百度浏览器。当然,也有例外。我接下来要讲的双向验证就是这种情况。单向验证和双向验证首先了解一下什么是https的单向验证和双向验证,这里主要说一下双向验证。与单向验证相比,双向验证增加了服务端对客户端的认证。双向认证的详细过程如下:(1)客户端发起HTTPS请求,向服务器发送SSL协议版本信息。(2)服务器到CA机构申请CA证书。如前所述,证书包含服务器的公钥和签名。将CA证书发送给客户端(3)客户端读取CA证书的明文信息,使用相同的哈希函数计算信息摘要(哈希目的:验证和防止内容被修改),然后使用操作系统提供的CA证书公钥用于解密签名(因为签名是用CA的私钥加密的),与证书中的信息摘要相比。如果一致,则证明证书可信,然后取出服务器的公钥(4)客户端将自己的客户端证书发送给服务器,其中包含客户端的公钥:C_publickey(5)Client将支持的对称加密方案发送给服务器选择(6)服务器选择加密方案后,使用刚刚得到的C_publickey对选择的加密方案进行加密(7)client使用自己的C_privatekeyKey对选择的加密方案进行解密加密方案,客户端生成一个随机数(密钥F),用刚等待的服务端B_publickey对该随机数进行加密,形成密文发送给服务端。(8)服务器和客户端在后续的通信过程中使用这个密钥F进行通信。区别于前面的非对称加密,这里在开头介绍一种对称加密方式SSLpinningSSLpinning是一种防止中间人攻击的技术。主要机制是在客户端发起请求->接收服务器发送的证书进行验证,如果收到的证书不被客户端信任,则连接将断开,无需进一步干预。可以发现,中间人攻击的要点是伪造一个伪造的服务器证书给客户端,让客户端误以为是真的。解决办法是客户端也预置一个服务器端的证书,可以通过比对来验证。SSL-pinning有两种方式:证书固定(CertificatePinning)和公钥固定(PublicKeyPinning)。证书pinning只需要接受客户端代码中指定域名的证书,不接受操作系统或浏览器内置的CA根证书对应的任何证书。通过这种授权方式,保证了APP与服务端通信的唯一性和唯一性。安全性,因此客户端与服务端(如API网关)之间的通信可以保证绝对的安全。但是CA签发的证书有效期有问题。缺点是更新证书后需要在APP中重新构建证书。公钥锁定提取证书中的公钥并内置到客户端,通过与服务器端比较公钥值来验证连接的正确性。在制作证书密钥的时候,证书更新前后公钥可以保持不变(即密钥对不变),这样就可以避免证书有效期的问题,一般采用这种方式受到推崇的。双向认证和SSLpinning的区别一定要注意双向认证和SSLpinning的区别!SSLpinning实际上是客户端锁定服务器的证书。与服务端交互时,服务端会将CA证书发送给客户端,客户端调用函数验证服务端的证书,并与本地服务端进行比对。证书(存放在.\asset目录下或\res\raw下)用于比较。双向认证是客户端向服务器发送CA证书,服务器验证客户端证书的部分。在app上,https双向认证方案也可以防止中间人劫持,但是这种双向认证代价高昂,其安全性与SSLpinning一致。目前,大多数应用程序都使用SSL固定。突破双向认证抓包由于私钥是有密码保护的,所以主要的反向目标就是找到key-password。看了很多表弟的文章,终于学会了一些窍门。因为现在的app都会有加壳、混淆等保护措施。所以你可以去一些应用商店(比如360手机助手、豌豆荚等)下载历史版本的应用。低版本的保护不多,分析难度比较低。容易找到目标。首先是在./assets目录中查找证书。它确实受密码保护。继续往下看可以看到一些相关信息。这个getSocketFactory是关键函数。您可以看到EncryptUtils函数。看到native需要分析so层。如此进入后。你可以通过解密找到它。找到密码后,输入密码,使用xposedhook绕过SSL证书验证。从世界上最大的同性交流网站的中心下载JustTrustMe,并在xposed上安装框架。JustTrustMe的原理是hook各种已知HTTP请求库中用于验证证书的API,使得无论是否为可信证书,验证结果均以正常状态返回,从而实现绕过证书检查的效果.小结抓包是APP逆向分析的第一步,只有做好每一步,才能走向最终的成功。
