gpt4 book ai didi

shell - "Hiding"来自 ltrace 和 strace 的系统调用

转载 作者:行者123 更新时间:2023-12-01 02:43:48 26 4
gpt4 key购买 nike

有没有办法隐藏来自 strace 的系统调用?和来自 ltrace 的动态库调用?例如,使用 system (<stdlib.h>)。

在本学期我的软件构建的最后一个类中,讲师向我们透露,我们本可以使用 system我们被分配的命令 shell 项目的许多部分中的库函数调用而不是更复杂的 fork , exec , readdir , stat , dup , 和 pipe我们被告知要使用的系统调用。

方式system有效,他说,你只是简单地传入你想要执行的命令的字符串:system("cmd [flags] [args]; cmd && cmd");你在那里。

我们不应该使用这个功能,但他说他没有为此检查我们的程序。隐藏其用途的一种方法是通过宏定义等来掩盖它。然而,ltrace仍然能够追踪 system通过宏使用时关闭。我相信它甚至在从一个单独的程序调用时也能找到它,比如 `execvp( "./prgrm_with_system", ...).

我使用它的机会已经没有了,但我真的很好奇是否有办法隐藏system来自偶 ltrace .

最佳答案

system() 不会做任何神奇的事情。它甚至没有做任何聪明的事情(并且使用它通常是一种代码味道)。它也不是术语“系统调用”所指的意义上的系统调用。

您可以使用底层系统调用 fork()execve() 轻松创建您自己的 system() 版本,并绕过检测使用 ltrace... 但是 strace 仍会显示正在发生的调用。

可以通过静态链接绕过ltrace,但是由于系统调用根据定义需要操作系统内核的帮助,所以您不能完全没有它们 - - 因此不能轻易避免使用 strace、sysdig、truss、dtrace 和本地等效工具(不利用操作系统或工具本身的安全漏洞)。

关于shell - "Hiding"来自 ltrace 和 strace 的系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27514396/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com