0.
想了想module隐藏,感觉再怎么隐藏还是会被发现:-)干脆直接把模块删了 那就省事了!
1.YY下现有的技术
其实也不是什么技术,就一句代码,放在模块初始化函数里:list_del(&__this_module.list),这样在用户态下lsmod就查不出来了。
但是其实还是可以查出来的,最简单的方法就是查看/sys/module/,发现可疑模块名字,再对比下lsmod结果
# insmod hidemodule.ko
# lsmod |grep hidemodule [被隐藏看不到结果]
# ls /sys/module |grep hidemodule [被发现了]
hidemodule
#cat /sys/module/hidemodule/initstate
live
这里可以进一步对/sys/module/hidemodule进行文件隐藏,就不多说了
2.内存泄漏
想了个方法,不知道有人用了没,直接写在这了,懒得上网查了:
1).模块init函数:申请足够多内存页面
2).把模块中要用到的函数,变量copy到申请的页面里
3).修改页面里要调用到的内核函数或者变量的偏移地址
4).模块exit函数里*不*释放申请的内存页面,删除模块 (故意内存泄漏)
为什要自己另开内存?
因为模块在删除时候,会自动释放模块的内存空间,模块内函数和变量都将释放。
有点麻烦的地方(至今未想到好方法)?
2)中计算跳转指令的相对偏移,和引用变量的相对偏移。
因为模块中调用函数的指令机器码是:e8 xx xx xx xx(call offset),这里offset是在insmod时候计算的被调函数相对于模块中指令地址的偏移
但是当我们将函数机器码原样copy到新内存页面里,offset就不在适合,需要自己重新计算,并且对于不同指令,不同调用计算方法都不一样,我对链接器又不
熟悉,没法还原其方法,只好自己手动计算了。
另外计算一个函数代码段占用的内存空间,我也没有想到好的方法。
方法就这样,至于要隐藏什么全靠自己,可以自己实现去了。