转载

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

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

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

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

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

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

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

builder.addInterceptor(loggingInterceptor);

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

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

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

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

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

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

问题1

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

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

问题2

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

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

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

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

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

动态拦截器。

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

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

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

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

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

问题 3

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

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

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

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

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

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

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

问题4

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

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

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

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

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

大功告成!

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

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

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

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

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

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

项目地址:

https://github.com/w296488320/XposedOkHttpCat

- End -

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

看雪ID: 珍惜Any  

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

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

转载请注明来自看雪社区

:warning: 注意

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

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

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

往期热门回顾

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

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

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

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

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

公众号ID:ikanxue

官方微博:看雪安全

商务合作:wsc@kanxue.com

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

原文  http://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458297433&idx=1&sn=3d1dbc958269a1af8648b588d4b6d2a8
正文到此结束
Loading...