首页 > 解决方案 > 如何安全地在两个进程之间交换号码

问题描述

这是和的示例myapp1代码myapp2

myapp1 代码:

int main(int argc, char *argv[])
{    
    int secret = 123;
    char buffer[20];
    sprintf(buffer,"%d",secret);

    char *argv[] = { "/bin/myapp2", buffer, 0 };
    char *envp[] =
    {
        "HOME=/",
        "PATH=/bin:/usr/bin",
        0
    };

    int retval = execve(argv[0], &argv[0], envp); 
    printf("return value is: %d\n", retval);
    
    return 0;
}

myapp2 代码:

int main(int argc, char *argv[])
{
    int val = atoi(argv[1]);
    some_process(val);

    return val;
}

如您所见,我myapp2正在myapp1使用execve(). myapp2我在它的论点中 发送了一个秘密号码。myapp2对其进行一些处理并将相同的密码返回给调用程序。现在,我的问题是我希望这个秘密号码对外界保密。使用该ps命令可以轻松破解密码。我想要的是我想确保myapp2被调用的是原始的。如果有人用 替换它myappfake,它也返回相同的密码,我怎么知道我被愚弄了?

基本上,我想确保myapp2我得到响应的那个是真实的。

标签: c++securitysecure-codinginformation-hiding

解决方案


我会给你一个 RPC 的方向 - 远程过程调用。
这是一个旧协议,但我被一些现代操作系统(如 Linux 或 Windows)使用。
该协议可以在网络上使用。因此,您不仅限于本地站。
并且由于 Linux 和 Windows 都支持本地(无服务器)环境,因此测试或扩展协议都不是问题(而且调用次数不受限制,您可以进行)。
您可以加密或解密每一侧(应用程序点)上的所有数据。RPC 是一个古老的协议。所以,你必须自己做证券。而且,您可以在不同平台上编写 RPC 应用程序,因为 RPC 协议不依赖于任何平台(以本机形式)。但是您必须存储函数调用的两个副本(服务器/客户端)。如果你聪明的话,你可以扩展你的 RPC 包功能不断增长,而无需关心协议的增长。它总是一样的。所以,如果你想扩展你的应用程序,你是非常灵活的。


推荐阅读