拦截器如何放开某个路径_如何实现 Https拦截进行 非常规“抓包”

前段时间在自己做开发的时候发现一个很好用的工具,OKHttp的拦截器(何为拦截器?就是在每次发送网络请求的时候都会走的一个回调)大概效果如下:

8e327392f97509f34c8d796c8530b313.png

现在OkHttp也是谷歌推荐的一款网络请求框架。现在很火的Retrofit2也都是基于OkHttp的封装。

如果每次看Log服务器返回的数据等都需要用PostMan发请求显得有点 low,可以直接集成拦截器在发送请求的时候打印出来就如同上图,使用也很简单。

cb31b6615e6d34b3f5c5305b30829c4c.png

然后在OkHttp创建的时候调用即可:

builder.addInterceptor(loggingInterceptor);

如果我可以通过Xposed实现Hook动态添加自己的拦截器是不是就可以做出来一款基于OkHttp的通杀器。

这个时候需要考虑几个问题:

1、怎么拿到对方进程的Classloader;

2、我应该Hook什么方法才能把我自己的拦截器进行注入;

3、注入以后我应该怎么初始化这个拦截器类将其添加进去;

4、因为OkHttp的拦截器是需要导入三方依赖的,如果 app没有导入,应该如何实现动态加载。

问题1

想拿到地方ClassLoader很简单直接Hook attach固定系统级别的方法。

8a34a6157e9774c532c5ab5e28597013.png

问题2

在 OkHttp 初始化的完毕的时候, 肯定会调用build方法 。就用这个当突破口直接Xposed 挂钩在挂钩之前需要判断一下对方是否使用了OkHttp用刚刚拿到的,lassloader试着反射一下看看能不能拿到 okHttpClient$Build ,也就是OkHttp里面的特征类 。

f94bee931c418ecb898ed722bb447a6e.png

拿到了以后直接对build函数进行挂钩。

e9079a9255453d7c6424f0cb8bac3eb8.png

这块看到了在 build调用之前也就是OkHttpClient 初始化之前进行添加

动态拦截器。

看上面代码可知用了反射拿到这个拦截器集合的字段,然后添加的拦截器。其实在okHttp里面添加拦截器,如下:

d68755257e8d9ac23812835710965091.png

其实最终就是在拦截器集合里面的进行添加:

257ec21e45c45a25372942035985fbcd.png

我只需要动态在这个拦截里面添加即可。

问题 3

我应该怎么初始化拦截器?

0234a87f10d6f29d283c04b28a8d2e2b.png

先试着反射一下,看看对方的App里面是否导入了拦截器的依赖,如果拿到了,直接初始化,这块代码很重要也是核心代码。之前的代码:

d7bf94a8297745ae4cafca6f332ce9d9.png

在构造里面传的是一个接口,而这个接口就是在这个拦截器里实现内部接口。还需要调用setLevel设等级Body是将全部数据都打印Body这个是 level 里面的一个枚举。

用动态代理的方式 Proxy.newProxyInstance拿到这个接口的实体类,然后作为参数new出来拦截器。

反射拿到枚举作为setLevel的参数进行反射调用即可。始化完毕直接添加到拦截器集合里。

问题4

如果这个App没有导入拦截器的log依赖:

9ec91bc5e9523822f55fb5dcf98f7562.png

反射这个是拿不到的这个时候需要用他的Classloader进行动态加载。先把拦截器log的jar包放到assets 目录下在App模块,动的时候初始化的把Jar 保存到SD卡内。

6e3761d32afd1bc5205892360ea97c31.png

在没有找到的时候直接进行动态加载,第四个参数传入目标的 ClassLoader直接进行LoadClass即可,后进行下面的初始化。

大功告成!

随便找了个App测试一下效果还可以,具体就不说了。

38723893ad763b73b3508ed5e26595ce.png

0c528dc88af3d56e1bb14c22dd4b753b.png

这个东西有个弊端,就是比App被混淆了,路径肯定会对不上,我个人想法就是可以根据方法的签名信息定位到。

还有时候虽然集成了OKHTTP,但他没有调用 Build 方法进行初始化,不知道道为啥。这块代码可以优化的,看看有没有其他的突破口。

我现在这个思路只是添加了LOG拦截器。拦截器还有很多种。比如直接修改请求头等参数的拦截器。具体可以百度看看。

项目地址:

https://github.com/w296488320/XposedOkHttpCat

本文由看雪论坛 珍惜Any 原创

原文链接:https://bbs.pediy.com/thread-249236.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值