首页
社区
课程
招聘
[原创] 基于文件内部指针拦截文件读写
发表于: 2024-2-20 10:23 18613

[原创] 基于文件内部指针拦截文件读写

2024-2-20 10:23
18613
LOGE("开始读取maps");
int fd = syscall(__NR_openat, AT_FDCWD, "/proc/self/maps", O_RDONLY); // 使用系统调用打开文件
if (fd == -1) {
    LOGE("Failed to open maps file");
}
 
char buf[BUF_SIZE];
char byte;
int bytesRead;
int i = 0;
 
while ((bytesRead = syscall(__NR_read, fd, &byte, 1)) > 0) { // 逐字节读取文件内容
    buf[i++] = byte;
 
    if (byte == '\n') {
        buf[i] = '\0'; // 在行末添加字符串终止符
        LOGE("%s", buf);
        i = 0; // 重置缓冲区索引
    }
}
 
if (bytesRead == -1) {
    LOGE("Error while reading file");
    close(fd);
}
 
close(fd);
LOGE("开始读取maps");
int fd = syscall(__NR_openat, AT_FDCWD, "/proc/self/maps", O_RDONLY); // 使用系统调用打开文件
if (fd == -1) {
    LOGE("Failed to open maps file");
}
 
char buf[BUF_SIZE];
char byte;
int bytesRead;
int i = 0;
 
while ((bytesRead = syscall(__NR_read, fd, &byte, 1)) > 0) { // 逐字节读取文件内容
    buf[i++] = byte;
 
    if (byte == '\n') {
        buf[i] = '\0'; // 在行末添加字符串终止符
        LOGE("%s", buf);
        i = 0; // 重置缓冲区索引
    }
}
 
if (bytesRead == -1) {
    LOGE("Error while reading file");
    close(fd);
}
 
close(fd);
#define BUF_SIZE 1024
 
static int count = 0;
 
int checkFd(int fd) {
    if (count == 0) {
        char buf[BUF_SIZE] = {0};
        char byte;
        int i = 0;
 
        while (syscall(__NR_read, fd, &byte, 1) > 0) { // 逐字节读取文件内容
            buf[i++] = byte;
            if (byte == '\n') {
                buf[i] = '\0'; // 在行末添加字符串终止符
                if (strstr(buf, "libart.so")) {
                    // 读取到指定内容 字节返回fd
                    return fd;
                } else {
                    // 回移文件指针
                    off_t current_pos = lseek(fd, 0, SEEK_CUR);
                    syscall(__NR_lseek, fd, current_pos - i, SEEK_SET);
                    count = i;
                    return fd;
                }
            }
        }
    }
    count--;
 
    return fd;
}
#define BUF_SIZE 1024
 
static int count = 0;
 
int checkFd(int fd) {
    if (count == 0) {
        char buf[BUF_SIZE] = {0};
        char byte;
        int i = 0;
 
        while (syscall(__NR_read, fd, &byte, 1) > 0) { // 逐字节读取文件内容
            buf[i++] = byte;
            if (byte == '\n') {

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2024-2-20 10:28 被肉蚌葱鸡编辑 ,原因: 内容编辑
收藏
免费 5
支持
分享
最新回复 (4)
雪    币: 20
活跃值: (953)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
使用seccomp进行拦截svc似乎会导致一些问题 这似乎和在信号处理程序里面再次调用svc有关系
2024-2-21 13:11
0
雪    币: 116
活跃值: (1012)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
肉蚌葱鸡 使用seccomp进行拦截svc似乎会导致一些问题 这似乎和在信号处理程序里面再次调用svc有关系[em_5]
所以需要做个标记以过滤
2024-2-27 22:36
0
雪    币: 20
活跃值: (953)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
万里星河 所以需要做个标记以过滤
好像是的 死循环是因为系统调用没有增加判断标识
2024-2-28 10:01
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2024-3-9 13:59
0
游客
登录 | 注册 方可回帖
返回
//