通过内存泄漏达到模块隐藏

本文探讨了一种通过内存泄漏来隐藏Linux内核模块的方法。在模块初始化时申请内存,复制模块所需函数和变量,修改内核函数或变量的地址,并在退出时不释放内存,以此实现模块的隐藏。这种方法虽然可以防止lsmod显示模块,但仍然可以通过其他途径检测到。作者还提供了实验代码,展示了如何修改系统调用来隐藏模块的存在。
摘要由CSDN通过智能技术生成
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就不在适合,需要自己重新计算,并且对于不同指令,不同调用计算方法都不一样,我对链接器又不
熟悉,没法还原其方法,只好自己手动计算了。
  另外计算一个函数代码段占用的内存空间,我也没有想到好的方法。
 
  方法就这样,至于要隐藏什么全靠自己,可以自己实现去了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值