当遍历android内核的内核模块中目录的目录时,为什么不能正确提取所有文件名?

hasnoroot

对于antirootkit学生项目,我想获取内核模块中给定目录的文件名列表。我知道文件IO在内核空间中通常不是一个好主意,但这是一个特例。

我曾经filp_open得到struct file目录的。有了这个我有一个struct dentry列表d_subdirs,其中应该包含给定目录中的所有文件。

当我遍历列表,并printk的所有d_iname的的struct dentry应该是的短名称struct dentry,也有非ASCII符号,并在目录中的某些文件丢失。没有运行的rootkit可以隐藏这些文件。dmesg输出如下所示:

<6>Filename: �đ�@�Y�android_module17.ko 
<6>Filename: <��� 
<6>Filename: <� 
<6>Filename: <��� 
<6>Filename: <�����android_module15.ko 
<6>Filename: <��؀ŋ�android_module14.ko 
<6>Filename: <���@Nj�android_module13.ko 
<6>Filename: <��� 
<6>Filename: <����ʋ�k 
<6>Filename: <��؀̋�android_module11.ko 
<6>Filename: <���@΋�android_module10.ko 
<6>Filename: <���@���android_module9.ko 
<6>Filename: <��� 
<6>Filename: <�����android_module7.ko 
<6>Filename: <Ê؀���android_module6.ko 
<6>Filename: <Ċ�@���android_module5.ko 
<6>Filename: <Ŋ� 
<6>Filename: <Ɗ�����10-__rttest 
<6>Filename: <NJ؀���__rttest 
<6>Filename: <Ȋ�@���proctest.ko 
<6>Filename: <ʊ� 
<6>Filename: <ˊ�����rt.ko 
<6>Filename: <̊؀���android_module4.ko 
<6>Filename: <͊�@���anmo.ko 
<6>Filename: <��� 
<6>Filename: ������Z�LOST.DIR 
<6>Filename: �҉�@�Z�Android         

例如,缺少文件夹DCIM或名为android_module1.ko的文件。这些文件没有特别之处。

这是我的内核模块的代码:

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/fs.h>
#include <linux/namei.h>
#include <asm/uaccess.h> 

//replace the "" with angular brackets
int init_module(void)
{
    struct file * fi;

    printk(KERN_INFO "Hello android kernel...\n");

    fi = filp_open("/sdcard/", O_RDONLY, 0);

    //struct path testpath = fi->f_path;
    struct dentry * thedentry;
    thedentry = fi->f_dentry;
    struct dentry * curdentry;

    unsigned char * curname = NULL;

    list_for_each_entry(curdentry, &thedentry->d_subdirs, d_subdirs) {
        curname = curdentry->d_iname;

        printk(KERN_INFO "Filename: %s \n", curname);
    }
    filp_close(fi, NULL);

    return 0;
}

void cleanup_module(void)
{
printk(KERN_INFO "Goodbye android kernel...\n");

}

当我遍历列表时尝试访问inode时,android崩溃。我能以这种方式列出所有文件吗?

编辑:

有趣的是,如果我尝试在循环中像这样手动校正curdentry指针:

testchar = (char *)curdentry;
testchar = testchar + 8;

curdentry = (struct dentry *)testchar;
curname = curdentry->d_iname;

testchar = (char *)curdentry;
testchar = testchar - 8;

curdentry = (struct dentry *)testchar;

哇,这看起来很难看,但是随机符号消失了。我只是看不到此指针不匹配的来源。我是否正确使用列表功能?

迈奥

您正在使用错误的字段,其中包含名称:d_iname仅是一个缓冲区,用于保存可能无法用于大文件名的分配。实际上,您正在寻找d_name.name

另外,您会错误地遍历列表(我想知道如何从中获得任何结果)。d_subdirs列表,并用作第二个参数list_for_each_entry(),但在第三个参数,你应该把节点,而不是这情况下d_entryd_child场(d_u.d_child在老版本的内核)。

这是经过一些磨合后的代码:

struct file * fi;
struct dentry * thedentry;
struct dentry * curdentry;
const char * curname = NULL;

printk(KERN_INFO "Hello android kernel...\n");

fi = filp_open("/root/", O_RDONLY, 0);
thedentry = fi->f_dentry;

list_for_each_entry(curdentry, &thedentry->d_subdirs, d_u.d_child) {
    curname = curdentry->d_name.name;

    printk(KERN_INFO "Filename: %s \n", curname);
}

filp_close(fi, NULL);

我在香草Linux 3.12上进行了检查。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何提取内核头文件以便以后编译内核模块

来自分类Dev

Inno Setup:列出目录中的所有文件名

来自分类Dev

内核模块构建失败:sys / types.h:没有此类文件或目录

来自分类Dev

获取特定模块使用的所有内核模块的名称

来自分类Dev

在名称中带有空格的目录上使用glob时,为什么不能打开文件?

来自分类Dev

为什么要为内核模块开发中声明的每个变量指定许可属性?

来自分类Dev

编译内核模块linux / module.h时出错:找不到这样的文件或目录

来自分类Dev

如何获取目录中的所有文件名?

来自分类Dev

如何使用Linux内核模块中的地址转储/列出所有内核符号?

来自分类Dev

如何列出所有可加载的内核模块?

来自分类Dev

编译内核模块时出现文件错误

来自分类Dev

遍历目录中的txt文件,保存文件名

来自分类Dev

如何遍历目录中某个文件夹中的所有csv文件名,并对这些文件名执行字符串拆分?

来自分类Dev

如何列出所有可加载的内核模块?

来自分类Dev

为什么要为内核模块开发中声明的每个变量指定许可属性?

来自分类Dev

遍历目录时仅获取文件名,而不是路径

来自分类Dev

如何在以下makefile下的空格分隔的目录中编译Linux内核模块?

来自分类Dev

为什么我的命令:“ rm -rf *”不能删除目录中的所有文件?

来自分类Dev

无法遍历目录中的所有文件

来自分类Dev

内核模块编译失败(gcc:错误:elf_x86_64:没有此类文件或目录)

来自分类Dev

为什么内核模块无法打印到屏幕上?

来自分类Dev

'/lib/modules/4.9.8-1-ARCH'不是有效的内核模块目录

来自分类Dev

如何从目录中的所有文件名中删除“ _”

来自分类Dev

Python脚本根据文件名提取所有子目录

来自分类Dev

文件名包含空格时,搜索并替换目录中所有.php文件中的登录字符串

来自分类Dev

为什么 Yocto Linux 中的 IPtables 和内核模块版本不匹配?

来自分类Dev

使用vim获取目录中的所有文件名

来自分类Dev

当驱动程序有内核模块时,为什么我的相机不工作?

来自分类Dev

D 中的内核模块

Related 相关文章

  1. 1

    如何提取内核头文件以便以后编译内核模块

  2. 2

    Inno Setup:列出目录中的所有文件名

  3. 3

    内核模块构建失败:sys / types.h:没有此类文件或目录

  4. 4

    获取特定模块使用的所有内核模块的名称

  5. 5

    在名称中带有空格的目录上使用glob时,为什么不能打开文件?

  6. 6

    为什么要为内核模块开发中声明的每个变量指定许可属性?

  7. 7

    编译内核模块linux / module.h时出错:找不到这样的文件或目录

  8. 8

    如何获取目录中的所有文件名?

  9. 9

    如何使用Linux内核模块中的地址转储/列出所有内核符号?

  10. 10

    如何列出所有可加载的内核模块?

  11. 11

    编译内核模块时出现文件错误

  12. 12

    遍历目录中的txt文件,保存文件名

  13. 13

    如何遍历目录中某个文件夹中的所有csv文件名,并对这些文件名执行字符串拆分?

  14. 14

    如何列出所有可加载的内核模块?

  15. 15

    为什么要为内核模块开发中声明的每个变量指定许可属性?

  16. 16

    遍历目录时仅获取文件名,而不是路径

  17. 17

    如何在以下makefile下的空格分隔的目录中编译Linux内核模块?

  18. 18

    为什么我的命令:“ rm -rf *”不能删除目录中的所有文件?

  19. 19

    无法遍历目录中的所有文件

  20. 20

    内核模块编译失败(gcc:错误:elf_x86_64:没有此类文件或目录)

  21. 21

    为什么内核模块无法打印到屏幕上?

  22. 22

    '/lib/modules/4.9.8-1-ARCH'不是有效的内核模块目录

  23. 23

    如何从目录中的所有文件名中删除“ _”

  24. 24

    Python脚本根据文件名提取所有子目录

  25. 25

    文件名包含空格时,搜索并替换目录中所有.php文件中的登录字符串

  26. 26

    为什么 Yocto Linux 中的 IPtables 和内核模块版本不匹配?

  27. 27

    使用vim获取目录中的所有文件名

  28. 28

    当驱动程序有内核模块时,为什么我的相机不工作?

  29. 29

    D 中的内核模块

热门标签

归档