查看原文
其他

如何实现 Https拦截进行 非常规“抓包”

珍惜Any 看雪学院 2019-09-17

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




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


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

  



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

 

builder.addInterceptor(loggingInterceptor);


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


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

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

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

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

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


问题1


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



问题2


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




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

 



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

动态拦截器。


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

 



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

 



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


问题 3


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




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




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


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


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


问题4


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




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




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


大功告成!


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





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


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


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


项目地址:

https://github.com/w296488320/XposedOkHttpCat





- End -




看雪ID:珍惜Any 

https://bbs.pediy.com/user-819934.htm  



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

转载请注明来自看雪社区




⚠️ 注意


2019 看雪安全开发者峰会门票正在热售中!

长按识别下方二维码即可享受 2.5折 优惠!





往期热门回顾

1、针对微控制器的时钟错误注入攻击

2、注意!Linux 曝出 TCP 拒绝服务漏洞

3、针孔摄像头无处不在,优衣库试衣间也没能逃过......

4、黑科技堪比易容术!只需40分钟,你就可以变成另一个人~








公众号ID:ikanxue

官方微博:看雪安全

商务合作:wsc@kanxue.com





↙点击下方“阅读原文”,查看更多干货

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存