Правильно или вовремя? - небольшой писк души

Во время беседы с одним работником из моей команды, я еще раз задумался о некоем спектре. На одном конце его находятся личности типы Дымова, которые, если программа крашится под Borland, переходили на VC++ и наоборот. Такие люди не смущаются вставить уродливые подпорки "чтобы работало". Такие люди плохо работаю в длинных проектах, слишком много энтропии они вносят в код. Зато если надо кровь из носу сделать так, чтобы работало здесь и сейчас к 4 часам - они лучше всех

На другом конце спектра находятся люди, которые считают, что все должно быть "идеологически правильно". Они против создания абы чего, но быстро. Они хорошо работают в длинных проектах, но разговаривать с ними - часто сущее мучение.

Вот вчера. Задача. Ищутся соответствия записей в базе клиента и базе нашей. Клиент данные давать не хочет. Придется ему давать нашу базу. Но ее тоже давать не хочется. Я (ближе к "дымному" концу спектра), быстро ваяю извращенное решение. Обфускированная аппликация .Net держит в себе все скрипты. База дается клиенту бэкапом с зашифрованными колонками. Они расшифровываются в таблицы tempdb в транзакции (в SQL 2005 их не прочитать совсем из другой коннекции) и уже с ними делаются JOINS. Потом отчет записывается, а транзакция откатывается. Да, сама аппликация защищается от профайлирования добавкой and ''=left(pwdencrypt(''),0) во все квери

Все можно сбацать за две недельки max. Клиент доволен. Сотрудник (снисходительно):
- Это плохое решение. Есть же стандартные методы решения таких задач. зачем изобретать велосипед
Я: ну так подскажи
Он: надо все переписать на .Net
Я: (падаю под стол) Год работы??? Это все существует в виде скриптов.
Он: Ну а что?
Я: (хочу перенести спор из идеологического в прагматическое русло) Клиент ждет результата в сентябре!
Он: Ну тогда можно давать базы шифрованную в виде DLL в SQL Express Edition
Я: Там ограничение на 1 процессор и 1Gb оперативки
Он: ну и что
Я: Express работает с базами до 4Gb. А там базы от 100Gb
Он: Ну тогда все таки надо делать на .Net
Я: В адресном пространстве 32bit машины, ограниченной 2Gb?
Он: Ну выгрузку какую нибудь сделать
Я: Сравнение 2M записей с одной стороны и 40M с другой дает такое число комбинаций, что перебирая по 10Mln комбинаций в секунду, сравнение будет идти 63 дня. Без hash join не обойтись. Ты же не собираешься писать hash join сам и "изобретать велоспед"?
И тут он меня убил окончательно
- 63 дня? А клиент ведь до этого ни разу отчет не запускал? Ну так он и не будет знать, сколько он идет

Вот я теперь думаю, уволить его или оставить, чтобы он облагораживающе действовал на меня с идеологической стороны?

А вообще вспомнился анекдот:

Жили-были мыши и все их обижали. Как-то пошли они к мудрому филину и говорят:
- Мудрый филин, помоги советом. Все нас обижают, коты разные, совы.
Что нам делать?
Филин подумал и говорит:
- А вы станьте ёжиками. У ёжиков иголки, их никто не обижает.
Мыши обрадовались и побежали домой. Но по дороге одна мышка сказала:
- Как же мы станем ёжиками? - и все побежали обратно, чтобы задать этот вопрос мудрому филину.
Прибежав, они спросили:
- Мудрый филин, а как же мы станем ёжиками?
И ответил филин:
- Ребята, вы меня ерундой не грузите. Я стратегией занимаюсь.

Комментарии

Изображение пользователя Serguei_Tarassov.

А зачем пихать

А зачем пихать скрипты в приложение?
Сделай ZIP-архив с длинным паролем и открывай его в программе.
Тогда развяжешся по скриптам.

P.S. А чего на форум, а не в блог написал?

А у нас все

А у нас все равно обфускатор куплен, так что чего уж тут
А про блог я не подумал

У тебя есть

У тебя есть программа "hello, World!"
Если ты заглянешь внутрь EXE, то ты найдешь эту строку
В коде .Net еще много чего можно найти (.net EXE легко дизассемблировать)
Обфускатор борется с этим все шифруя в файле (в памяти потом расшифровывается)

ИМХО, это всего лишь видимость защиты :)

А на копьютере, где программа запускается, должен быть спец. модуль установлен? Или он в ОС встроен? От куда ключи берутся?
Если модуль расшивровывается в памяти, то значит его можно оттуда вытащить и посмотреть :).

Нет, это нечто в

Нет, это нечто в духе self-extracting ZIP. Он сам себя расшифровывает
А в памяти можно все посмотреть. Можно запустить под VMware, приостановаить, и она себя AS IS в файл запишет
Другое дело что в US дизассемблирование запрещено
То есть это не защита от хакеров, а защита от честных фирм, которые теперь не могут сказать - "увидел файл ресурса и взял оттуда все скрипты".

Изображение пользователя ipanshin.

Есть еще одна

Есть еще одна хорошая сказка про королевство кривых зеркал. Кривизна возведенная в квадрат дает правильный результат. Поэтому ты выбрав такое кривое решение я бы даже сказал в квадрате был прав.