在高度模板化的库中进行代码混淆
Code obfuscation in heavily templated library
我们商业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)
}
有没有办法为我们的模板化代码提供等于或优于常规代码编译的混淆级别(即技术上可逆但无利可图,也不最佳(?
编辑:澄清一下,我们的目标是防止用户阅读实现,而不是防止非法复制我们的工作。为了这个问题,请假设我们有正当理由提出此要求。
我们实际上会将其作为开源发布
错了。"开源"意味着您的许可证与 OSI 兼容,并且很可能不兼容。
请咨询您的律师。
您错误地寻求法律问题的技术答案。
有没有办法为我们的模板化代码提供等于或优于常规代码编译的混淆级别
如果你有时间花,你可以用一些无用的垃圾替换库中的每个标识符。例如,如果您使用secret
标识符,请添加类似
#define secret s_1eovFxBcc2F
在任何其他代码之前。稍后,您甚至可以运行一个脚本,将每次出现的secret
替换为s_1eovFxBcc2F
。当然,您的secret
不应出现在您使用的任何系统标头中。
恕我直言,这将是浪费时间,但可能会让你的经理满意。
真正重要的是适用于您的客户的许可证。任何严肃的企业(当然也不是大企业(都不能违反法律。
澄清一下,我们的目标是防止用户阅读实现,
然后,仅提供一组类似 C 的(可能声明为extern "C"
(函数作为库的已发布接口,仅提供不透明的数据类型。
顺便说一句,你有没有考虑过相反的方法,让你的库开源,也许有一个GPL许可证(并出售替代的,不太自由的软件友好的许可证(,这样使用它的每个(分布式(程序也必须是GPL编辑的(或者必须购买你广泛的其他许可证(?
(我坚持认为,法律问题通常没有技术解决方案(
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 我试图用这段代码找到二叉树的高度,但它一直返回 0,有人可以告诉我为什么吗?
- 在高度模板化的库中进行代码混淆
- 对于高度优化的矩阵多应用程序代码,MSVC和GCC之间的性能差异
- 加速度计"高度变化"代码 PIC
- GLSL代码到2D地形与高度地图渲染
- 在高度优化的代码中计算代码运行时
- 高度平衡树代码中的分段错误