Android Dalvik模式下劫持 Java 函数

原创 2015年08月03日 22:36:42

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,在调用原来的方法,应该就能解决我们的问题? 然而,真的是可以哦,可以劫持

Dalvik虚拟机反射调用函数执行流程

Dalvik虚拟机函数执行有以下几种方式: interpreted 调用 interpreted interpreted 调用 native native 调用 interpreted native ...
  • dingjikerbo
  • dingjikerbo
  • 2016年01月10日 20:04
  • 1360

Dalvik虚拟机的运行过程分析

在前面一篇文章中,我们分析了Dalvik虚拟机在Zygote进程中的启动过程。Dalvik虚拟机启动完成之后,也就是在各个子模块初始化完成以及加载了相应的Java核心类库之后,就是可以执行Java代码...
  • Luoshengyang
  • Luoshengyang
  • 2013年05月20日 00:57
  • 61819

Dalvik中类的加载

Java 源代码经过编译后会生成后缀为class的文件,也即字节码文件。然后在Android中使用dx工具将其转换为后缀为jar 的dex类型文件。Dalvik 虚拟机负责解释并执行编译后的字节码。在...
  • Grace_0642
  • Grace_0642
  • 2013年03月31日 22:59
  • 1844

android 调用 dexopt 的位置

dexopt 是 android dalvik 虚拟机使用的优化程序,它负责把dex文件优化成odex。位置1 安装的时候调用 在 PackageManagerService 中的 Installer...
  • ShenFengMeng
  • ShenFengMeng
  • 2016年01月28日 10:00
  • 1580

深入理解Android之Java虚拟机Dalvik

一、背景这个选题很大,但并不是一开始就有这么高大上的追求。最初之时,只是源于对Xposed的好奇。Xposed几乎是定制ROM的神器软件技术架构或者说方法了。它到底是怎么实现呢?我本意就是想搞明白Xp...
  • Innost
  • Innost
  • 2015年12月22日 09:55
  • 33216

Android运行环境Dalvik模式和ART模式的区别

Android系统是以Linux系统为底层构建的,开源的Android系统需要配置到不同硬件配置的设备上,为了降低应用的开发难度,在Linux底层之上构筑了一个名为"Dalvik"的虚拟机,名为虚拟机...
  • wxdjaqgs
  • wxdjaqgs
  • 2015年03月16日 15:05
  • 5155

Dalvik虚拟机线程初始化及函数执行流程

研究dalvik线程创建,只因为想搞清楚dalvik函数执行流程,那么这个流程的开端在哪里呢?我想到了线程,因为每个线程都有自己的Runnable,而这个入口一定就是Runnable开始执行的地方。带...
  • dingjikerbo
  • dingjikerbo
  • 2016年01月10日 10:21
  • 874

Android逆向之旅--运行时修改内存中的Dalvik指令来改变代码逻辑

 一、前言 最近在弄脱壳的时候发现有些加固平台的加固方式是修改了dex文件结构,然后在加载dex到内存的时候,在进行dex格式修复,从而达到了apk保护的效果,那么在dex加载到内存的时候,如...
  • dj0379
  • dj0379
  • 2016年07月08日 09:34
  • 3251

Android的Dalvik虚拟机与Java的JVM虚拟机之间的差异

①Dalvik 基于寄存器,而 JVM 基于栈。基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短。 ②Dalvik负责进程隔离和线程管理,每一个Android应用在底层都会对应...
  • Java_Grass
  • Java_Grass
  • 2017年03月28日 00:15
  • 287

Android平台下Dalvik层hook框架ddi的研究

通过adbi,可以对native层的所有代码进行hook。但对于Android系统来说,这还远远不够,因为很多应用都还是在Dalvik虚拟机中运行的。 那么,有没有什么办法可以对Dalvik虚拟机中跑...
  • Roland_Sun
  • Roland_Sun
  • 2014年08月17日 16:56
  • 8182
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android Dalvik模式下劫持 Java 函数
举报原因:
原因补充:

(最多只允许输入30个字)