首页 > 其他分享 >android驱动模块实现文件重定位

android驱动模块实现文件重定位

时间:2023-09-23 23:57:36浏览次数:46  
标签:do sys hook 模块 驱动 android include open filter

  1. 编写驱动模块进行sys_call_table hook 替换 sys_opensys_openat系统调用为自定义函数,需要注意sys_call_table是只读的,修改前需要前修改其内存属性为可写。
  2. 直接修改内核源码,并编写驱动模块实现filter function进行过滤。
    sys_call_table hook只能对系统调用函数进行hook。而第二种方式,直接修改内核源码并为其编写一个内核模块可以实现对内核中任意函数的hook(实际就是在源码的基础上实现内核inline hook)。因为实现文件重定位需要对sys_opensys_openat这两个系统调用进行hook,而这两个函数都会调用do_sys_open函数,所以可以直接对此函数进行修改。

hook sys_do_file

定义一个函数指针filter_do_sys_open并导出,然后在sys_do_file函数头部插入代码调用此函数,如果filter_do_sys_open函数返回-1则直接返回,否则正常调用sys_do_file函数。

编写驱动模块的代码(hook_do_sys_hook.c),利用kallsyms_lookup_name函数获取导出的filter_do_sys_open,然后修改其为自定义的filter函数my_filter_do_sys_openmy_filter_do_sys_open函数判断当前打开的文件是否为/data/local/tmp/as,如果是就直接返回-1阻止此文件被打开。也可以通过修改参数pathname的值实现文件的重定位。

#include "asm/pgtable-types.h"
#include <linux/init.h>   
#include <linux/module.h>  
#include <linux/cred.h>
#include <linux/slab.h>
#include <linux/unistd.h>
#include <linux/kallsyms.h>
#include <asm/uaccess.h>
#include <asm/pgtable.h>
MODULE_LICENSE("GPL");

long my_filter_do_sys_open(int dirfd, const char __user* pathname, int flags,umode_t modex)
{
	long ret = -1;
	char *kbuf = (char*)kmalloc(256,GFP_KERNEL);
	strncpy_from_user(kbuf, pathname, 255);
	printk("do_sys_open : %s\n", kbuf);
	if (strcmp(kbuf, "/data/local/tmp/as") == 0) {
		printk("hide file : /data/local/tmp/as\n");
		return ret;
	}
	kfree(kbuf);
	return 0;
}

static void** p_filter_do_sys_open;
static int __init hook_init(void){
	printk("hook_openat is load success\n");
	p_filter_do_sys_open = (void*)kallsyms_lookup_name("filter_do_sys_open");
	*(unsigned long*)p_filter_do_sys_open = (unsigned long)my_filter_do_sys_open;
	return 0;
}

static void hook_exit(void)
{
	*p_filter_do_sys_open = 0;
    printk("hook_openat is unload\n");
}  

module_init(hook_init);
module_exit(hook_exit);

驱动模块编译

首先编译内核源码https://www.cnblogs.com/revercc/p/17250070.html,然后在内核源码路径private\msm-google\drivers文件夹中新建一个文件夹用来存放自己的内核模块源码,这里创建文件夹名称为my_ko_module,然后在此文件中在新建一个文件夹hook_do_sys_open文件夹用来存放hook do_sys_open函数的驱动模块源码。

hook_do_sys_open中添加驱动模块的源文件hook_do_sys_hook.c,并且增加KconfigMakefile文件,两个文件内容如下。

# Kconfig
config HOOK_DO_SYS_OPEN
	tristate "hook do_sys_open"
	help
	  in kernel

# Makefile
obj-$(CONFIG_HOOK_DO_SYS_OPEN)+=hook_do_sys_open.o

修改my_ko_module的上层目录中的Kconfig文件,增加source "drivers/my_ko_module/hook_do_sys_open/Kconfig"

修改my_ko_module的上层目录中的Makefile文件,增加obj-y += my_ko_module/hook_do_sys_open/"

如果想将驱动编译成外部模块(ko)的话需要在内核编译时使用的配置文件中(这里是floral_defconfig文件)增加CONFIG_HOOK_DO_SYS_OPEN=m配置,如果想将驱动模块编译进内核就需要修改配置为CONFIG_HOOK_DO_SYS_OPEN=y

然后重新编译内核即可得到驱动模块hook_do_sys_open.ko

测试

insmod hook_do_sys_open.ko加载驱动模块后,cat /data/local/tmp/as查看文件返回Operation not permitted拒绝操作,查看内核日志可以看到此次文件打开操作已被阻止。

标签:do,sys,hook,模块,驱动,android,include,open,filter
From: https://www.cnblogs.com/revercc/p/17725399.html

相关文章

  • R3300L, Q7 ATV Android9固件
    R3300L,Q7ATVAndroid9固件固件来源https://www.znds.com/tv-1239603-1-1.html之前在恩山上发布过1080p安卓6固件https://www.right.com.cn/forum/thread-1761250-1-1.html,这个固件的不足之处就是没有GoogleServiceFramework,只能通过SmartYoutube之类的第三方APP......
  • Android 9关机流程
    一、整体关机流程framework->init->kernel二、关机流程(代码)本文基于Android9,梳理下正常power键触发的关机流程。涉及的相关代码路径如下://frameworkframeworks\base\core\res\res\values\config.xmlframeworks\base\services\core\java\com\android\server\policy\LegacyG......
  • 过来Android码农提醒,不要有面试就去,可能会白跑一趟
    前言亲身经历!!面试失败总结(它失败,我也不想要的那种)正值毕业季,毕业生开始走向求职之路,大量求职者随之而来。再加上现在正值金九银十招聘的火热阶段。找工作的都知道,工作成功的最后一步是面试,所以很多求职者都选择有面试就去,这是不可取的。就拿本人最近的面试来说,通勤一个小时,明明之前......
  • Android程序员35岁的职业出路:寻找新的舞台
    前言转眼间已经到了奔四的年纪,岁月匆匆,时光荏苒,转眼间已经在Android行业干了8年,当前项目组也陆陆续续进入了不少00后,80后已经不见踪影,90后正在逐渐淡出,而我,也要开始迎接程序员35岁这个坎,心里还是想要继续做技术这条路,但是也给自己思索了一些转行之路,在此跟大家交流交流。为什么35岁......
  • Android DataBinding——导入以及生成的绑定类
    导入DataBinding库提供了导入、变量和include等功能。导入可以方便在引用布局文件中引用类;变量允许您描述可在绑定表达式中使用的属性;Includes允许您在整个应用程序中重用复杂的布局。ImportsImports允许您轻松地在布局文件中的引用类,就像在代码中一样。data元素内部可以使用零个或......
  • Android Failed to resolve: com.github.PhilJay:MPAndroidChart:v3.1.0
    2022.3.1版本修改settings.gradledependencyResolutionManagement{repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories{maven{url"https://jitpack.io"}//Addthisrepositoryjcenter()//orotherrep......
  • 熬过月余终见offer,一份Android面经
    前言最近我一直在牛客刷帖子看到好多对于现在IT环境的负面消息,自己也是找了一个多月Offer一个都没有,又看到这些感觉面试的勇气又少了…这种状态我根本就不知道任何转变,真的是投简历都不想投!就在这样的状态下,朋友说他那边内推有消息了,说待会HR会和我联系。怎么说了,并没有太多惊喜,因......
  • 干货:《Android 性能优化实战篇》带你杀穿金九银十
    近年来,由于疫情和互联网行业寒冬的影响,Android开发领域的竞争变得更加激烈。各大公司的业务线收缩和裁员成为了常规操作,导致职场环境日益严峻。作为一个螺丝钉,我们想要卷出重围,性能优化必须了解一下!本文将梳理Android性能优化的知识模块,帮助初学者了解应该从哪些方面入手学习性能优......
  • 金九银十Android面试该怎么有效的回答,看完这篇文章就懂了
    今年的严寒使得许多职场人的求职时间变长,以往火热的金三银四不再,金九银十九承载着广大程序员的希望。但是在这个特殊情况下,竞争压力也会增大,各大企业对于求职者的要求也随之增高。很多小伙伴都面临着这样的情况:千辛万苦拿到面试机会,却因各种原因翻车。“在面试的时候不能将自己的真......
  • Android开发笔记[4]-串口控制esp32及使用摄像头
    摘要无需root权限,Android使用串口与esp32通信控制小灯开关;开启Android摄像头预览.平台信息AndroidStudio:ElectricEel|2022.1.1Patch2Gradle:distributionUrl=https://services.gradle.org/distributions/gradle-7.5-bin.zipjvmTarget='1.8'minSdk21targetSdk......