在Linux中为C程序隐藏命令行参数

问题描述 投票:7回答:4

如何隐藏在Linux中运行的C程序的命令行参数,以使其他用户无法通过“ w”,“ ps auxwww”或类似命令看到它们?

c linux command-line-arguments
4个回答
8
投票

这实际上相当困难(我会说不可能,因为有[[may我不知道这样的一种方式),要做到这一点,特别是如果用户可以访问/proc文件系统您的过程。

也许防止人们看到您的命令行参数的最佳方法是不

use

命令行参数:-)您可以将参数存储在名为(例如)myargs.txt的适当保护的文件中,然后使用以下程序运行程序:

myprog @myargs.txt

当然,您必须修改myprog来处理“文件中的参数”方案。

或者,您可以将参数设置为环境变量,并使程序使用getenv

但是,我不知道可以保护您免受适当授权的进程(例如,由root运行的进程)的

any

方法。

8
投票
修改程序中argv的内容:

#include <stdio.h> #include <time.h> void delay (long int msecs) { clock_t delay = msecs * CLOCKS_PER_SEC / 1000; clock_t start = clock(); while (clock() - start < delay); } void main (int argc, char **argv) { if (argc == 2) { printf ("%s\n", argv[1]); delay (6000); argv[1][0] = 'x'; argv[1][1] = '.'; argv[1][2] = 'x'; printf ("%s\n", argv[1]); delay (5000); printf ("done\n"); } else printf ("argc != 1: %d\n", argc); }

调用:

./argumentClear foo foo x.x done

[结果,以ps查看:

asux:~ > ps auxwww | grep argu stefan 13439 75.5 0.0 1620 352 pts/5 R+ 17:15 0:01 ./argumentClear foo stefan 13443 0.0 0.0 3332 796 pts/3 S+ 17:15 0:00 grep argu asux:~ > ps auxwww | grep argu stefan 13439 69.6 0.0 1620 352 pts/5 R+ 17:15 0:02 ./argumentClear x.x stefan 13446 0.0 0.0 3332 796 pts/3 S+ 17:15 0:00 grep argu

注:我的延迟功能无法正常工作。程序运行大约2-3秒,而不是11秒。我不是大的C程序员。 :)延迟功能需要改进。 

0
投票
据我所知,该信息存储在内核空间中。如果没有编写内核模块,您将无法隐藏此信息,因为任何程序都可以查询proc文件系统以查看命令行参数(这是ps所做的)。

作为替代,您可以在stdin上读取命令行args,然后填充一个数组以传递给命令行参数处理程序。或者,更好的是,增加对程序的支持,以读取包含相同命令行参数信息的配置文件并设置权限,以便只有所有者才能读取该文件。

我希望这会有所帮助。


0
投票
要隐藏ps命令中的参数,您可以使用我一直使用的技巧: sprintf(argv[0], "My super long argument list

“);

请确保使用空格键使用大约3行的空格,否则编译器会抛出错误!解析命令行后请记住要更改argv [0]!

59982 pts / 1 SLl + 0:00我的超长参数列表字符串/ proc / 59982 / cmdline我的超长论证清单
这是黑客,但入侵者会首先发出“ ps axw”。

始终监视关键任务服务器并检查已登录的用户!!

© www.soinside.com 2019 - 2024. All rights reserved.