У этого вопроса уже есть ответ здесь:
Есть ли рубин obfuscator или «компилятор»?
Возможно, вы захотите взглянуть на мою попытку SIMD / Non-Simd:
VREP , базовый класс с шаблоном со специализациями для SIMD (обратите внимание, как он отличает между поплавкой SSE, и SSE2, которые ввели целочисленные векторы.).
Более полезно V4F , V4i классы и т. Д. классов и т. Д. (Подклассы через промежуточное соединение V4 ).
Конечно, это гораздо более ориентировано на 4-элементные векторы для RGBA RGBA / XYZ . Расчеты типа . Но общие принципы могут быть полезны.
-121--2850201-Существует несколько вариантов, таких как RUBYScript2exe или Allinoneruby . Тем не менее, все обфускатели интерпретированных языков имеют тенденцию иметь серьезные недостатки: они обычно не понимают более сложных методов метапрограммирования.
То есть они не могут обязательно сказать, что что-то вроде foo.send (: бар, ...)
- это вызов на методу
в совершенно другой библиотеке или что EVAL («Требовать% W {ABC def Ghi}»)
означает потребовать трех разных библиотек. Это тривиальные примеры - все становится гораздо более сложным, когда вы бросаете метод_миссинга
и его ILK в смеси.
Когда Obfuscator столкнулся с таком родом кода, он все равно будет собирать соответствующие инструкции, но это может не знать, чтобы также включить определенные библиотеки или другой код из других стран. Это может привести к серьезным вопросам, поскольку динамически включают
D или D или
d
d, не будет доступно во время выполнения в исполняемом исполняемости статически связанного.
К сожалению, многие драгоценные камни и библиотеки используют сложные методы метапрограммирования. Вы, вероятно, попаду в неприятности здесь, если вы попытаетесь использовать запутывание и ожидать, что ваша программа будет иметь такое же поведение. Хуже все равно, потому что есть так много уровней косвенности, если в отбивной версии возникает ошибка, вы никогда не узнаете, что именно произошло или как его воспроизвести.
В зависимости от того, что вы пытаетесь сделать, есть драгоценный камень, который позволит вам создать расширение C из скрипта RUBY, который затем может использоваться в качестве требования в вашем приложении Ruby. Это называется Ruby2Cext. Он запутает весь ваш код в C, и то, что вам может потребовать .so в отдельном скрипте Ruby, и он будет работать как обычный рубин.
RUBYSCRIPT2EXE - http://www.erikveen.dds.nl/rubyscript2exe/