inline hook
ssdt hook
dkom
《过时技术研究计划》
2018-11-13 | 黑科技
ARM的GCC下内联汇编的基本使用手册
简要
突然不知道怎么的想踩这个坑。然后rootkit隐藏文件就咕咕咕了。不过还好,这个坑踩完了,接下来就能滚回去填坑了。
汇编不难,蛋疼的是各种稀奇古怪又十分蛋疼的调用约定和很麻烦的调试
x64下,基本寄存器和win32没啥区别,可以更具我之前的一篇汇编基础文章来看。
文章地址:汇编学习笔记
arm下是强制使用fastcall,也就是说前四个参数是强制使用寄存器传参的,所以在调用之前一定要记得push。
同时AT&T的语法是从左到右,而intel的语法是从又到左。
同时,GCC内联汇编的语法和win也不怎么一样,调用怎么说呢,说简单也不简单,说麻烦也不麻烦
详情可以参考基本文档:GCC内联汇编
以及几种常用的寻址方式
(1) 直接寻址
movl ADDRESS, %eax
ADDRESS其实就相当于"地址或偏移"里的地址,反正就是一个数字。
(2)寄存器寻址
其实上面的例子也包括了寄存器寻址,顾名思义%eax就是寄存器寻址,代表对这个寄存器本身的写入或读出。
(3)立即寻址
movl $2, %ebx
我一直觉得立即寻址算不算寻址,反正它的意思就是把2这个数字写入%eax寄存器,$2就是立即寻址,其实就是立即数。
(4)间接寻址
movl (%eax), %ebx
(%eax)就是间接寻址了,意思就是访问eax寄存器里的数值所代表的地址。相当于通用公式里的%基址或偏移量寄存器。
(5)索引寻址(变址寻址)
movl 0xFFFF0000(,%eax,4), %ebx
0xFFFF0000(,%eax,4)就是索引寻址,意思是从0xFFFF0000地址开始,加上%eax * 4作为索引的最终地址。请自行匹配上面的通用公式。
(6)基址寻址
movl 4(%eax), %ebx
4(%eax)就是基址寻址,意思是以eax寄存器里的数值作为基址,加上4得到最终地址。也可以匹配到上面的通用公式,而且这个是很常用的寻址方式
接下来就是代码实现
linux下的进程/文件隐藏
起因
Linux机器下,获取到哪怕一次shell权限,都是十分致命的。
因为获取之后,在黑黑的命令框下,你基本不怎么容易发现木马/后门的存在。
没有云,没有主动防御。也没有什么所谓的“360”(虽然他有但是对比他在windows下的功能简直就是笑话)
在Linux下,比起二进制文件会需要不同平台而导致软件的无法执行,脚本文件反而可以突破这层障碍,海量的库导致程序编写的更加容易以及等等。
然而缺点也很明显,那就是通俗易懂的代码不只对你,对系统管理员来说也是如此,而且必须需要宿主程序持续的运行以及后台上面的那个丑丑的黑框框。
所以我们得目的也就很简单,隐藏进程and隐藏文件。
这样就能让我们得脚本,为所欲为了。
然后,下面是我收集得一些资料。
- linux加载LKM简单例子
- LKM可加载内核模块简单实例编写
- Linux Rootkit系列一:LKM的基础编写及隐藏
- 看我如何通过Linux Rootkit实现文件隐藏
- rootkit:在隐藏模块的基础上隐藏进程
- 动态连接的诀窍:使用 LD_PRELOAD 去欺骗、注入特性和研究程序
- Linux 遭入侵,挖矿进程被隐藏案例分析
- Linux-4.4-x86_64 内核配置选项简介
少女研究中。。。