Реализует ли какой-либо графический API запутывание шейдеров?

Предположим, компания внедрила новый шейдер в свое приложение и хочет затруднить его кражу. Однако шейдеры OpenGL отправляются на графический процессор в виде открытого текста, и Vulkan принимает легко декомпилируемый байт-код. Есть ли у какого-либо графического API ненулевой уровень запутывания шейдеров?


person plátano plomo    schedule 03.09.2016    source источник
comment
Патенты — отличная форма запутывания.   -  person Robinson    schedule 14.09.2016


Ответы (1)


Есть ли у какого-либо графического API ненулевой уровень запутывания шейдеров?

Нет. И это не имело бы никакого смысла. Шейдеры не так сложны, как полноценные приложения. Существуют довольно жесткие ограничения на сложность шейдера, чтобы обеспечить интерактивность. И любой уровень обфускации, глубоко внутри, — это просто странный набор инструкций, который можно легко деобфускировать с помощью оптимизирующего компилятора/транспилятора.

Общее правило таково: если его можно выполнить и получить читаемый результат*, его можно деобфусцировать. Это так просто.

Также опытный графический хакер сможет посмотреть на окончательный рендеринг и/или промежуточные результаты (которые легко получить с помощью таких инструментов, как renderdoc) и понять суть того, что делает шейдер только из этого. Черт возьми, 90% графического кодирования состоит из такого рода визуальной отладки вывода, когда вы пытаетесь выяснить, почему и как ваш шейдер не соответствует вашим ожиданиям, и как вообще появился тот беспорядок, который вы видите на экране. Таким образом, любой опытный графический хакер уже накопил большую часть набора навыков, необходимых для обратного проектирования шейдера, просто «взглянув» на него.


* если бы не ограничение «читаемого результата», тогда гомоморфное шифрование могло бы допускать истинное обфускация кода. Но обычно вам нужен вывод шейдера, читаемый человеком.

person datenwolf    schedule 03.09.2016