дизассембляция - это запуск двоичного кода в паралелльных тредах и побайтовое его сравнение с другими текущими процессами с известным исходным кодом, таким образом позволяющая получить исходный код конкретной программы имея на руках лишь двоичное предстваление. Ну условно по крайней мере. Причем конечно оптимизация идет на основе уже дизассемблированного кода, т.е. допустим, если взять ту же EVM и стандарт ERC20, то можно относительно легко декодировать любой токен ERC20, т.к. их существует огромное множество с открытыми исходниками. С другой стороны, если тот же контракт нигде не публиковался, то подобрать исходные функции попадающие под текущий байт-код практически не возможно. Ну т.е. это уже сложность близкая к экспоненте, но еще недостаточной, т.к. алгоритм кодирования один для всех функций - keccak-256.
А мы можем на каждый экземпляр движка ставить ватермарку и, допустим, менять положение функций местами - уже будет получаться другой байт-код, менять алгоритмы кодирования, переставлять некоторые байты местами, менять размерности, типы данных, и прочее и прочее, причем учитывая небольшой вес движка мы это можем делать буквально не останавливаясь.
Причем на производительности это сказываться не будет, потому что байт-код будет выполнятся всегда одинаково, т.е. он будет конечно каждый раз другой, но тем не менее выполнятся он будет одинаково