c++写代码编写hook系统的inotify文件监管并让inotify_init()始终返回一个假值
时间: 2024-03-18 19:39:21 浏览: 108
vc++实现hook编程源代码
4星 · 用户满意度95%
以下是使用C++编写hook系统的inotify文件监管并让inotify_init()始终返回一个假值的代码示例:
```C++
#include <stdio.h>
#include <stdlib.h>
#include <android/log.h>
#include <sys/inotify.h>
#include <dlfcn.h>
#define TAG "INOTIFY_HOOK"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, TAG, __VA_ARGS__)
static int (*original_inotify_init)(void);
static int (*original_inotify_add_watch)(int fd, const char *pathname, uint32_t mask);
int my_inotify_init(void) {
LOGD("inotify_init hooked, return false");
return -1;
}
int my_inotify_add_watch(int fd, const char *pathname, uint32_t mask) {
int wd = original_inotify_add_watch(fd, pathname, mask);
LOGD("inotify_add_watch hooked, wd = %d, pathname = %s, mask = %u", wd, pathname, mask);
return wd;
}
void hook_inotify() {
void *handle = dlopen("libc.so", RTLD_NOW);
if (handle != NULL) {
original_inotify_init = (int (*)(void)) dlsym(handle, "inotify_init");
original_inotify_add_watch = (int (*)(int, const char *, uint32_t)) dlsym(handle, "inotify_add_watch");
if (original_inotify_init != NULL && original_inotify_add_watch != NULL) {
MSHookFunction((void *) original_inotify_init, (void *) my_inotify_init, (void **) &original_inotify_init);
MSHookFunction((void *) original_inotify_add_watch, (void *) my_inotify_add_watch, (void **) &original_inotify_add_watch);
LOGD("inotify hook success!");
} else {
LOGE("dlsym failed: %s", dlerror());
}
dlclose(handle);
} else {
LOGE("dlopen failed: %s", dlerror());
}
}
```
这段代码与前面的示例代码类似,不同之处在于my_inotify_init函数的实现,它始终返回一个假值-1。这样,在应用程序调用inotify_init函数时,将始终返回一个假值,无论实际上是否成功创建了inotify实例。
请注意,这种hook行为可能会影响应用程序的正常运行,因此请仔细考虑是否需要这样做,并在测试之前备份应用程序和设备数据。
阅读全文