:::tip
记录一下面对Okhttp开启了NO_PROXY
后如何通过hook的方式抓取其https传输数据
:::
今天为了白嫖某隧道,想抓包一下试试,但是很奇怪的发现没有任何Http包,难道用的Socket的传输的?但是细想不至于,于是乎就分析了一下代码,结果分析的时候看到。
1 2 3
| OkHttpClient.Builder newBuilder = new OkHttpClient().newBuilder(); newBuilder.proxy(Proxy.NO_PROXY); newBuilder.addInterceptor(getHeaderIntercepter("api/v2.0/addTicket"));
|
嗨,原来我设置的Http代理服务器让他给reset了,不走我抓包软件的http隧道了。于是想利用Frida
的方法Hook掉这个(主要是Xposed在模拟器上兼容有点不太好),但是不能给空值,一筹莫展的时候,泉哥给了一个大佬的解决方案,遂记录再此。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| const host = Java.use('java.lang.String').$new("192.168.0.123"); const port = 8888; const ProxyClz = Java.use('java.net.Proxy') const InetSocketAddressClz = Java.use('java.net.InetSocketAddress'); const addr = InetSocketAddressClz.$new.overload('java.lang.String', 'int').call(InetSocketAddressClz, host, port); const HTTP = Java.use('java.net.Proxy$Type').class.getEnumConstants()[1] console.log(addr); console.log(HTTP) const mProxy = ProxyClz.$new.overload('java.net.Proxy$Type', 'java.net.SocketAddress').call(ProxyClz, HTTP, addr); console.log(mProxy);
Java.use('okhttp3.OkHttpClient')['proxy'] .overload() .implementation = function () { console.log("[OkHttpClient][proxy]"); return mProxy; }
|
如上,自己new一个Proxy,然后set上去,让他走192.168.0.123
的8888
端口的http代理,这样更好,连在wifi上配置http代理都省了,直接转发到抓包软件上去了。
参考资料:
- 抓包二三事