首页
社区
课程
招聘
[原创]Android JNI Inject servicemanager Hook ioctl 成功 分享
发表于: 2016-10-13 15:52 6047

[原创]Android JNI Inject servicemanager Hook ioctl 成功 分享

2016-10-13 15:52
6047
程序运行后,会注入/system/bin/servicemanager进程
进而拦截ioctl函数
解析以下数据
struct binder_write_read
struct binder_transaction_data

最终能拦截到的信息是:某应用某时刻check/add某服务
程序输出日志如下
【时间】【PID】【进程名】【UID】【用户名】【服务名】
2016-10-13 15:00:02|21900|com.google.android.gms|10007|u0_a7|power
2016-10-13 15:00:03|20301|com.tmobile.pr.mytmobile|10094|u0_a94|connectivity
2016-10-13 15:05:01|20301|com.tmobile.pr.mytmobile|10094|u0_a94|connectivity
2016-10-13 15:07:15|20301|com.tmobile.pr.mytmobile|10094|u0_a94|connectivity
2016-10-13 15:09:59|20301|com.tmobile.pr.mytmobile|10094|u0_a94|connectivity
2016-10-13 15:11:46|19413|sys.Manager|10010|u0_a10|iphonesubinfo
2016-10-13 15:11:46|19413|sys.Manager|10010|u0_a10|phone

----------------------------------------------------------------------------------
附件是程序的压缩包,包含6个文件
injectd        
install.bat
install.ini
libhello.so
uninstall.bat
uninstall.ini

安装
请确保手机已ROOT,ADB连接手机正常,并已授权ROOT权限给ADB
请确保ADB已配置好环境变量,以实现在任意目录下可运行该程序
运行
将程序解压到任意目录,双击install.bat可安装程序,安装完成后命令提示符窗口会自动关闭
停止
手机重启或手动kill掉/system/bin/servicemanager后,程序停止运行
删除
双击uninstall.bat可删除程序

日志文件会生成在/data根目录下,包含以下文件
-rw------- system   system      92878 2016-10-13 15:31 zh1.log
-rw------- system   system          150 2016-10-13 14:00 zh2.log
-rw------- system   system     475456 2016-10-13 15:31 zh_br.log
-rw------- system   system     137200 2016-10-13 15:31 zh_btb.log
-rw------- system   system     118864 2016-10-13 15:31 zh_bw.log

zh1.log为主日志文件
-----------------------------------------------------------------
若此主题被多人关注,后续将发布相关代码实现,欢迎留言探讨、交流。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 511
活跃值: (5240)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
赞,期待楼主后面的表现
2016-10-13 16:14
0
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
3
不错,有得通用性强一点就行了。不过根据以往的经验,直接hook ioctl性能损耗好像很大的样子,并发的时候也有点坑人。把代码发上来看看呗,这个功能很简单,没啥好保留的。
2016-10-13 16:34
0
雪    币: 40
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4

也不是想保留啥,只是觉得没人关注的话,有点自说自话的样子

核心替换函数贴一下,大家指点
int new_ioctl(int __fd, unsigned long int __request, void* arg) {
	if (__request == BINDER_WRITE_READ) {
		struct binder_write_read bwr;
		__copy_from_user(&bwr, (void __user *) arg, sizeof(bwr));

		if(bwr.read_size){
			char *file_l = "/data/zh_br.log";
			FILE *fp1 = fopen(file_l, "ab+");
			if(fp1 == NULL)
				return;
			fwrite(&bwr,sizeof(bwr),1,fp1);
			fwrite(bwr.read_buffer,bwr.read_size,1,fp1);
			fclose(fp1);
			
			uint32_t *ptr = bwr.read_buffer;
			uint32_t end = ptr + bwr.read_size;
			while (ptr < end) {
				if(*ptr++ == BR_TRANSACTION) {
					catch_btd((const struct binder_transaction_data*) ptr);
				}
			}
		}
		if(bwr.write_size){
			char *file_l = "/data/zh_bw.log";
			FILE *fp1 = fopen(file_l, "ab+");
			if(fp1 == NULL)
				return;
			fwrite(&bwr,sizeof(bwr),1,fp1);
			fwrite(bwr.write_buffer,bwr.write_size,1,fp1);
			fclose(fp1);
		}
	}
	return ioctl(__fd, __request, arg);
}
2016-10-13 17:11
0
雪    币: 1309
活跃值: (5164)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
5
额  咩有源代码
2016-10-13 17:25
0
雪    币: 5945
活跃值: (242)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
楼主你好,能否hook函数传入的参数数据 ?另外源码能否公布一下能?
2017-3-15 10:36
0
雪    币: 82
活跃值: (104)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
程序放在ida里面基本也和源码差不多了....另外我在使用时产生了两个问题:1、应该是不支持6.0的吧 2、打开某些应用会导致系统崩溃重启,是并发执行造成的吗?
2017-3-16 16:10
0
雪    币: 238
活跃值: (4133)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
求源码,,用来学习下,,留个方式gtict@sina.com!!!!
2017-6-8 10:58
0
雪    币: 238
活跃值: (4133)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9

刚分析了你那个so文件,,根本不是来自ioctl这个函数的参数数据

2017-6-8 12:02
0
游客
登录 | 注册 方可回帖
返回