阻止opencl内核逆向工程的方法

时间:2017-01-24 13:42:21

标签: opencl

我正在准备我的opencl加速工具包以供发布。目前,我将我的opencl内核编译成针对特定卡的二进制文件。

还有其他阻止逆向工程的方法吗?现在,我的release文件夹中有很多opencl二进制文件,每个内核都有一个。将这些二进制文件拼接成一个单独的二进制文件,或者甚至将它们添加到主机二进制文件中,并以某种方式使用特殊偏移量读取它们会更好吗?

2 个答案:

答案 0 :(得分:2)

OpenCL 2.0和SPIR-V可用于此目的,但尚未在所有平台上使用。

答案 1 :(得分:1)

编码二进制文件。将密钥保存在服务器中,并让客户在使用时请求密钥。当然键也应该被编码,(使用诸如服务器的时间之类的变量值)。然后在客户端解码以用作二进制内核。

我没有编译pro,但我会多次使用多种算法来使它变得更难,如果它们在几个月内(例如GPGPU软件的新版本更新需要时)可以单独使用。但是你自己的简单的未知算法,如所有数据的位顺序颠倒(第1位到第n位,第n位是第1位)应该让它看起来很难被1级黑客攻击。

警告:某些分析工具可以在"运行时"所以你应该添加许多可能数百个琐碎的内核,而没有性能损失,以便在拥挤的时间线中隐藏它,或者你可以在内核选项中禁用分析,或者你可以添加一个故意的错误,可能是队列中的一些破坏的事件然后重新启动,因此分析器无法启动。

也许你可能会混淆最终的C99代码,因此人类无法理解。如果可以,他/她首先不需要黑客攻击。

也许最有效,不做任何事情,只需购买正版算法的版权并以txt显示,这样他们就可以看,但不敢抄钱。

如果内核可以重写为"解释"没有性能损失的版本,您可以从服务器到客户端获取字节码,因此当客户端人员检查分析器时,他/她只看到解释器代码而不是实际工作算法,因为它依赖于来自服务器的字节码作为"数据" (缓冲)。例如,c = a + b变为if(..)else if(...)else(case ...)并且没有数据馈送没有意义。

除此之外,你可以花时间对付一些邪恶的人反向工程,你可以选择变量名来启动他/她的选择性感知"所以他/她不能专注一段时间。然后你同时开发一个meaner版本。比如c = a + b变成bulletsToDevilsEar = breakDevilsLeg + goodGame