首页
社区
课程
招聘
[原创]Android下通过root实现对system_server中binder的ioctl调用拦截
2012-10-18 13:53 222759

[原创]Android下通过root实现对system_server中binder的ioctl调用拦截

2012-10-18 13:53
222759
收藏
点赞3
打赏
分享
最新回复 (48)
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
NISL 2013-5-29 14:30
26
0
楼主,你好,我想问下在注入程序中,如何获取已经注入到目标进程中的new_ioctl的地址?
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zgyrush 2013-6-1 10:09
27
0
常用的两种方法:
1、shellcode中直接:uint32_t addr = (uint32_t)new_ioctl;
2、如果注入目标进程的是so,可以静态分析new_ioctl在so中的偏移地址,加上该so在目标进程内存空间的起始位置即是函数地址
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zgyrush 2013-6-1 10:12
28
0
#include <fcntl.h>
int open(const char *pathname, int oflag, ... );
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cqllang 2013-6-18 20:09
29
0
代码都是一些片断,新手理解起来还是有一定难度。
不知道LZ如果方便的话,可不可以把完整代码整理一下,发个压缩包出来呢。(当然,去掉商业部分(如果有的话))
雪    币: 270
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
半生不熟 2013-6-19 09:06
30
0
mark一记
雪    币: 168
活跃值: (81)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bunnyrene 2013-6-28 09:29
31
0
露珠啊,来份完整的呗。新手困难,
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
menshen 2013-12-19 16:02
32
0
好文章啊!
雪    币: 269
活跃值: (25)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
ReturnsMe 2 2013-12-19 17:00
33
0
支持科普~~
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
menshen 2013-12-26 20:44
34
0
LZ你好,我自己写了一个测试的小例子,但是修改了函数地址后系统报段错误,这个要如何解决呢 ?
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
NISL 2014-4-5 17:46
35
0
您好,我是小白,想问下,您提到的“每个被加载的模块,无论是可执行程序还是共享库,均有自己独立的PLT和GOT表。所以拦截这个模块的对外调用的GOT,不影响其他模块”
注入时不是改的是磁盘文件中的.so么?如果把注入程序设为开机启动,然后重启下设备,会不会影响到其它模块?
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lwangivy 2014-4-8 21:58
36
0
觉得楼主这样直接去改so文件可能不太合理,got表是数据段的东西,在它被装载时地址需要被动态链接器重新计算的,楼主这样子直接把隶属于System_server进程的ioctl和new_ioctl的地址写进文件会不会产生问题?
雪    币: 216
活跃值: (53)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
Passion 3 2014-5-24 23:48
37
0
楼上两位,不是直接改磁盘上的so文件内容,而是改so文件载入内存后内存映像中的内容。进程重启或设备重启后改动就没了。
雪    币: 30
活跃值: (447)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
supyuan 2014-5-25 01:58
38
0
mark, 用得着。谢谢
雪    币: 23
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
俺是小号 2014-8-14 19:36
39
0
请问 ioctl中的数据如何解析 发送bc命令后收到br 回复 cmd BINDER_WRITE_READ 是 servicemanger ,如何提前获读到的数据了
雪    币: 23
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
俺是小号 2014-8-14 19:54
40
0
我也不清楚这个该如何去解析
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sunranlb 2015-1-10 22:51
41
0
楼主您好,看了您的代码我有个疑问:
在3.2一开始的部分
// 将新旧ioctl地址写入Andorid的Property供外界使用
    int do_hook(void * param)
    {
        old_ioctl = ioctl;
        ……

old_ioctl = ioctl;这一句,ioctl是什么东西呢?难道就是ioctl函数的原地址?那么这个原地址是怎么获取到的呢?
谢谢!
雪    币: 216
活跃值: (53)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
Passion 3 2015-1-11 22:06
42
0
楼上,这句的确就是使用的原ioctl的地址。C里头的函数名就代表函数入口地址,而这地址的确定是由链接器与运行期加载器共同确定的。
雪    币: 21
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
coolyi 2015-1-12 09:58
43
0
将注入也放到init.rc里  重启的话就会再执行咯
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Edwinwp 2015-7-14 20:45
44
0
我把我们的inject 程序写在了另外一个apk程序中,我想知道它如何以root权限attach上其他的程序,谁能说说么。
雪    币: 21
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wojiushini 2015-7-18 16:41
45
0
求楼主的联系方式
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
编程的程序猿 2015-11-4 08:39
46
0
在最新的5.0设备中为什么获取到的ioctl的request参数永远不等于BINDER_WRITE_READ呢,求明白人解答一下.
雪    币: 2044
活跃值: (237)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
dats 2015-11-24 23:48
47
0
Mark...
雪    币: 602
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kangcin 2015-11-25 03:56
48
0
好文,mark Android下通过root实现对system_server中binder的ioctl调用拦截
雪    币: 858
活跃值: (964)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
K4NG 2016-1-26 15:35
49
0
略屌 略屌 ~ 读了好几遍,才读懂。。。。。
游客
登录 | 注册 方可回帖
返回