Есть такой вопрос: у меня есть программка и я хочу защитить ее от копирования, для этого я выбрал привязку к серийнику винта. Действую таким образом: пишу вторую прогу, в которой беру серийник, его извращаю по некоторому алгоритму и пишу получившееся 64 битное число в реестр. Основная прога каждый раз при запуске извращает серийник по тому же алгоритму и сравнивает его с числом в реестре (если его там нет, выходим). Если сравнение успешно, то все понятно, если же не успешно, то тогда не вызывается оператор new для некоторого указателя, в который я потом пишу в разных местах программы всякую ерунду. Мне здесь видится самое слабое место в сравнении двух чисел, но я пока не знаю как его усилить.
Господа программисты, хотелось бы услышать ваши мнения по поводу такого метода а также размышления по поводу кто из вас как стал бы такую защиту ломать.
Здравствуйте, Corvin, Вы писали:
C>Хай всем.
C> Есть такой вопрос: у меня есть программка и я хочу защитить ее от копирования, для этого я выбрал привязку к серийнику винта. Действую таким образом: пишу вторую прогу, в которой беру серийник, его извращаю по некоторому алгоритму и пишу получившееся 64 битное число в реестр. Основная прога каждый раз при запуске извращает серийник по тому же алгоритму и сравнивает его с числом в реестре (если его там нет, выходим). Если сравнение успешно, то все понятно, если же не успешно, то тогда не вызывается оператор new для некоторого указателя, в который я потом пишу в разных местах программы всякую ерунду. Мне здесь видится самое слабое место в сравнении двух чисел, но я пока не знаю как его усилить. C> Господа программисты, хотелось бы услышать ваши мнения по поводу такого метода а также размышления по поводу кто из вас как стал бы такую защиту ломать.
C> Спасибо.
такое же число вычислю и положу куда надо.
а с new лучше даже через него кусочки кода исполнять, которые для конкретного серийника закриптованы.
I>такое же число вычислю и положу куда надо.
А как ты его вычислишь если у тебя нету исходников?
I>а с new лучше даже через него кусочки кода исполнять, которые для конкретного серийника закриптованы.
Не понял, что ты имеешь ввиду.
Может, существуют какие-то надежные способы защиты?
Здравствуйте, Corvin, Вы писали:
C>Здравствуйте, ilnar, Вы писали:
I>>такое же число вычислю и положу куда надо. C>А как ты его вычислишь если у тебя нету исходников?
а твоя программа же у меня его запишет. а мне исходники и незачем.
I>>а с new лучше даже через него кусочки кода исполнять, которые для конкретного серийника закриптованы. C>Не понял, что ты имеешь ввиду.
например на его ключ ты готовишь криптованные тела функций. они декриптуются, положишь в память, и вызывешь по адресу, ну там еще пару мелочей еще добавить надо, но идея вот такая.
C>Может, существуют какие-то надежные способы защиты?
есть программы для обертки твоей программы защитной оболочкой.
Здравствуйте, ilnar, Вы писали:
I>>>такое же число вычислю и положу куда надо. C>>А как ты его вычислишь если у тебя нету исходников? I>а твоя программа же у меня его запишет. а мне исходники и незачем.
Так той программки, которая вычисляет и в реестр пишет у тебя нет...
I>>>а с new лучше даже через него кусочки кода исполнять, которые для конкретного серийника закриптованы. C>>Не понял, что ты имеешь ввиду. I>например на его ключ ты готовишь криптованные тела функций. они декриптуются, положишь в память, и вызывешь по адресу, ну там еще пару мелочей еще добавить надо, но идея вот такая.
Ладно, оставим, это что-то слишком для меня пока сложно
C>>Может, существуют какие-то надежные способы защиты? I>есть программы для обертки твоей программы защитной оболочкой.
Какие? может, подскажешь?
Здравствуйте, Corvin, Вы писали:
C> Господа программисты, хотелось бы услышать ваши мнения по поводу такого метода а также размышления по поводу кто из вас как стал бы такую защиту ломать.
Приблизительно так:
1. А не лазит ли программа в реестр? Вот это да! Лазит! А куда?
2. Добавляем соответствующий ключ в реестр с любой фигней.
3. Идем дальше по коду (SoftIce forever), ждем, когда то, что взято из реестра, используется в сравнении. С чем сравнивается? Ага. Это мы и пропишем.
Слабое место защиты в том, что вся защита висит на одном сравнении.
Как видишь даже не нужно знать алгоритм, по которому извращается серийник. Чем сложнее этот алгоритм, тем, видимо, сильнее ты вспотел. И это хорошо!!!
Здравствуйте, Corvin, Вы писали:
C>Здравствуйте, ilnar, Вы писали:
I>>>>такое же число вычислю и положу куда надо. C>>>А как ты его вычислишь если у тебя нету исходников? I>>а твоя программа же у меня его запишет. а мне исходники и незачем. C>Так той программки, которая вычисляет и в реестр пишет у тебя нет...
есть та, которая проверяет, как тебе уже писали, алгоритм не важен
I>>>>а с new лучше даже через него кусочки кода исполнять, которые для конкретного серийника закриптованы. C>>>Не понял, что ты имеешь ввиду. I>>например на его ключ ты готовишь криптованные тела функций. они декриптуются, положишь в память, и вызывешь по адресу, ну там еще пару мелочей еще добавить надо, но идея вот такая. C>Ладно, оставим, это что-то слишком для меня пока сложно
как раз в эту степь предлагаю копасть, многие распрастраненные системы защиты так делают.
C>>>Может, существуют какие-то надежные способы защиты? I>>есть программы для обертки твоей программы защитной оболочкой. C>Какие? может, подскажешь?
ASProtect, например
Здравствуйте, Corvin, Вы писали:
C>>>Может, существуют какие-то надежные способы защиты? I>>есть программы для обертки твоей программы защитной оболочкой. C>Какие? может, подскажешь?
Есть такая книжка Криса Касперски, называется "Техника и философия хакерских атак". Если тебе действительно нужна более-менее приличная защита, то потрать время на ее прочтение. Тогда варианты, подобные приведенному тобой сейчас, даже и в голову приходить перестанут
ЗЫ
книгу несложно найти в сети, но если возникнут проблемы — могу скинуть на мыло.