Перемешивание кода программы
От: duke89 Россия  
Дата: 21.03.04 11:45
Оценка:
Привет всем!
У меня следующий вопрос. Нужно мне защитить программу от запуска, т.е. перед запуском программы всплывает окно, там я ввожу какую-то комбинацию чисел и символов, если все введено правильно, то программа запускается, если нет-то нет. Но мн тут сказали, что проверку правильности введения комбинации можно легко обойти с помощью какого-нибудь Debuggerа, и посоветовали сделать это, как в WinRar-е когда он перемешивает строки программы в соответствии с паролем, и, если пароль введен неправильно, программа не запустится, т.к. строки все перепутаны. Ну так вот, я мог бы сделать так же, вот только делаю я всё это для защиты от пиратства, и, если при вводе пароля программа будет собираться и сохраняться где-то в целом и готовом виде, то обойти проверку пароля будет ещё проще, копировав этот целый готовый собранный exe-шник и распространяя его. Поэтому у меня вопрос, можно ли как-нибудь защитить этот exe-шник от копирования и, если кто знает, как вообще решается этот вопрос во многих try-and-buy программах. Заранее спасибо всем ответившим.

P.S. Прошу прощения у модераторов, я просто не знал к какой теме отнести это соощение.
Re: Перемешивание кода программы
От: alexxxander  
Дата: 21.03.04 18:41
Оценка:
Здравствуйте, duke89, Вы писали:

D>Привет всем!

D>У меня следующий вопрос. Нужно мне защитить программу от запуска, т.е. перед запуском программы всплывает окно, там я ввожу какую-то комбинацию чисел и символов, если все введено правильно, то программа запускается, если нет-то нет. Но мн тут сказали, что проверку правильности введения комбинации можно легко обойти с помощью какого-нибудь Debuggerа, и посоветовали сделать это, как в WinRar-е когда он перемешивает строки программы в соответствии с паролем, и, если пароль введен неправильно, программа не запустится, т.к. строки все перепутаны. Ну так вот, я мог бы сделать так же, вот только делаю я всё это для защиты от пиратства, и, если при вводе пароля программа будет собираться и сохраняться где-то в целом и готовом виде, то обойти проверку пароля будет ещё проще, копировав этот целый готовый собранный exe-шник и распространяя его. Поэтому у меня вопрос, можно ли как-нибудь защитить этот exe-шник от копирования и, если кто знает, как вообще решается этот вопрос во многих try-and-buy программах. Заранее спасибо всем ответившим.

Я вообще точно не уверен, но, помоему, ничто не мешает в процессе иницализации писать и читать секцию кода в памяти, при этом, помоему, у этих секций стоит атрибут COPY_ON_WRITE, в результате чего при попытке записи просто создаются и используются "грязные" копии страниц секции (но это увеличивает степень использования физ. памяти).
The less I have the more I gain (с) Metallica
Re: Перемешивание кода программы
От: Pashka R. Украина  
Дата: 22.03.04 00:52
Оценка:
Здравствуйте, duke89, Вы писали:

D>Привет всем!

D>У меня следующий вопрос. Нужно мне защитить программу от запуска, т.е. перед запуском программы всплывает окно, там я ввожу какую-то комбинацию чисел и символов, если все введено правильно, то программа запускается, если нет-то нет. Но мн тут сказали, что проверку правильности введения комбинации можно легко обойти с помощью какого-нибудь Debuggerа, и посоветовали сделать это, как в WinRar-е когда он перемешивает строки программы в соответствии с паролем, и, если пароль введен неправильно, программа не запустится, т.к. строки все перепутаны. Ну так вот, я мог бы сделать так же, вот только делаю я всё это для защиты от пиратства, и, если при вводе пароля программа будет собираться и сохраняться где-то в целом и готовом виде, то обойти проверку пароля будет ещё проще, копировав этот целый готовый собранный exe-шник и распространяя его. Поэтому у меня вопрос, можно ли как-нибудь защитить этот exe-шник от копирования и, если кто знает, как вообще решается этот вопрос во многих try-and-buy программах. Заранее спасибо всем ответившим.

D>P.S. Прошу прощения у модераторов, я просто не знал к какой теме отнести это соощение.


Я интересовался недавно этим вопросом и вот, что я надумал:

1) кодируем exe'шник, скажем blowfish
2) где-то сохрняем
3) пароль — ключ к декодеровщику (там правда прийдется использовать еще и контрольные суммы, но думаю это на проблама )
4) декодируем (конечно-же в памяти)
5) запускаем (конечно-же из памяти, т.е. не имея образа на диске)

а вот теперь возникают проблемы... как запустить программулю из RAM'ы... я в MSDN ничего не нашел... кроме как писать свой загрузчик, тобишь берем и разбираем PE формат.... ну и так далее

второй ньюанс -- это то, что под debuger'ом можно "снять" кусок памяти и сделать образ, а потом распространять... да, можно, но это будет чуть-чуть сложнее как сказала кто-то умный — нет идеальной защиты информации, если один придумал идеаоьную защиту — найдется еще один, кто взломает эту защиту
-----
Best regards, Pashka R. <pashka@land.ru>
ICQ: 860730
Re[2]: Перемешивание кода программы
От: duke89 Россия  
Дата: 22.03.04 14:51
Оценка:
Здравствуйте, Pashka R., Вы писали:

PR>Я интересовался недавно этим вопросом и вот, что я надумал:


PR>1) кодируем exe'шник, скажем blowfish

PR>2) где-то сохрняем
PR>3) пароль — ключ к декодеровщику (там правда прийдется использовать еще и контрольные суммы, но думаю это на проблама )

Дело в том, что пароль на каждом компьютере будет менятся.

PR>4) декодируем (конечно-же в памяти)

PR>5) запускаем (конечно-же из памяти, т.е. не имея образа на диске)

PR>а вот теперь возникают проблемы... как запустить программулю из RAM'ы... я в MSDN ничего не нашел... кроме как писать свой загрузчик, тобишь берем и разбираем PE формат.... ну и так далее


PR>второй ньюанс -- это то, что под debuger'ом можно "снять" кусок памяти и сделать образ, а потом распространять... да, можно, но это будет чуть-чуть сложнее как сказала кто-то умный — нет идеальной защиты информации, если один придумал идеаоьную защиту — найдется еще один, кто взломает эту защиту
Re[3]: Перемешивание кода программы
От: duke89 Россия  
Дата: 22.03.04 19:05
Оценка:
D>Здравствуйте, Pashka R., Вы писали:

PR>>Я интересовался недавно этим вопросом и вот, что я надумал:


PR>>1) кодируем exe'шник, скажем blowfish

PR>>2) где-то сохрняем
PR>>3) пароль — ключ к декодеровщику (там правда прийдется использовать еще и контрольные суммы, но думаю это на проблама )

D> Дело в том, что пароль на каждом компьютере будет менятся.


Всё, проблема решена. Пользователь шлёт мне пароль, я шифрую прогу, шлю ему, он копирует к себе, запускает её и всё пучком
Вот только зачем нужны контрольные суммы и вообще что это такое?

PR>>4) декодируем (конечно-же в памяти)


это понятно

PR>>5) запускаем (конечно-же из памяти, т.е. не имея образа на диске)


а вот как это сделать я не въехал...

PR>>а вот теперь возникают проблемы... как запустить программулю из RAM'ы... я в MSDN ничего не нашел... кроме как писать свой загрузчик, тобишь берем и разбираем PE формат.... ну и так далее


PR>>второй ньюанс -- это то, что под debuger'ом можно "снять" кусок памяти и сделать образ, а потом распространять... да, можно, но это будет чуть-чуть сложнее как сказала кто-то умный — нет идеальной защиты информации, если один придумал идеаоьную защиту — найдется еще один, кто взломает эту защиту


этим я потом займусь
Re[4]: Перемешивание кода программы
От: Pashka R. Украина  
Дата: 22.03.04 22:32
Оценка:
Здравствуйте, duke89, Вы писали:

D> Всё, проблема решена. Пользователь шлёт мне пароль, я шифрую прогу, шлю ему, он копирует к себе, запускает её и всё пучком


ну на счет этого момента я бы поспорил а он не может менять пароль???...

D> Вот только зачем нужны контрольные суммы и вообще что это такое?


контрольные суммы нужны для проверки правильности информации. например, я ввел неверный пароль, ты декодировал (соответственно неправильно)... что делать? запускать, это время и тд., а так — сверил сумму, если не совпала — пароль не верный

а на счет запуска из памяти — на сколько я понял, надо писать свой загрузчик, тобишь, открыли файло (EXE'шник) и парсим его... перестраиваем, и запускаем

у меня есть исходники UPX, там это все есть... могу выслать
-----
Best regards, Pashka R. <pashka@land.ru>
ICQ: 860730
Re[5]: Перемешивание кода программы
От: duke89 Россия  
Дата: 23.03.04 10:42
Оценка:
Здравствуйте, Pashka R., Вы писали:

PR>Здравствуйте, duke89, Вы писали:


D>> Всё, проблема решена. Пользователь шлёт мне пароль, я шифрую прогу, шлю ему, он копирует к себе, запускает её и всё пучком


PR>ну на счет этого момента я бы поспорил а он не может менять пароль???...

А он и не должен... Иначе смысл защиты от копирования теряется!

D>> Вот только зачем нужны контрольные суммы и вообще что это такое?


PR>контрольные суммы нужны для проверки правильности информации. например, я ввел неверный пароль, ты декодировал (соответственно неправильно)... что делать? запускать, это время и тд., а так — сверил сумму, если не совпала — пароль не верный

Всё ясно, только эти суммы наверняка уменьшат криптостойкость алгоритма...

PR>а на счет запуска из памяти — на сколько я понял, надо писать свой загрузчик, тобишь, открыли файло (EXE'шник) и парсим его... перестраиваем, и запускаем


PR>у меня есть исходники UPX, там это все есть... могу выслать


Высылай:webmailmaster@bratan.ru
Re[6]: Перемешивание кода программы
От: a-lex Россия  
Дата: 24.03.04 18:41
Оценка:
Здравствуйте, duke89, Вы писали:

D>Всё ясно, только эти суммы наверняка уменьшат криптостойкость алгоритма...


Ну насчет этого беспокоиться не нужно: значение контрольной суммы заранее неизвестно, поэтому никакой пользы для атаки она не принесет. Если уж на то пошло, в exe-шнике можно найти километровые куски с наперед известным содержанием. Но это тоже ничего, если использовать для шифровки нормальный алгоритм (тот же Blowfish например).

Касательно защиты от копирования: может быть, более простым вариантом будет кодировать не весь exeшник, а только некоторый набор функций из него? И вызывать их, например, через указатели-на-функции, которые будут настраиваться при расшифровке. Тогда можно избежать необходимости самостоятельно настраивать образ в памяти. К тому же этот подход позволяет, например, расшифровывать некоторые функции по мере надобности, а после исполнения выкидывать. Это сильно усложнит получение расшифрованного образа из памяти.
Re[4]: Перемешивание кода программы
От: PK Sly http://www.vocord.ru/
Дата: 24.03.04 21:29
Оценка:
D> Всё, проблема решена. Пользователь шлёт мне пароль, я шифрую прогу, шлю ему, он копирует к себе, запускает её и всё пучком

потом эта версия вместе с серийником пойдёт по рукам..
VAX/VMS rulez!
Re[5]: Перемешивание кода программы
От: duke89 Россия  
Дата: 24.03.04 22:50
Оценка:
Здравствуйте, PK Sly, Вы писали:

D>> Всё, проблема решена. Пользователь шлёт мне пароль, я шифрую прогу, шлю ему, он копирует к себе, запускает её и всё пучком


PS>потом эта версия вместе с серийником пойдёт по рукам..


Не пойдет. Серийник генерируется на каждом компе случайным образом, затем записывается в бут сектор ж.д(кстати, вот это надо поменять: пусть генерируется на основе, например, серийного номера ж.д или версии биоса или еще чего-нить...)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.