首页
社区
课程
招聘
[原创]注入安卓进程,并hook java世界的方法
2014-3-28 14:16 189209

[原创]注入安卓进程,并hook java世界的方法

2014-3-28 14:16
189209
收藏
点赞1
打赏
分享
最新回复 (161)
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
malokch 2 2014-4-1 15:23
26
0
HookArtMethod在art.cpp里面,预想中是用来支持art的,现在是不可用的
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
malokch 2 2014-4-1 15:39
27
0
我研究art也有一两个月了,源码也看得差不多了,真没发现能HOOK一个非native java method!
这也是这篇文章的起因,dalvik虽然出来没几年,但也显得老态龙钟了.先不说64位,现在移动处理能力暴涨,但是这个增长趋势也是有个限度的,当不能从硬件上提升体验,那时候就是转向系统的优化,而dalvik就是个瓶颈,纯粹的dalvik是会被抛弃的.但完全的抛弃应该是不会有的,dalvik就是安卓的核心所在,被彻底抛弃那就安卓就不叫安卓了,除非谷歌真的够魄力整个给重做了,况且技术层面上说,art只是dalvik的另外一种实现方式.至于64位在手持设备的意义不是很大,手持设备终将不会成为大数据处理的载体,64位的地址扩展带来的内存容量提升可能比较有意思一点.
雪    币: 230
活跃值: (106)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zrhai 2014-4-1 19:48
28
0
看了一遍,好多地方还是没明白,收藏学习了!
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
aimer 2014-4-1 21:32
29
0
不错的教程  感谢LZ的分享
雪    币: 613
活跃值: (2222)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
wuaiwu 3 2014-4-2 10:20
30
0
标记下,刘明
雪    币: 181
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
duoniduoni 2014-4-2 11:26
31
0
拜谢!!!!
雪    币: 181
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
duoniduoni 2014-4-2 11:51
32
0
请教楼主,hook到java方法后,如何在hook中调用原来方法????
雪    币: 181
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
duoniduoni 2014-4-3 09:15
33
0
lz你好,我想请教一个问题:

你代码中用到的class Method等类和dvXXXX系列函数,是dalivk虚拟机中提供的吧?这些类、方法如何学习?有没有什么资料系统的讲这些接口的(难道这是一套SDK?)?

希望lz有空的时候回复我的问题。拜谢!
雪    币: 144
活跃值: (224)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
不歪 2 2014-4-3 10:09
34
0
非常感谢你的分享
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
malokch 2 2014-4-3 13:52
35
0
这个我也没有找到一个很完美的方法,但是还是有一个方法。就是用“递归”的方式进入原来的方法:先Hook java method,当执行序列到我们注入的代码的时候,先做完你的坏事,然后unhook这个方法,再“递归”调用自身,返回的时候再Hook它。
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
malokch 2 2014-4-3 14:07
36
0
你去下我提供的测试代码就知道我是怎么引用的了,是直接从虚拟机源码里引用的.
至于描述这些方法接口的资料,系统的是没有的,都是网上一些零散的描述.这毕竟只是用于实现系统内部功能的,所以没有什么公开资料,真想学习的话,就去读它的源码和注释,对于开源项目来说,源码和注释是最好的学习资料了.
别看着虚拟机源码有几十兆,它的核心部分没那么庞大.多留意一下,利用一下辅助工具,还是很容易看到你想看到的东西的
雪    币: 181
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
duoniduoni 2014-4-3 17:11
37
0
感谢,你的代码我已经下载了,我以前都是做的本地层拦截,这块一直想搞没开始,感谢回复,我有问题了再请教你
雪    币: 5
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
笨小孩xlz 2014-4-5 23:07
38
0
谢谢分享,很喜欢,收藏了!
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zhangsj 2014-4-6 15:03
39
0
感谢分享 不错不错 收藏了
雪    币: 181
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
duoniduoni 2014-4-8 20:20
40
0
又来麻烦lz,先拜谢。

我准备学习dalvik虚拟机源码,准备做android java 方法拦截。我想请问一下,我应该看虚拟机源码哪一部分,如何学习,有没有啥比较好的教程之类的,毕竟源码还是很大的-_-!。请lz多多指点,拜谢啊拜谢。

祝工作顺利。
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
malokch 2 2014-4-9 11:36
41
0
大体的方法是:找到切入点,然后顺藤摸瓜!
既然是做方法拦截的话,那就是看dalvik字节码执行的部分,这部分的代码都在/dalvik/vm下,具体的你看下目录结构就清楚了。基本每个文件名都表达了其意义。
雪    币: 8
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hqdvista 2014-4-9 17:18
42
0
不错,学习了
雪    币: 181
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
duoniduoni 2014-4-9 18:49
43
0
感谢!拜谢!
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
donttellme 2014-4-13 00:32
44
0
看完标题 就猜到 肯定是用反射 在c/c++中调用java,一般软件开发中也会用到这种方法,主要是当处理数据的方法用C/C++完成,需要在java代码中显示进度条之类的操作 却没有数据,于是在C/c++中去反射获取方法,再调用自身的数据去执行相应操作。
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
malokch 2 2014-4-13 01:10
45
0
这篇文章可不是用来介绍jni和反射的,就那点事也不好意思发这里。这篇文章的核心是HOOK,反射只是用来找到相应方法而已,还有一个要点是在没有java主动支持的情况下从native进入java世界,寻找虚拟机的实例也是个难点。
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tonyking 2014-4-22 10:50
46
0
谢谢分享
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
IBMLover 2014-4-22 11:10
47
0
表示虚拟机里测试api8,api16均无法通过,process直接stopped的!还有人遇到同样的情况阿??
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
小悠 2014-4-23 00:13
48
0
mark
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
obi王 2014-4-23 11:18
49
0
这个要mark一下啊。感谢楼主
雪    币: 132
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
luyikk 2014-4-24 14:59
50
0
....无法OPEN DLL~
游客
登录 | 注册 方可回帖
返回