Android Dalvik模式下劫持 Java 函数
2015-08-03 22:36
239 查看
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,在调用原来的方法,应该就能解决我们的问题? 然而,真的是可以哦,可以劫持
这是去年底干的事情了,研究这个的目的是为了劫持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,在调用原来的方法,应该就能解决我们的问题? 然而,真的是可以哦,可以劫持
相关文章推荐
- 今天发现一个android动画合集,明天开始研究
- Android Binder 分析——多线程支持
- android广播和短信广播详解----使用广播接收者监听短信
- Android获取屏幕宽度与长度的三个方法
- Android中多线程编程(四)AsyncTask类的详细解释(附源码)
- android 中int 和 String 互相转换的多种方法
- Android SDK下载网址
- android 源码下载中遇到的问题 repo sync
- 关于android:showAsAction
- Android之Inflate()方法用途
- Android Api Demos登顶之路(十八)Recorder Activities
- button-xml 中android:clickable="false" 属性
- Android SDK开发包国内下载地址
- Android service的使用
- android属性动画小结
- Android项目导入出错
- Android四大组件详解
- Android AsyncTask完全解析,带你从源码的角度彻底理解
- Android JNI初体验
- Android测试写入文本Log