双向证书认证下的通用化解决方案

目前,越来越多的app采取双向认证证书,给抓包分析带来了诸多不便。

常见的思路中,通常需要定位到代码中加载证书的位置,在此处的附近寻找证书文件以及密码。在app加固的情况下,首先需要将app脱壳,在加固的情况下,资源文件也经常会加密,拿不到真实的证书。由此可见,该种方法精准,但是工作量较大。

在另一种思路中,可以在不反编译app的情况下轻松拿到证书。可见下面的代码:

Class<?> KeyStore = cl.loadClass("java.security.KeyStore");
XposedHelpers.findAndHookMethod(KeyStore, "load", 
	InputStream.class, 
	char[].class, 
	new XC_MethodHook() {
	@Override
	protected void afterHookedMethod(MethodHookParam param) throws Throwable {
		File sdCardDir = Environment.getExternalStorageDirectory();
		File sdFile = new File(sdCardDir, "client.pfx");
		OutputStream out = new FileOutputStream(sdFile);
		KeyStore ks = (KeyStore)param.thisObject;
		ks.store(out, "123456".toCharArray());
		}
	}
);

app在加载证书的时候,会new一个KeyStore对象,接着调用load方法进行加载证书文件。在load方法加载完毕后,便可以直接调用store方法将证书输出。输出的证书经过处理便可以用来抓包。具体处理流程可参考服务器校验客户端证书分析及代码

双向认证流程可参考:SSL双向认证和SSL单向认证的区别

在客户端校验证书中,通用方法可以采用JustTrustMe模块来过掉。

基于上述方法,大部分情况下,不需要对app进行逆向,即可完成双向认证情况下的抓包。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值