gpt4 book ai didi

linux - 如何伪造一个进程成为另一个进程的子进程

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:06 29 4
gpt4 key购买 nike

程序 A (ReportHandler) 调用程序 B (Specific Report)。为了让我得到我的“特定报告”,我需要通过程序 A,然后调用程序 B 并得到我的报告。我的问题是程序 B 有一个“安全”措施,检查程序 B 是否是程序 A 的子进程。(这是因为程序 A 确保没有其他人在运行该程序 B,确保它运行在一天中的 x 和 y 小时之间,或其他可能干扰程序 B 运行的程序等)

程序 A 和 B 是基于 C 的,但我不能(不能)更改它们。我检查了代码,我无法将参数传递给程序 A 以从控制台运行 B。SOOO,我剩下的唯一想法是尝试“欺骗”系统,以便程序 B 显示为程序 A 的子级,所以我可以从控制台运行它。

我尝试自动执行此操作的原因是,我每天需要拨入十几个服务器来获取此报告...我想集中此脚本,以便我可以将此脚本远程 ssh 到每个服务器,并且完成它。会为我节省一个小时的时间。或更多。

正在检查

if ( TRUE != child_of_Program_A() )
{
epause( win[MAIN], 1,
_("This Program Must Be Run From Program A"));
return( FAILURE );
}
STATIC BOOL child_of_Program_A()
{
FILE *fp;

char statname[32];
pid_t ppid;
char proc_name[32];
char buffer[128];
char *ptr;

ppid = getppid();

while(ppid != 1)
{
snprintf(statname, sizeof(statname), "/proc/%d/status", ppid);
if (NULL == (fp = fopen(statname, "r")))
{
return(FALSE);
}

proc_name[0] = '\0';
ppid = -1;

while (NULL != fgets(buffer, sizeof(buffer), fp))
{
if (NULL != (ptr = strtok(buffer, STAT_SEP)))
{
if (strcasecmp(ptr, "name") == 0)
{
if (NULL != (ptr = strtok(NULL, STAT_SEP)))
{

if (strcmp(ptr, "Program_A") == 0)
{
fclose(fp);
return(TRUE);
}
strncpy(proc_name, ptr, sizeof(proc_name));
}
}
else if (strcasecmp(ptr, "ppid") == 0)
{
if (NULL != (ptr = strtok(NULL, STAT_SEP)))
{
ppid = atoi(ptr);
}
}
}
if (ppid != -1 && proc_name[0] != '\0')
break;
}

fclose(fp);
}

return(FALSE);

最佳答案

如果我理解 - 你让这件事变得比需要的更难。自动导航菜单迷宫。除非您真的想尝试您询问的非常不寻常的事情 - 请考虑这个替代方案。

以非交互方式进入程序 A 将解决问题。 scp 到您帐户中每个服务器的 shell 脚本。 shell 脚本可以是 here 文档。 stdin 成为脚本,代替键盘。

假设你有一个与程序 A 的正确交互 session 的记录,它看起来像这样:

cd /foo
./programA username
password
A
/deviceA/catalog.txt
B
A
13 cows
now

使用 here doc 的脚本如下所示

#!/bin/ksh
cd /foo
./programA username<<EOF
password
A
/deviceA/catalog.txt
B
A
13 cows
now
EOF

您可能对每台远程服务器都有独特的答案,将它们结合起来。将正确的文件 scp 到每个远程服务器。

ssh remote_server 'cd /foo && chmod +x ./myscript.sh

这设置了执行权限。

在本地桌面上创建一个简单的 script.sh

ssh remote1  './foo/myscript.sh'
ssh remote2 './foo/myscript.sh'
ssh remote3 './foo/myscript.sh'

此 script.sh 现在无需您的干预即可运行您的报告。我还猜测您可能没有在远程服务器上设置 ssh key - 这允许无密码访问,就像上面的脚本想要的那样。

http://rcsg-gsir.imsb-dsgi.nrc-cnrc.gc.ca/documents/internet/node31.html

关于linux - 如何伪造一个进程成为另一个进程的子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15687683/

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