将应用程序分发给公众,以便他们可以编译,而不会泄露源代码

时间:2009-07-16 00:44:10

标签: c++ compilation obfuscation distribute precompile

我有一个专有的应用程序,我想发给几个人进行测试,除了我们不想透露它们的来源。该应用程序是用C ++ for Linux编写的。它链接到Fedora / Ubuntu repos上随时可用的包。

有没有办法将源处理为中间件...然后分发它,并让用户进行最终编译,实际编译并将中间代码链接到其本机平台。

我正在尝试查看是否有任何替代方法来分发预编译的二进制文件。谢谢。

8 个答案:

答案 0 :(得分:5)

这不是技术上的答案,但您是否相信它们只是要求签署保密协议?

答案 1 :(得分:5)

将其编译为汇编程序。可以使用-S选项完成。

helloworld.cpp:

#include <iostream>

using namespace std;

int main(void)
{
    cout << "Hello World" << endl;
    return 0;
}

然后做:

emil@lanfear /home/emil/dev/assemblertest $ g++ -S -o helloworld.s helloworld.cpp
emil@lanfear /home/emil/dev/assemblertest $ g++ -o helloworld helloworld.s
emil@lanfear /home/emil/dev/assemblertest $ ./helloworld
Hello World

使用此方法,您只能分发包含非常难以阅读的汇编程序的.s文件。

答案 2 :(得分:4)

您可以处理现有的源代码以“破坏”它;基本上这包括剥离所有注释,并将变量名称更改为最小并删除所有源代码格式。问题是,他们可以相对容易地更改变量名称并添加格式和注释;虽然他们在生成的源代码中没有与您相同级别的信息,但他们将拥有完整的功能源代码(因为这是您分发给他们的内容)。这是做这种事情的唯一方法。

答案 3 :(得分:1)

简而言之,没有。根据定义,如果他们可以编译它,那么他们就有你的来源。你能做的最好的事情是增加他们试图理解它的痛苦。

我同意约翰的观点。如果您拥有少量客户并信任他们,那么NDA将是更好的途径。

我刚才想到的另一件事......那么只运行预处理器和编译器,而不是汇编器和链接器?您需要为每种特定体系结构的汇编语言创建一个副本,但我认为在编写过程中很容易劝阻编辑。

答案 4 :(得分:1)

您可以将应用程序分为两部分:第一部分将包含具有OS独立功能的预编译库,第二部分将包含用户将编译的一小部分源。通过这种方式,NVIDIA会分发他们的驱动程序。

答案 5 :(得分:1)

您可以混淆您的C / C ++代码。请参阅我的问题C/C++ obfuscation tools

答案 6 :(得分:0)

如果是C,则可以使用clang编译器,然后转储LLVM中间表示。如果它是C ++,你可能需要等待一段时间,直到clang的C ++支持成熟。

答案 7 :(得分:0)

我能想到的最好的解决方案是限制你支持的平台数量并进行自己的编译,或者编译成难以从中提取信息的二进制格式,但用户可以将其编译为本机格式。

我个人会选择选项1.