Rev*_*ing -1 c++ obfuscation templates commercial-application
我们的商业C++库的很大一部分依赖于模板.我们计划将我们的产品作为头文件和动态链接库(闭源)出售,但由于我们的大多数代码库都集中在头文件中,我们事实上将它作为开源发布,缺少小的,易于更换的块.
以下是库接口中我们的一个类的示例:
template<class ItInput, class ItOutput>
struct serialize{
ItOutput operator() (ItInput first, ItInput last, ItOutput d_first) {
// operation on pointers (assuming that ++, -- and * operators work as expected for pointers)
}
Run Code Online (Sandbox Code Playgroud)
有没有办法为我们的模板化代码提供等于或优于常规代码编译的混淆程度(即技术上可逆,但不盈利,也不是最佳)?
编辑:澄清一下,我们的目标是阻止用户阅读实施,而不是阻止非法复制我们的工作.为了解决这个问题,请假设我们有正当理由要求这一要求.
我们事实上将它作为开源发布
错误."开源"意味着您的许可证与OSI兼容,而且可能不是.
问你的律师.
您错误地寻求法律问题的技术答案.
有没有办法为我们的模板化代码提供等于或优于常规代码编译的模糊处理级别
如果你有时间花钱,你可能会用一些无用的垃圾替换库中的每个标识符.例如,如果您使用secret标识符,请添加类似的内容
#define secret s_1eovFxBcc2F
Run Code Online (Sandbox Code Playgroud)
在任何其他代码之前.后来你甚至可以运行一个脚本替换的每次出现secret用s_1eovFxBcc2F.当然,您secret不应出现在您使用的任何系统标头中.
恕我直言,这将是一个时间的损失,但可能会让你的经理高兴.
真正重要的是适用于您的客户的许可证.没有严肃的事情(当然也不是大事)可以承受违法行为.
为了澄清,我们的目标是阻止用户阅读实现,
然后,作为库的已发布接口,仅提供一组类似C(并且可能已声明extern "C")的函数,仅具有不透明的数据类型.
顺便说一下,您是否考虑过相反的方法,即使您的图书馆开源,可能使用GPL许可证(并出售替代品,免费软件更少,许可证),以便使用它的每个(分布式)程序也必须是GPL版本(或者必须购买你广泛的其他许可证)?
(我坚持认为,法律问题通常没有技术解决方案)