| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Получить серийный номер процессора |
| Автор: Нитонисе 6.1.2010, 14:16 |
| Как можно получить серийный номер процессора? Либо какого нибудь другого устройства (материнская плата, жесткий диск). Если не серийник, то какую либо другую уникальную информацию. Это нужно для привязки программы к конкретному компьютеру. |
| Автор: Rodman 6.1.2010, 16:52 | ||
*.h
Добавлено через 4 минуты и 11 секунд исходник |
| Автор: artsb 6.1.2010, 17:06 |
| http://forum.vingrad.ru/forum/topic-164365/unread-1.html http://forum.vingrad.ru/forum/topic-103745/unread-1.html http://forum.vingrad.ru/forum/topic-267908/unread-1.html http://forum.sources.ru/index.php?showtopic=285650 http://forum.sources.ru/index.php?showtopic=279538 http://forum.sources.ru/index.php?showtopic=142167 http://forum.sources.ru/index.php?showtopic=19807 http://forum.sources.ru/index.php?showtopic=20561 http://forum.sources.ru/index.php?showtopic=21172 |
| Автор: Нитонисе 6.1.2010, 18:13 |
| Спасибо. Скажите, а сложна ли следующая защита программы? Определяю серийный номер (например 1234). Провожу с ним несложные арифметические операции (например 1234 + 10 = 1244). Полученные номер (1244) является внутренним кодом, зависящим от железа, он высылается разработчику. Разработчик (то есть я) генерирую внешний код, который определяется опять же несложными арифметическими действиями над полученным внутренним кодом (например 1244 +100 = 1344). Далее сохраняю этот код в текстовый файл и отдаю пользователю. Проверка осуществляется следующим образом. Программа определяет серийный номер (1234). Проводит с ним все те же нужные арифметические действия (1234 + 10 = 1244). Проводит с ним все те же дополнительные действия (1244 + 100 = 1344). Если полученное значение совпадает со значением, прочитанном из файла, который я дал пользователю - программа запускается. Если не совпадает - выдается сообщение, что программа не зарегистрирована и она закрывается. |
| Автор: artsb 6.1.2010, 18:28 |
| ИМХО у этого способа много минусов. Некоторые из них: - Проблемы после апгрейда ПК. Ключ уже не годен. Нужно опять связываться с разработчиком. - Нет возможности пользоваться честно купленной программой на ПК дедушки, к которому владелец программы поехал отдыхать. (одна из ситуаций) - Зависимость от Интернета, ну или необходимость созваниваться, для получения ключа. |
| Автор: artsb 6.1.2010, 19:04 |
| Да вроде нормально... Но может умные люди ещё что-нибудь скажут. |
| Автор: vikaz 7.1.2010, 10:38 |
| Если кому-то сильно понадобится твоя программа,то её вскроют! Если продукт коммерческий, то лучше использовать аппаратный ключ защиты.(http://senselock.ru/index.php). Ну а если проект не очень серьезный, то пойдет. Но как написал камрад Выше, есть минусы и не очень приятные. |
| Автор: xvr 7.1.2010, 12:54 | ||
Не сложна и абсолютно бесполезна - взломают в течении суток Используйте нормальные криптографические алгоритмы. Используйте CryptoAPI и защищенные хранилища (в CyptoAPI). Результатом регистрации программы должен быть сертификат (или ключ) записанный в защищенном хранилище в неизвлекаемом виде. PS. Все равно сломают, но подольше повозятся Добавлено через 1 минуту и 2 секунды Вдогонку - у CPU серийного номера нет (Intel сделал его в PPro, был большой скандал - номер изъяли) |
| Автор: artsb 7.1.2010, 13:08 |
Тут ещё большую роль играет сама программа. Если она будет очень востребована, то можно особо с защитой не заморачиваться - всё равно взломают. С другой стороны, если прога будет не очень востребована, то тоже нет смысла делать крутую защиту - всё равно её никто ломать не будет ИМХО |
| Автор: Нитонисе 7.1.2010, 14:11 |
| Программа-то не серьезная, она стоит 20 баксов. И защита крутая не нужна, нужен такой уровень, чтобы неразбирающийся не мог сломать вообще, средний пользователь долго возился, ну а профессионал и интересоваться этой прогой не будет. То есть если моя программа будет сопротивляться взлому хотя бы 10 часов - это уже супер. Так выдержит такая защита 10 часов? Мне вот что интересно. Есть ли инструментарий, позволяющий взломщику получить код исполняемого файла? Ведь в коде прописан алгоритм обработки серийного номера жесткого диска и его не состовляет труда воспроизвеси и таким образом найти правильные исходящий код и входящий. |
| Автор: xvr 7.1.2010, 14:22 | ||||||||
Нафига тогда ее защищать?
|
| Автор: Нитонисе 7.1.2010, 14:28 | ||||
Чтоб хотя бы 20 баксов с нее поиметь)
А какими знаниями и спецпрограммами должен располагать такой "профессионал"? И в каком виде получается исходный код? В том же, как я его пишу?
А можно менять исходный код программы, по желанию выключая какие-то блоки, либо добавляя? А вы могли бы сломать такую защиту? Давайте я выложу простенькую программу, где только защита и будет. Попробуете ее взломать? Понятно что это время, какое-никакое, но ща выходные, чисто из спортивного интереса) |
| Автор: vikaz 7.1.2010, 15:25 | ||
Камрад, а если виртуализировать часть кода отвечающую за сверку? |
| Автор: SVN74 7.1.2010, 17:44 |
| Можно ключ внедрить в тело программы под видом "команд процессора" - все равно эти команды выполняться не смогут, - и пускай попробуют отличить команды от нужного ключа . |
| Автор: xvr 7.1.2010, 23:40 | ||||||||||||||||
Сдедайте свою программу shareware. Это более надежно
Но тут еще наверное остались люди, которым это может быть интересно Добавлено через 2 минуты и 19 секунд
Хакер не будет ничего искать - он просто оттрасирует прогу и найдет тот условный переход, который ломает программу при неверном ключе. Потом подправит пару байтов в exe'нике, и все |
| Автор: Нитонисе 8.1.2010, 02:08 | ||
Так в данном случае если сделать из моего условного перехода - безусловный, ниче не выйдет, насколько я понимаю. У меня идет проверка if (код != код) {выход из программы}. А дальше идет обычный код. Если из этого условного перехода сделать безусловный и переходить без всяких сравнений к {выход из программы}, то получается лажа. А еще я поставил в приложении таймер, в событии которого OnTimer через каждые пять минут прописал снова проверку. Это тоже бесполезный трюк с моей стороны? |
| Автор: Damp1L 8.1.2010, 10:32 |
| Ну раз уж пошла такая катавасия, то почему не сделать просто навесную защиту? К примеру armadillo. Один чёрт взломают, а так хоть защита от дурака, ну и время не надо терять на её разработку =) |
| Автор: artsb 8.1.2010, 11:21 |
ИМХО с таким же успехом взломают. И будет ваш таймер "вертеться" впустую. |
| Автор: Rrader 8.1.2010, 11:27 | ||
Выкладывай, попробуем |
| Автор: xvr 8.1.2010, 12:10 | ||||
Ваш конкретный условный переход забьют NOP'ами В любом случае условный переход транслируется в операцию сравнения и команду типа je blablabla. Хакер может превратить ее в jmp blablabla или в пару nop (в зависимости от того, должен переход исполняться или нет)
|
| Автор: SVN74 8.1.2010, 12:36 |
| А если заранее "подпортить" – изменить код без всяких if конструкций то бишь привести программу в нерабочее состояние (правда в таком случае try версии не получиться), а потом отдельной программой (ключом) восстановить данные в основной программе? |
| Автор: Нитонисе 8.1.2010, 13:36 |
| Кому не влом, попробуйте поломать эту защиту. Суть ее такова. Если программа не зарегистрирована - она выдает исходящий код, который вы высылаете разработчику (то есть мне), а даю вам на основе этого кода уже входящий код, который будет записан в файле Reg.txt. С правильным кодом программа будет работать. |
| Автор: Rrader 8.1.2010, 17:23 |
| Пофиксил следующим образом. Нашел вызов первого FileExists в обработчике формы OnCreate. Заменил его на прыжок в конец обработчика. Результат - программе все равно на Reg.txt, существует он или нет. Добавлено @ 17:25 Ах да, еще таймер отключить надо. Это совсем просто - по аналогии. |
| Автор: Нитонисе 8.1.2010, 17:28 |
| И вся "защита"?) Добавлено через 2 минуты и 29 секунд а выложите поломанную программу, которой бы все могли пользоваться. |
| Автор: Rrader 8.1.2010, 17:31 |
| Выложил |
| Автор: Нитонисе 8.1.2010, 17:35 |
Это была моя самая надежная защита)) Однако поменялся размер файла. Можно же отследить размер, сравнивать его с эталонным и если размер отличается - не запускать программу? Добавлено через 1 минуту и 2 секунды а, не поменялся.. это просто текстового файла в архиве не было |
| Автор: W4FhLF 8.1.2010, 17:37 | ||
Можно разобрать эту ВМ. Либо сэмулировать её имея один валидный ключ. PS Защита предложенная автором фигня, в своё время ломал такие за 3 минуты. Добавлено через 47 секунд
Ну найдут это сравнение и "убьют" его точно так же как проверку твоего ключа. |
| Автор: Rrader 8.1.2010, 17:39 |
Тоже лечится |
| Автор: Нитонисе 8.1.2010, 17:40 | ||
Так а взломщик может затирать лбюбые фрагменты кода, которые посчитает нужным? Или как бы обходить их вставкой какого-то безусловного перехода? Например перед проверкой регистрации вставить что-то типа "go to" и указать на первую команду после проверки? Добавлено через 1 минуту и 9 секунд Ну я понимаю что лечится вообще все. Мне бы лишь бы программа продержалась хотя бы часов 10 против пусть не мегавзломщика, но против сильного хакера. |
| Автор: vikaz 8.1.2010, 19:00 | ||
Ну это явно более устойчивое, чем все предложенное! А ВМ+SenseLock, практически непобедимая вещь! Сумма взлома одного только ключа начинается от 10 000 у.е. |
| Автор: xvr 8.1.2010, 19:01 | ||||||||
Достаточно стандартный метод шифрования части исполняемого кода. Защита снимается запуском с валидным ключем и последующим 'сдергиванием' образа памяти (к моменту запуска он уже расшифрован). Есть более сложная защита - есть несколько кусков кода которые по очереди расшифровываются и зашифровываются обратно. Так что в каждый момент времени только ОДИН кусок кода находится в расшифрованном состоянии (и именно он и исполняется). Т.е. в памяти не бывает полностью расшифрованного образа. Тоже ломается путем пошагового сброса расшифрованных кусков кода. Добавлено через 2 минуты и 11 секунд
Да
|
| Автор: vikaz 8.1.2010, 19:07 | ||
Отсюда напрашивается простой вывод! Ничего идеального нет, как и защита ПО! Просто нужно для себя решить, какая на данный момент менее затратная реализация алгоритма защиты. Импровизируйте, пусть тот человек который, вдруг, будет взламывать Вашу программу, будет в шоке от того, как Вы там намудрили. Главное сами не за путайтесь!!! |
| Автор: Нитонисе 9.1.2010, 00:08 |
| А сломайте, пожалуйста, эту программу. |
| Автор: Rrader 9.1.2010, 07:20 | ||
Ничего не изменилось:
|
| Автор: W4FhLF 9.1.2010, 08:01 |
![]() Минут 10 |
| Автор: Kirgston 9.1.2010, 10:42 | ||
IDA Pro + Hex Rays... и Сишный код всей программы у тебя на ладони... да конечно некоторые переменные будут в виде 1231112 или _dword128388 т.к. имена ф-ций, переменных, структур, классов и т.д. просто теряются. Переменные могут быть не того типа (редко но бывает). И т.д. но чисто чтобы проанализировать что ж ты делал - легко. Можешь тупо хешировать каждую ф-цию и программно проверять не изменила ли она свой хеш (ну и делать соответствующие действия). Хотя аналогично... это только геморой... А можешь просто купить что то типа WinLicense и радоваться))) т.к. последнюю ВЛ не думаю что тебе станут вскрывать менее чем за 200$ а если у тебя прога стоит 20$ то точно не будут =). |
| Автор: Нитонисе 9.1.2010, 13:10 | ||
| Rrader W4FhLF Так вы просто проигнорировали весь код в функции OnCreate? А если там тело программы, которое собственно выполняет нужные функции? Сейчас сделаю полезную программу с защитой - решение кубического уравнения. Добавлено через 2 минуты и 53 секунды
А у тебя есть эти программы? Можешь показать результат их работы на примере моей тестовой проги? Хочу посмотреть как будет выглядеть мой код, чтобы знать от чего защищаться. |
| Автор: Нитонисе 9.1.2010, 14:25 |
| Предлагаю вам попробовать поломать эту программу решения кубического уравнения. |
| Автор: W4FhLF 9.1.2010, 15:03 |
![]() Поидее должно быть -1. |
| Автор: artsb 9.1.2010, 15:13 |
| Как орехи... |
| Автор: Нитонисе 9.1.2010, 15:29 |
| W4FhLF, как взломал? То что не совсем точное решение - это что-то с округлениями. |
| Автор: W4FhLF 9.1.2010, 15:40 | ||
Запустил OllyDBG, посмотрел какие API вызывает программа, увидел:
Посмотрел откуда она вызывается, поставил туда бряк. Он сработал, я протрасировал функцию и поправил несколько переходов. В прицнипе если посидеть подольше можно и keygen тебе замутить, там алгоритм то простой. |
| Автор: Нитонисе 9.1.2010, 15:47 | ||
Что нужно сделать в конкретно этой защите, чтобы тебе было сложнее ее поломать? Или она изначально по задумке ни к черту? P.S. По округлениям не понятно. Почему все же точность низкая? Переправил все числа с float на double - тот же результат. Подозреваю что точность извлечения корней sqrt, возведения в степень pow и вычисления логарифмов log в подключаемом модуле math.h не на высоте. Похоже на то? |
| Автор: W4FhLF 9.1.2010, 16:07 | ||
Скорее второе. Что можно сделать, чтобы без ключа не сломали. Это шифровать часть критически важного функционала или данных. И расшифровывать по регистрационному ключу. Кроме тебя, алгоритма генерации ключа ни у кого быть не должно. И сам шифр надо взять посерьёзней. Тогда без хотя бы одного валидного ключа не взломают. Ну и погугли на тему "anti debugger" |
| Автор: Нитонисе 9.1.2010, 16:18 |
А как это делать? А у меня легкий сам принцип преобразования серийного номера или легкость в том что мало операций преобразования исходного серийного номера жесткого диска? |
| Автор: W4FhLF 9.1.2010, 16:50 |
| Нитонисе, у тебя вопросы слишком объёмные. Учитывая твой уровень знаний в области реверс-инжиниринга мне придётся написать как минимум огромную статью, чтобы ответить тебе на твоём уровне. У меня нет столько времени. |
| Автор: Нитонисе 9.1.2010, 17:35 | ||
Я так и понял. Наверное в моем случае лучше воспользоваться спецпрограммами для защиты? Как они ломаются? Достаточно только знать чем защищена программа и все? Например AsProtect (тут много всяких перечислено http://forum.vingrad.ru/forum/topic-100401.html). Как в этом случае будет выглядеть взлом? Взломщик определяет программу защиты, берет уже готовое решение для ломания этой защиты - и все? |
| Автор: artsb 9.1.2010, 17:45 |
| Нитонисе, ИМХО лучше с этим не заморачиваться, т.к. ломают ВСЁ. Лучше надеяться на добросовестность людей (хотя мы же в России живём...). Люди разные: одни купят, другие сломают, третьи найдут кряк. Поэтому, самодельной защиты вполне хватит. Ещё очень хороший вариант (о нём упоминали выше) - урезать функционал (пробная версия). И полную версию высылать только после покупки. |
| Автор: Нитонисе 9.1.2010, 18:13 | ||||
Нет. Программа-то дешевая. Во всяком случае я ее дешево оценил. Потому потенциальный пользователь (если программа все же полезна для него) попросту не станет заморачиваться с поиском методик взлома, а заплатит. Ясное дело если бы это была очень хорошая программа, то ее сломают однозначно. Ну ты видишь как мою самодельную защиту ломают на счет "раз"?))
Можно было бы. Но как только вышлю одному человеку полную версию - она появится в интернете в свободном доступе. Попробую что-нибудь мутить со спец-прогами для защиты. От неподготовленных хотябы защищусь) |
| Автор: artsb 9.1.2010, 18:19 |
| Ну удачи |
| Автор: Нитонисе 14.1.2010, 15:36 |
| Немного изменил защиту своего файла. Попробуете взломать? В первую очередь обращаюсь к уже ломавшим) |
| Автор: artsb 19.1.2010, 11:06 |
Хотя уже прошло прилично времени... Но думаю для Нитонисе это будет интересно:![]() ЗЫ почему-то она не всегда правильно считает... Может я перемудрил... |
| Автор: Нитонисе 19.1.2010, 13:25 | ||
Думаю да, немного перемудрил, тут должен быть один корень уравнения. А вообще эту защиту уже давно сломали на cracklab.ru |
| Автор: artsb 19.1.2010, 14:40 | ||
Так лучше: ![]() ? |
| Автор: Нитонисе 19.1.2010, 17:49 |
Пожалуй)) Никудышний из меня защитник программ, надо с этим завязывать)) |
| Автор: artsb 19.1.2010, 18:32 |
Да все никудышные. Всё ломается рано или поздно. Так что не отчаивайся ;) |