LD_PRELOAD函数劫持
2.3. LD_PRELOAD使用限制
这种方式虽然很酷,但却有一些限制。比如对于静态编译的程序是无效的。因为静态编译的程序不需要连接动态库的面的函数。而且,假如文件的SUID或SGID位被置1,加载的时候会忽略LD_PRELOAD(这是ld的开发者出于安全考虑做的)。
三.相关的隐匿技术
3.1 Jynx-Kit
3.2 检查隐匿
如何避免被Hook
(1).静态链接,把代码都静态链接入可执行程序.
(2).通过设置执行文件的setgid / setuid标志.在有SUID权限的执行文件,系统会忽略LD_PRELOAD环境变量.
也就是说,如果你有以root方式运行的程序,最好设置上SUID权限.
(3).在程序的开始检测LD_PRELOAD
Linux环境变量生效篇
效果:应用程序设置环境变量,使其全局生效,并且立即生效,应用程序卸载时,使其全局失效,并且立即失效。
情况:
1.多终端(多个xshell打开,如何使其全部同时生失效)
2.没有终端,在系统界面,如何使其立即生失效
export LD_PRELOAD=name指令在终端执行时,立即生效,但是放在脚本中,或者是多个脚本深度嵌套的环境中,不能够改变当前终端的环境变量,
尝试方法:
在生效时,根据系统启动时的环境变量加载流程,逐项进行设置,然后使其生效,查看效果
在失效时,根据系统启动时的环境变量加载流程,逐项进行设置,然后使其失效,查看效果
Bug修改:
get_config_file_all和get_config_file函数中的perror一行去掉,不需要输出
sent_study_process函数中增加判断,增加头文件unistd.h
CentOS-3.10.0-862.el7.x86_64-V1.0-1.8-T-20190515153527.bin这个程序是bin包,不能使用source或者. 去执行,只能使用./
每一个进程只能改变当前进程内的环境变量,使其及时生效,无法改变其进程外的变量,需要重新加载
对于多个已经打开的终端,只能改变当前终端的环境变量,无法改变其他终端的变量,需要重新加载