Здравствуйте, D. Mon, Вы писали:
DM>Здравствуйте, ivanchez0077, Вы писали:
I>>Пропатчить C# исходники ведь элементарно, значит элементарно отключить эту проверку. И эту проверку, повторюсь, на сервер не вынесешь, все равно строчку "if (ключ не куплен)" нужно будет держать в программе по-любому.
DM>Например, объединить проверку с инициализацией каких-то важных данных, без которых все падает. Убрали или не прошли проверку — прога не работает. У меня так.
не пойму, как? как ни крути при любом раскладе всегда в коде будет что-то вроде if (лицензия_куплена) ....
вот эту строчку можно либо удалить, либо заменить на true
Здравствуйте, ivanchez0077, Вы писали:
I>не пойму, как? как ни крути при любом раскладе всегда в коде будет что-то вроде if (лицензия_куплена) .... I>вот эту строчку можно либо удалить, либо заменить на true
Сам код проверки должен быть максимально запутан. Тогда получается что-то вроде:
int thisShouldBeOne = 0;
bool CheckCodeAndSetThatVarToOne(string code) {
... // something well obfuscated
}
if (CheckCodeAndSetThatVarToOne(code))
MessageBox("welcome!");
else
MessageBox("Fuck off");
someValue = otherThing / thisShouldBeOne;
Form[] windows = {badWindow, goodWindow};
windows[thisShouldBeOne].Show();
Если убрать этот if или изменить CheckCodeAndSetThatVarToOne() на return true, то все равно программа не заработает.
Здравствуйте, ivanchez0077, Вы писали:
I>Здравствуйте, TheByteMan, Вы писали:
TBM>>А что еще нужно для правки MSIL кода? Достать сборку, удалить мертвые(недостижимые) блоки инструкций если есть, закинуть в рефлектор — найти что нужно, подправить MSIL, собрать и вуаля. Взлом NET-а до ужаса примитивен, по крайне мере в большинстве случаев, в подавляющем большинстве случаев.
I>ну тогда как проверять, куплен у моей проги ключ пользователем или нет? Все равно в любом случае где-то в самой программе мне нужна будет строчка:
I>if (ключ не куплен) I> message Купи ключ I>else I> // работаем....
I>Пропатчить C# исходники ведь элементарно, значит элементарно отключить эту проверку. И эту проверку, повторюсь, на сервер не вынесешь, все равно строчку "if (ключ не куплен)" нужно будет держать в программе по-любому.
Я выше написал приблизительно, что вы можете сделать. Есть множества способов, как можно усложнить или затруднить реверсинг программы на C#, от динамической кодо-генерации с помощью Reflection.Emit(CodeDom,Expression trees) до создания своей виртуальной машины поверх стандартной CLR, все зависит от вашей фантазии и желания потратить на это время.
Здравствуйте, D. Mon, Вы писали:
I>>не пойму, как? как ни крути при любом раскладе всегда в коде будет что-то вроде if (лицензия_куплена) .... I>>вот эту строчку можно либо удалить, либо заменить на true
DM>Сам код проверки должен быть максимально запутан. Тогда получается что-то вроде: DM>Если убрать этот if или изменить CheckCodeAndSetThatVarToOne() на return true, то все равно программа не заработает.
несколько лет назад у меня была проверка кода размазана по всей программе в несколько этапов, в разных режимах работы программы, ключ из нескольких сегментов, итд, в итоге кто-то упорный всё это выкопал и написал кейген...
С++/winapi
поэтому не тратьте время, кряк/патч это не кейген, вы этих людей всё равно не монетизируйте.
Здравствуйте, uuuser, Вы писали:
U>несколько лет назад у меня была проверка кода размазана по всей программе в несколько этапов, в разных режимах работы программы, ключ из нескольких сегментов, итд, в итоге кто-то упорный всё это выкопал и написал кейген... U>С++/winapi
U>поэтому не тратьте время, кряк/патч это не кейген, вы этих людей всё равно не монетизируйте.
А к моим продуктам ни одного кейгена за 9 лет не появилось. Может, не зря интересно потратил время?
Здравствуйте, D. Mon, Вы писали:
DM>Здравствуйте, uuuser, Вы писали: DM>А к моим продуктам ни одного кейгена за 9 лет не появилось. Может, не зря интересно потратил время?
Кейген не показатель — используйте стойкое асимметричное шифрования, с ключами в 4096 bit, и никаких кейгенов вы не увидите, в отличие от пропатченых версий программы.
Здравствуйте, consign, Вы писали:
C>Здравствуйте, dsorokin, Вы писали:
D>>Да вроде бы вполне неплох бесплатный DotFuscator Community Edition
C>Худший из бесплатных.
Здравствуйте, D. Mon, Вы писали:
DM>Если убрать этот if или изменить CheckCodeAndSetThatVarToOne() на return true, то все равно программа не заработает.
тогда можно просто установить thisShouldBeOne = 1, и все. проверка на то, куплен ли ключ, так и остается в программе. все зиждется на обфускации.
вот как бы эту проверку вынести куда-нибудь из программы куда-нибудь вообще полностью? даже если вынести на сервер, то в программе будет функции проверка ответа с сервера -- куплен ли ключ, которую можно изменить на true. приходим к тому же.
DM>>Здравствуйте, uuuser, Вы писали: DM>>А к моим продуктам ни одного кейгена за 9 лет не появилось. Может, не зря интересно потратил время?
TBM>Кейген не показатель — используйте стойкое асимметричное шифрования, с ключами в 4096 bit, и никаких кейгенов вы не увидите, в отличие от пропатченых версий программы.
не понял, в чем отличие, кейген и патч? оба в итоге дают одно и то же — вашей программой будут пользоваться за бесплатно.
Здравствуйте, ivanchez0077, Вы писали:
I>Здравствуйте, TheByteMan, Вы писали:
I>не понял, в чем отличие, кейген и патч? оба в итоге дают одно и то же — вашей программой будут пользоваться за бесплатно.
Патч никак не задевает или не доставит неудобств существующим пользователям, кейген же как раз приносит неудобствам им — придется менять алгоритм генерации ключа, и просить их сменить его.
Здравствуйте, ivanchez0077, Вы писали:
I>тогда можно просто установить thisShouldBeOne = 1, и все. проверка на то, куплен ли ключ, так и остается в программе. все зиждется на обфускации.
Да, все верно, зижется. Именно поэтому важно иметь хорошую. А стопроцентной защиты все равно не будет, вопрос лишь в том, чтобы затраты усилий на взлом оказались выше, чем крякеры готовы потратить.
Здравствуйте, ivanchez0077, Вы писали:
I>не понял, в чем отличие, кейген и патч? оба в итоге дают одно и то же — вашей программой будут пользоваться за бесплатно.
1. с торрента/файлобменника скачивается инсталлятор с неподписанным патчем который надо скопировать в директорию с программой не смотря на все предупреждения UAC
2. программа скачивается с офф.сайта, ключи находятся гуглом