Xaktyc писал(а): ↑30.06.2009 00:43
joebraker писал(а): ↑29.06.2009 23:38
Сама программа проверяет саму себя на наличие лажи (mp5 сумма например). То же она делает и исходниками: сверяет их с суммой, отосланной клиентом. Затем считает сумму для бинарника и высылает клиенту, и он уже сравнивает то что ему пришло с искомой суммой. Если не совпадает - тогда этот файл отвергается.
Это имхо бред получается. В первом случае поверх того патча накладывается другой, когда программа НЕ проверяет, но выдает как будто проверила - банально, правда? У меня друг был крякером, он подобным занимался. Чем сложнее защита, тем просто сложнее ее ОДИН РАЗ сломать, а дальше, когда принцип понят все делает один единственный патч. Тем более процедура облегчается - distcc собирается из исходников - их править легче, чем ASM, да и вся защита налицо!
Вот сравнивать с суммой (кстати, mp5 это пистолет-пулемет такой

) не получится, ибо сумма в КАЖДОМ отдельном случае заранее не известна. Под core2 она может быть одна, под pentium будет другой, одна банальная асм-вставка изменяет контрольную сумму. Просчитывать все варианты - не вариант. Почему? Возьмем n=количество оптимизаций вставками+количество архитектур тогда количество компиляций и контрольных сумм для каждого пакета = n! (n факториал).
В качестве решения можно в эту сеть принимать проверенных людей с LinuxForum'а. Это слабая защита, но эффективней, чем никакая. Но тоже бредовая, т.к придется делать ручной отбор и сократится количество участников. Хотя программная защита ломаема всегда.
Насколько я понял, можно компилировать под чужую архитектуру и с чужими настройками, т.е. полностью сэмулировать поведение чужого компьютера. В этом случае проблем быть не должно.
Видимо, чтобы решить проблему безопасности, нужно использовать закрытый модуль, который бы подлинковывался к distcc и содержал бы в себе неизвестные алгоритмы шифрования.
Тогда происходит следующее.
1. Клиент и сервер скачивают два файла с сайта, например, mask1 и mask2. Далее модуль получает контрольное выражение для mask1 + бинарники distcc. Отсылает ее в зашифрованном виде серверу. Сервер в это время получает контрольное выражение для mask2 + бинарники distcc. Получает другое контрольное выражение, отсылает его партнеру. Затем они сами проверяют, то ли им пришло, и говорят пользователю, нормальная ли там версия бинарников. Если да, то можно начинать компиляцию. Ну и потом сам distcc считает md5 сумму полученного obj-файла и пересылает ее клиенту, а тот проверяет, не добавлено ли туда лажи какой-то.
Конечно, тут встает вопрос доверия к сайту, но ему доверять проще, чем миллиону произвольных пользователей.
PS. Ну это все мысли вслух, конечно. На окончательное решение проблемы не претендует.