Android Dalvik模式下劫持 Java 函数

0x00. 前言

        这是去年底干的事情了,研究这个的目的是为了劫持App中的所有流量并引导到squid节点。大部分的Http请求可以在编译dex时通过修改字节码,做些小手脚搞定;但是对于Webview中的视频流,以前一直没有解决,XX项目组由于是加速业务后端收费,对流量泄露并不敏感只会少收钱;而我们做定向流量业务前端收费,泄漏了会被用户投诉。

        为了劫持这个这个流量,走了两次弯路。先研究了用js注入偷偷修改video对象的方法,虽然可以劫持一部分视频请求,但是成不成功完全决定于CP的js怎么写,太不撸棒棒了。之后研究了在代理服务器去修改所有页面和js脚本,篡改url中的host字段为代理服务器地址,方案甚至都做到上线去,这导致了部分请求出现跨域,相对地址的请求丢失源站host,也毙了。

0x01.技术背景

        以前搞视频研究过RTSP转H5 Video, 虽然H5 Video支持不少编码器和容器,但是各大视频网站基本上也就提供mp4+ts两种容器和mp4v+h264两种vcodec。其实呢webview中的音视频最后也是通过MediaPlayer来下载播放。所以我们要是能拿到MediaPlayer 用反射调用私有非公开函数,干个代理进去就可以了。然并卵,MediaPlayer对象根本拿不到。但是,这里有个但是..... MediaPlayer总是要传参数进去的, 所以小机智的我们就不自然的联想到hook这个方法了...


0x02

MediaPlayer 有一组不同重载的setDataSource方法,用途就是传url,如果能hook这个方法,篡改掉url,在调用原来的方法,应该就能解决我们的问题? 然而,真的是可以哦,可以劫持

猜你喜欢

转载自blog.csdn.net/wadahana/article/details/46810355