抓包进阶之通杀okhttp证书
0x01 通杀okhttp-ssl-pinning思路所谓通杀:就是不管有没有混淆,都可以将对应的类识别出来。。。
本质上还是hook对应的类,对应的方法。但是这些方法和类都是做了混淆处理的,怎么在所有类中识别出来特定的类和方法是通杀的关键。。。
第一次校验:X509TrustManagerOKHttpClient.Builder builder = new OKHttpClient.Builder();builder.sslSocketFactory(factory, (X509TrustManager) trustManagers[0])
X509TrustManager是TrustManager接口的一个实现类,主要校验是通过TrustManager接口下的checkServerTrusted函数。
X509TrustManager是通过对checkServerTrusted函数进行重新实现SSLPinning。
上节课的hook思路为:只要是实现了TrustManager接口的类,都hook里面的checkServerTrusted方法。
本节课换思路:Hook掉sslS ...
抓包之sslunpinning
0x01 客户端段SSL证书绑定SSL Pinning 也称为证书锁定,是Google官方推荐的检验方式,意思是将服务器提供的SSL/TLS证书内置到移动客户端,当客户端发起请求的时候,通过对比内置的证书与服务器的证书是否一致,来确认这个连接的合法性。
SSL Pinning 一般实现方式有两种
一种是在代码层进行校验
一种是通过配置文件network_security_config.xml进行配置实现校验。
代码层实现以常见的OKHttp网络框架举例,在代码层面校验证书的代码如下:
详细的代码实现可以参考:
https-capture/NetCaptureTest/app/src/main/java/com/actorn/netcapture/MainActivity.java at main · act0rn/https-capture (github.com)
配置文件实现通过 res/xml/network_security_config ...
Http抓包之R0Capture
一 R0Capture介绍1. 下载地址r0ysue/r0capture: 安卓应用层抓包通杀脚本 (github.com)
2. 介绍
仅限安卓平台,测试安卓7、8、9、10、11、12、13、14 可用(禁止模拟器) ;
无视所有证书校验或绑定,不用考虑任何证书的事情;
通杀TCP/IP四层模型中的应用层中的全部协议;
通杀协议包括:Http,WebSocket,Ftp,Xmpp,Imap,Smtp,Protobuf等等、以及它们的SSL版本;
通杀所有应用层框架,包括HttpUrlConnection、Okhttp1/3/4、Retrofit/Volley等等;
无视加固,不管是整体壳还是二代壳或VMP,不用考虑加固的事情;
3. 用法Usage
Spawn 模式:
$ python3 r0capture.py -U -f com.coolapk.market -v
Attach 模式,抓包内容保存成pcap文件供后续分析:
$ python3 r0capture.py -U 酷安 -v -p iqiyi.pcap
...
Android HTTPS防抓包策略总结
0x01 前言在对移动App安全测试时,通常第一步是对App的网络请求报文进行抓包。因为App客户端可以实现对HTTPS证书进行校验以防止抓包,为了对抗证书校验,一般会采用信任代理工具签发的证书、安装插件绕过证书检测等方法。
本文将对常用的证书校验方式及相应的对抗方法做个简单总结。
0x02 了解HTTPS证书在HTTPS握手建立链接时,会使用非对称算法协商通讯使用的加密密钥。非对称加密算法需要两个密钥:公钥和私钥。
通常所说的HTTPS证书就可以理解为公钥,为了确保客户端收到的证书的真实性,于是诞生了CA机构,CA机构颁发的证书也叫CA证书,防止CA证书被伪造,同时避免套娃,因此在操作系统中内置了一个信任库,里面保存了可信任的CA证书集合,也称为系统根证书,用于校验服务端返回的证书的真实性。在Android系统中,可以点击 设置-系统安全-加密与凭据-信任的凭据查看默认信任的CA证书。
0x03 证书校验&对抗在使用HTTPS协议进行网络通讯时,对HTTPS证书校验有多种处理方式,包括
忽略证书链校验
系统证书链校验
证书绑定(SSL Pinning,代码校验和配置 ...
算法还原之RSA
一 简介RSA加密算法是一种非对称加密算法,所谓非对称,就是指该算法加密和解密使用不同的密钥,即使用加密密钥进行加密、解密密钥进行解密。在RAS算法中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,由于无法计算出大数n的欧拉函数phi(N),所以不能根据PK计算出SK。
也就是说,对极大整数做因数分解的难度决定了RSA算法的可靠性。理论上,只要其钥匙的长度n足够长,用RSA加密的信息实际上是不能被解破的。
RSA算法通常是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,即信息采用改进的DES或IDEA密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。对方收到信息后,用不同的密钥解密并可核对信息摘要。
RSA密钥长度随着保密级别提高,增加很快。下表列出了对同一安全级别所对应的 ...
算法还原之AES
参考文章:
https://blog.csdn.net/xnxqwzy/article/details/136698541
https://www.cnblogs.com/yunshangkanjing/p/12765147.html
https://blog.csdn.net/qq_43529443/article/details/117386078
https://blog.csdn.net/weixin_44767965/article/details/122520302
一 AES简介高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图:
下面说明一下各个字段的作用与意义:
明文p:
没有经过加密的数据。
密钥K:
用来加密明文的密码,在对称加密算法中,加密与解密的密钥是相同的。
密钥为接收方与发送方协商产生,但不可以直接在网络上传输,否则可能会导致密钥泄露,通常是通过非对称加密算法加密密钥,然后再通过网络传输 ...
算法还原之对称加密模式及填充
一 前言根据上节课DES的加密流程,利用CyberChef来测试
会发现除了输入plainText 和 key之外,还需要选择模式Mode和偏移量iv:
上面是ECB模式,默认可以不输入iv,但是将Mode修改为CBC后,就会报错。要求必须输入iv的值
根据上节课的原理,要求输入的明文必须为64位/64位的倍数。但是这块将输入调整为 “1234567”,56位,发现也是可以正常加密的
这块是因为当输入明文不满足64位的倍数的时候,会对明文的长度进行填充。。。
二 加密模式加密模式可以简单理解为,在加密前/加密后,对用户的输入/输出进行处理。分组密码常见的加密方式主要有5种:
ECB:电子密码本模式(不需要传入iv)
CBC:密码块链接模式
CFB:密文反馈模式
OFB:输出反馈模式
CTR:计数器模式
明文分组是指分组密码算法中作为加密对象的明文。明文分组的长度与分组密码算法的分组长度是相等的。密文分组是指使用分组密码算法将明文分组加密之后所生成的密文。
ECB模式在ECB模式中,将明文分组加密之后的结果将直接成为密文分组。
ECB模式 ...
算法还原之DES
一 DES原理介绍可以参考下面这篇文章,讲解的很详细:
https://blog.csdn.net/Demonslzh/article/details/129129493
DES算法采用分组密码,将明文分成64位一组,密钥长度为56位。其基本原理是通过一系列的置换、替换和异或运算,利用密钥对数据进行加密和解密。
DES为对称加密算法
DES还是一种分组加密算法,算法每次处理固定长度的数据段,称之为分组
DES算法过程的关键是从给定的初始密钥中得到16个子密钥的函数
要加密一组明文,每个子密钥按照顺序(1-16)以一系列的位操作施加于数据上,每个子密钥一次,一共重复16次
DES算法的分组大小是64位,因此,如果需要加密的明文长度不足64位,需要进行填充;如果明文长度超过64位,则需要使用分组模式进行分组加密。
虽然DES算法的分组大小是64位,但是由于DES算法的密钥长度只有56位。
子密钥k的生成DES算法采用了每轮子密钥生成的方式来增加密钥的复杂性和安全性。每轮子密钥都是由主密钥(64位)通过密钥调度算法(Key Schedule Algorithm)生成的。DES算法的密 ...
算法还原之哈希算法总结
一 常见哈希算法介绍哈希算法对比
算法
返回值长度(hex)
初始化链接向量(hex)
常量表(k表)【个】
MD5
32byte
32byte(4个)
64
SHA1
40byte
40byte(5个)
4
SHA256
64byte
64byte(8个)
64
SHA512
128byte
128byte(8个)
160(32byte)
初始化链接向量MD5:4个=32byte
context->state[0] = 0x67452301;context->state[1] = 0xefcdab89;context->state[2] = 0x98badcfe;context->state[3] = 0x10325476;
SHA1:5个=40byte
#define INIT_DATA_h0 0x67452301UL#define INIT_DATA_h1 0xefcdab89UL#define INIT_DATA_h2 0x98badcfeUL#define INIT_DATA_h3 0x1032547 ...
算法还原之SHA1
一 sha1算法原理SHA1算法是Hash算法的一种。SHA1算法的最大输入长度小于2^64比特的消息,输入消息(明文)以512比特的分组为单位处理,输出160比特的消息摘要(密文)
整个算法的核心是一个包含4轮循环的模块,每轮循环由20个步骤组成。
具体实现步骤如下:
1 附加填充位消息必须进行填充,以使其长度在对512取模以后的余数是448。也就是说,(填充后的消息长度)%512 = 448。即使长度已经满足对512取模后余数是448,填充也必须要进行。填充的规则是填充一个“1”和若干个“0”使其长度模512和448同余。然后附加64比特的无符号整数,其值为原始消息的长度(这块和MD5是一样的)
2 附加长度信息后面的64比特位,用来填充长度信息,长度单位为比特。(这块和MD5一样)
3 信息分组处理经过添加位数处理的明文,其长度正好为512位的整数倍,然后按512位的长度进行分组,可以得到一定数量的明文分组,这块可以用Y0,Y1,Y2,…,YN-1来表示,对于每一个分组,进行处理。(这块和MD5一样)
而对于每个512位的明文分组,SHA1将其再分成16个更小的明文 ...