Привет всем!
У меня следующий вопрос. Нужно мне защитить программу от запуска, т.е. перед запуском программы всплывает окно, там я ввожу какую-то комбинацию чисел и символов, если все введено правильно, то программа запускается, если нет-то нет. Но мн тут сказали, что проверку правильности введения комбинации можно легко обойти с помощью какого-нибудь Debuggerа, и посоветовали сделать это, как в WinRar-е когда он перемешивает строки программы в соответствии с паролем, и, если пароль введен неправильно, программа не запустится, т.к. строки все перепутаны. Ну так вот, я мог бы сделать так же, вот только делаю я всё это для защиты от пиратства, и, если при вводе пароля программа будет собираться и сохраняться где-то в целом и готовом виде, то обойти проверку пароля будет ещё проще, копировав этот целый готовый собранный exe-шник и распространяя его. Поэтому у меня вопрос, можно ли как-нибудь защитить этот exe-шник от копирования и, если кто знает, как вообще решается этот вопрос во многих try-and-buy программах. Заранее спасибо всем ответившим.
P.S. Прошу прощения у модераторов, я просто не знал к какой теме отнести это соощение.
Здравствуйте, duke89, Вы писали:
D>Привет всем! D>У меня следующий вопрос. Нужно мне защитить программу от запуска, т.е. перед запуском программы всплывает окно, там я ввожу какую-то комбинацию чисел и символов, если все введено правильно, то программа запускается, если нет-то нет. Но мн тут сказали, что проверку правильности введения комбинации можно легко обойти с помощью какого-нибудь Debuggerа, и посоветовали сделать это, как в WinRar-е когда он перемешивает строки программы в соответствии с паролем, и, если пароль введен неправильно, программа не запустится, т.к. строки все перепутаны. Ну так вот, я мог бы сделать так же, вот только делаю я всё это для защиты от пиратства, и, если при вводе пароля программа будет собираться и сохраняться где-то в целом и готовом виде, то обойти проверку пароля будет ещё проще, копировав этот целый готовый собранный exe-шник и распространяя его. Поэтому у меня вопрос, можно ли как-нибудь защитить этот exe-шник от копирования и, если кто знает, как вообще решается этот вопрос во многих try-and-buy программах. Заранее спасибо всем ответившим.
Я вообще точно не уверен, но, помоему, ничто не мешает в процессе иницализации писать и читать секцию кода в памяти, при этом, помоему, у этих секций стоит атрибут COPY_ON_WRITE, в результате чего при попытке записи просто создаются и используются "грязные" копии страниц секции (но это увеличивает степень использования физ. памяти).
Здравствуйте, 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
Здравствуйте, Pashka R., Вы писали:
PR>Я интересовался недавно этим вопросом и вот, что я надумал:
PR>1) кодируем exe'шник, скажем blowfish PR>2) где-то сохрняем PR>3) пароль — ключ к декодеровщику (там правда прийдется использовать еще и контрольные суммы, но думаю это на проблама )
Дело в том, что пароль на каждом компьютере будет менятся.
PR>4) декодируем (конечно-же в памяти) PR>5) запускаем (конечно-же из памяти, т.е. не имея образа на диске)
PR>а вот теперь возникают проблемы... как запустить программулю из RAM'ы... я в MSDN ничего не нашел... кроме как писать свой загрузчик, тобишь берем и разбираем PE формат.... ну и так далее
PR>второй ньюанс -- это то, что под debuger'ом можно "снять" кусок памяти и сделать образ, а потом распространять... да, можно, но это будет чуть-чуть сложнее как сказала кто-то умный — нет идеальной защиты информации, если один придумал идеаоьную защиту — найдется еще один, кто взломает эту защиту
D>Здравствуйте, Pashka R., Вы писали:
PR>>Я интересовался недавно этим вопросом и вот, что я надумал:
PR>>1) кодируем exe'шник, скажем blowfish PR>>2) где-то сохрняем PR>>3) пароль — ключ к декодеровщику (там правда прийдется использовать еще и контрольные суммы, но думаю это на проблама )
D> Дело в том, что пароль на каждом компьютере будет менятся.
Всё, проблема решена. Пользователь шлёт мне пароль, я шифрую прогу, шлю ему, он копирует к себе, запускает её и всё пучком
Вот только зачем нужны контрольные суммы и вообще что это такое?
PR>>4) декодируем (конечно-же в памяти)
это понятно
PR>>5) запускаем (конечно-же из памяти, т.е. не имея образа на диске)
а вот как это сделать я не въехал...
PR>>а вот теперь возникают проблемы... как запустить программулю из RAM'ы... я в MSDN ничего не нашел... кроме как писать свой загрузчик, тобишь берем и разбираем PE формат.... ну и так далее
PR>>второй ньюанс -- это то, что под debuger'ом можно "снять" кусок памяти и сделать образ, а потом распространять... да, можно, но это будет чуть-чуть сложнее как сказала кто-то умный — нет идеальной защиты информации, если один придумал идеаоьную защиту — найдется еще один, кто взломает эту защиту
Здравствуйте, duke89, Вы писали:
D> Всё, проблема решена. Пользователь шлёт мне пароль, я шифрую прогу, шлю ему, он копирует к себе, запускает её и всё пучком
ну на счет этого момента я бы поспорил а он не может менять пароль???...
D> Вот только зачем нужны контрольные суммы и вообще что это такое?
контрольные суммы нужны для проверки правильности информации. например, я ввел неверный пароль, ты декодировал (соответственно неправильно)... что делать? запускать, это время и тд., а так — сверил сумму, если не совпала — пароль не верный
а на счет запуска из памяти — на сколько я понял, надо писать свой загрузчик, тобишь, открыли файло (EXE'шник) и парсим его... перестраиваем, и запускаем
у меня есть исходники UPX, там это все есть... могу выслать
-----
Best regards, Pashka R. <pashka@land.ru>
ICQ: 860730
Здравствуйте, Pashka R., Вы писали:
PR>Здравствуйте, duke89, Вы писали:
D>> Всё, проблема решена. Пользователь шлёт мне пароль, я шифрую прогу, шлю ему, он копирует к себе, запускает её и всё пучком
PR>ну на счет этого момента я бы поспорил а он не может менять пароль???...
А он и не должен... Иначе смысл защиты от копирования теряется!
D>> Вот только зачем нужны контрольные суммы и вообще что это такое?
PR>контрольные суммы нужны для проверки правильности информации. например, я ввел неверный пароль, ты декодировал (соответственно неправильно)... что делать? запускать, это время и тд., а так — сверил сумму, если не совпала — пароль не верный
Всё ясно, только эти суммы наверняка уменьшат криптостойкость алгоритма...
PR>а на счет запуска из памяти — на сколько я понял, надо писать свой загрузчик, тобишь, открыли файло (EXE'шник) и парсим его... перестраиваем, и запускаем
PR>у меня есть исходники UPX, там это все есть... могу выслать
Здравствуйте, duke89, Вы писали:
D>Всё ясно, только эти суммы наверняка уменьшат криптостойкость алгоритма...
Ну насчет этого беспокоиться не нужно: значение контрольной суммы заранее неизвестно, поэтому никакой пользы для атаки она не принесет. Если уж на то пошло, в exe-шнике можно найти километровые куски с наперед известным содержанием. Но это тоже ничего, если использовать для шифровки нормальный алгоритм (тот же Blowfish например).
Касательно защиты от копирования: может быть, более простым вариантом будет кодировать не весь exeшник, а только некоторый набор функций из него? И вызывать их, например, через указатели-на-функции, которые будут настраиваться при расшифровке. Тогда можно избежать необходимости самостоятельно настраивать образ в памяти. К тому же этот подход позволяет, например, расшифровывать некоторые функции по мере надобности, а после исполнения выкидывать. Это сильно усложнит получение расшифрованного образа из памяти.
Здравствуйте, PK Sly, Вы писали:
D>> Всё, проблема решена. Пользователь шлёт мне пароль, я шифрую прогу, шлю ему, он копирует к себе, запускает её и всё пучком
PS>потом эта версия вместе с серийником пойдёт по рукам..
Не пойдет. Серийник генерируется на каждом компе случайным образом, затем записывается в бут сектор ж.д(кстати, вот это надо поменять: пусть генерируется на основе, например, серийного номера ж.д или версии биоса или еще чего-нить...)