Создание обфускатора (к диплому)
Писать что-то, типа сайтов, опросников, пакетов лабораторных, как прочие, мне не хочется в виду того, что первое для меня слишком просто, а остальное просто неинтересно.
Мне же интересно написать обфускатор, как-то душа к этому лежит и интересно повозиться и разобраться. В общем, что это такое и зачем используется я прекрасно знаю. О том, как это реализуется качественно (не на уровне простых замен) знаний мало. Я так полагаю, что надо писать свои анализаторы языка, но не уверен. Собственно, потому у меня возник ряд вопрос, которые лучше спросить и более осведомлённых людей.
Писать собираюсь для php (v.5.3), в виду того, что его знаю очень хорошо, а потому не придётся тратить много времени на изучение языка и прочих подводных камней (которые, например, снижают производительность).
Собственно вопросы:
1) И самый главный - имеет ли смысл вообще писать на такую тему? Аналоги есть в сети, но в целом достойных немного, а с поддержкой версии 5.3 ещё меньше.
2) Имеет ли смысл писать именно для php или есть смысл взглянуть на другой язык? Если да, то на какие и кратко почему.
3) Примерная сложности разработки
4) На каком языке программирования лучше всего писать обфускатор? Т.е. какой язык более подходит для моих целей? Из языков программирования отлично разбираюсь во всем, что как-то связано с веб-программированием, на базовом уровне (в среднем) программирую на C#, C++, Java
Насколько мне известно PHP это ниразу не компилируемый язык, а также он не попадает на клиент как JavaScript, так как используется для серверных решений, спрашивается, зачем тогда обфусцировать код на PHP?
Касаемо сложности разработки: ты сможешь сделать синтаксический и семантический анализатор PHP за приемлемое время?
В принципе, я пишу это для того, чтобы кто-то использовал, у кого не будет доступа к Zend Guard (который и стоит нормально). Помимо обфускации хочу добавить немного оптимизации кода, но это не основная цель, но рассматриваться и по возможности делаться будет.
Ну а зачем серверный код обфусцровать?
1)Ну, допустим, написал человек какую-либо библиотеку/модуль/прочее и хочет её распространять, при этом не хочет давать доступа к исходным кодам. Если в рамках компилируемых языков это в целом делается просто за счет того, что не все разбираются в асм-языках (ну или в том, что получилось после трансляции) - все равно среднестатистический программист (не профессионал) вряд ли сможет разобраться что, где, к чему и как. В рамках скриптовых языках все хуже - там вообще код открытым текстом. Поэтому хорошая обфускация хоть как-то позволяет защитить код.
2) Работа с заказчиком. Ну это уже моя личная амбиция. Просто есть такие категории заказчиков, которых не устраивает "показываете на своем сервере и если работает, то я вам отсылаю деньги и вы мне код". Некоторые хотят у себя сразу проверить. Естественно, есть такие "личности", которые проверят и присвоят себе безвозмездно. Обфускацией можно будет хотя бы усложнить ему жизнь, или встроить в скрипт ограничение на кол-во запусков и типа того. Опять же - опытный человек сможет разобраться, как исправить. Но учитывая большое кол-во быдла на php, в обфусцированном коде даже удалить такую защиту подавляющему большинству программистов будет крайне сложно.
А вот как раз и в анализаторах и проблема. Я потому и спросил, потому что сам не могу примерно расчитать время, т.к. в теме не ориентируюсь. В общем, тогда дополнительный вопрос - мб кто знает хорошую литературу по теме?
Я так полагаю, смотреть надо в сторону книжек по написанию компиляторов и подобного?
Upd: специализация моя - комплексное обеспечение инф.безопасности автоматизированных систем, но тянет больше в программирование.
не уверен что семантический анализ необходим для обфускации
--> UAS:
2) в случае с php задача сильно осложняется тем, что он позволяет микшировать код с html-ом и javascript-ом, так что придётся делать еще и синтаксический анализ этих языков. думаю что для первой разработки это будет неподъемная задача. кроме того если php поддерживает еще и динамическое выполнение (имею в виду что-то типа ф-ции eval() в js), то это дополнительное затруднение
4) из языков я бы выбрал пролог, символьная обработка -- это одно из типичных его применений. а еще можно обойтись без написания синтаксического анализатора вручную -- воспользоваться чем-нибудь вроде yacc + lex
А вот как раз и в анализаторах и проблема. Я потому и спросил, потому что сам не могу примерно расчитать время, т.к. в теме не ориентируюсь. В общем, тогда дополнительный вопрос - мб кто знает хорошую литературу по теме?
Я написал полный парсер C# 4.0 и встроил его в виде плагина в компилятор Nemerle примерно за 1.5-2 месяца, до этого опыта разработки парсеров практически не имел. Язык реализации - Nemerle + макрос PegGrammar.
не уверен что семантический анализ необходим для обфускации
Так как это частный случай компиляции, то необходимо выполнять хоть какую-то типизацию тел методов. А это уже натуральный семантический анализ кода.
Помимо этого необходимо будет производить операции над деревьями выражений (предложений) - одни конструкции заменять другими, а также одни имена - другими, непонятными для человека.
Вообщем, я пока хз делать или нет. Будет свободное время - сяду сам поразбираться, там уже тогда сделаю сам выводы.
Вообщем, я пока хз делать или нет. Будет свободное время - сяду сам поразбираться, там уже тогда сделаю сам выводы.
Ты на #codenet бы зашел, ато мы с Одиссеем чуть не начали обфускатор без тебя писать. :D