有没有办法防止 OpenGL 分析器附加到我的应用程序?

Posted

技术标签:

【中文标题】有没有办法防止 OpenGL 分析器附加到我的应用程序?【英文标题】:Is there a way to prevent OpenGL profiler to be attached to my application? 【发布时间】:2013-09-20 06:41:49 【问题描述】:

我想知道是否有办法阻止“OpenGL Profiler”或“Ins​​truments”附加到我的应用程序,因为它会显示一些我想隐藏的着色器/进程。

【问题讨论】:

什么意思?您的着色器是否具有如此重大的突破性,以至于它们构成了商业机密? 不。没有办法做到这一点,我想不出你想要这样做的理由。 只是为了防止竞争对手抄袭我的shader。 【参考方案1】:

没有办法做到这一点。您可以做的最好的事情是混淆您的着色器,使其难以破译,例如通过使用一些代码为所有方法和变量提供非描述性名称。

您无法阻止他人捕获您的着色器和纹理的内容的原因是您必须将它们传递给 OpenGL API。理论上,有人可以用简单地将着色器/纹理保存到硬盘驱动器的实现来替换 API 中的适当方法。你无法知道这是否已经完成。

【讨论】:

+1:此外,当转换为 GLSL 时,Cg 在将着色器转换为名称不佳的变量的混淆集合方面做得很好。 cgc 双向工作,所以如果你真的想混淆 GLSL 着色器,你可以通过 cgc 运行它们几次。 NV 驱动程序使用 Cg 作为 GLSL 编译器前端,因此有时您实际上可以在 glGetProgram|ShaderInfoLog (...) 的输出中看到它对 GLSL 着色器所做的真正可怕的事情:)【参考方案2】:

我所做的方法是加密应用程序中的着色器,因此如果用户检查应用程序的内容,他会找到 *.vsh 和 *.fsh 但他将无法读取它。我在编译之前解密它们。

在我的渲染过程中,我添加了

#if RELEASE
CGLSetGlobalOption(kCGLGOComment, (long) "No profiler in release scheme");
#endif

通过添加它,当 openGL profiler 尝试附加时,应用程序将崩溃。所以着色器将不可见。

【讨论】:

以上是关于有没有办法防止 OpenGL 分析器附加到我的应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以防止调试器附加到 Android 上?

为啥片段着色器没有附加?

有没有办法在无头机器上使用使用硬件加速 OpenGL 的应用程序?

拖放防止多个项目同时移动

OpenGL 防止在调整窗口大小时拉伸

OpenGL/GLFW:glfwOpenWindow 挂起(准系统应用程序)