Sources. RU Magazine - Полиморфный код как средство защиты Share. Ware. Автор: p_kolya. В мире существует много условно- бесплатных программ, их автора заботятся о них, пишут защиты от кряков.. Взломать возможно все. Но тогда как защитится? Ok, будет защишаться так, чтобы просто замедлить процесс взлома. Защит много, большиство из них ломаются заменой 1- 2 байтов в коде.
![Программа Для Защиты Html Кода Crack Программа Для Защиты Html Кода Crack](http://static.rbytes.net/fullsize_screenshots/c/r/crack-killer.jpg)
Сегодня я расскажу об одной из наиболее важных задач — защите созданного когда на пиратских сайтах можно найти кряк для программы, с помощью которой. Интерес предоставляет возможность указать тип диалога html.
![Программа Для Защиты Html Кода Crack Программа Для Защиты Html Кода Crack](http://dllvse.ru/rimg/aHR0cDovL2k1My50aW55cGljLmNvbS8yczdnbGVnLmpwZw==.jpg)
.минус: в получаемые HTML-письма не подгружается графика, если она не прислана вместе с самим письмом, а указана в HTML-коде в виде команды. Программа для дешифрования CSS и снятия региональной защиты с любого DVD диска в любом DVD-ROM устройстве. Кряк/Crack..
![Программа Для Защиты Html Кода Crack Программа Для Защиты Html Кода Crack](http://i.imgur.com/KXt2lrP.png)
Я тебе предлагаю использовать полиморфизм в защите. Новичку сломать будет очень тяжело да и продвинутому крякеру будет над чем подумать. Так в чем же заключается защита? И кто такой полиморфизм? Защита заключается в полиморфизме( изменчивости ) кода.
Вобще я предлагаю делать так: Определенный код (пусть функция которая доступна только в зарегистрированной версии) шифруется по определенному паролю, но перед этим вычисляется CRC оригинала и сохраняется. Код шифруется прямо в проге. При запуске программа спрашивает у пользоватеся сериальный ключ. По определенному алгоритму прога пытается восстановить из него ключ расшифровки. Какой- бы не получился ключ, кусок кода расшифровываем и только потом по CRC сравниваем результат с изначальным. Если CRC совпадают, то функцию можно использовать, иначе это незарегистрированная версия. Алгоритм думаю понятен?
Заметь, ключ расшифровки, оригинальный код в хранить проге ненужно.. Потом, придумай алгоритм получения ключа расшифровки из сериального номера. Например путь будет это сумма всех символов цифр ключа.
![Программа Для Защиты Html Кода Crack Программа Для Защиты Html Кода Crack](http://zetview.com/catalog/programs/images/prqsanaliz.jpg)
А основным будет Reflector, декомпилятор программ под.NET В качестве. Т.е. не зная этого ключа нельзя создать keygen. Как поступили. Вобщем, вывод такой, что надежной защиты кода для.NET-сборок нет. To Мартин Гор. ну так и пишите в виде CHR символов, или напишите программу для конвертации нормального кода в этот ужас. вам не кажется пародоксальным сама мысль о защите HTML-кода? Ясно, что сам исходный код он не увидит (а хотя это зависит от опций компилятора), то есть он не увидит “If Serial.Text= …”, но он увидит то, что ему.
Это даст тебе разнообразие ключей, которые ты можешь продавать. Вот например номера: 1. Конечно, это только пример и за тобой придумать более сложный алгоритм. Теперь давай немного о полиморфизме.
Я тебе не буду приводить пример готовой проги, а только покажу кто такой полиморфизм : ) Вот смотри на исходник. Cp defend. asm. ; link /subsystem: windows /LIBPATH: c: \masm. Fh. invoke Exit. Process, NULL. Hello, World!", 0. Thank you for registration", 0.
Message. Box, NULL, offset msg_title, offset msg_text, MB_OK. Так как сделано в исходнике делать не надо! Тут ключ расшифровки доступен любому!
Это только пример! Ты думаешь этот код будет работать сразу после того, как ты его откомпилируешь? Ты сильно ошибаешься! Чтобы он работал зашифруй код фунции message.
Возьми например HIEW или еще какой hex- редактор. И зашифруй каждый байт кода message обычным XOR- ом с ключом password_key (который равен 1.
Если что- то всеже не получилось, смотри в аттач. Там рабочий пример есть. Я выбрал ассемблер, потому как думаю, на нем будет проше показать алгоритм. Да и пригодится он тебе при защите программ! На этом все.. удачи тебе!
Взлом программ для чайников / Хабрахабр. Disclaimer: всё ниженаписанное написано исключительно с просветительскими и исследовательскими целями, а также понимания механизмов защиты от взлома. Автор ни в коем случае не рекомендует использовать данную информацию для взлома программ. В данной статье я хочу рассказать про три с половиной основных способа взлома программ на . NET, цель, которую я преследую — помочь разработчикам лучше понять механизмы защиты своих программ, т. Я не буду углубляться в детали и использовать сложные инструменты для взлома. Всё будет расписано «для чайников», т.
А основным будет Reflector, декомпилятор программ под . NET В качестве подопытного кролика я выбрал Expresso — анализатор регулярных выражений. Данная программа бесплатная, в лицензии вроде бы ничего не указано про взлом, но при этом без регистрации она будет работать всего 6.
Другими словами, вред от взлома данной программы минимальный, к тому же внутреннее её устройство очень уж хорошо подходит для тренировки. Буду надеяться, что автор данной программы не обидится на меня. Для начала краткий ликбез по структуре . NET программы, для тех кто не знаком с разработкой под данный Framework: весь код, написанный на любом . NET языке (C#, Visual Basic, F#, Delphi. NET) компилируется в особый Intermediate Language, называемый обычно IL или MSIL. Это что- то типа ассемблера, только весьма умного и обладающего весьма мощными инструкциями.
И это, в принципе, такой же равноправный язык как и C#, только синтаксис похуже (а возможности больше). Кроме того, в программе на . NET активно используются метаданные, т.
Т. е. на самом деле, декомпиляция программы не очень верное понятие в данном случае. Она и так вся в открытом виде лежит, а инструменты в виде Reflector'а занимаются тем, что приводят конструкции MSIL к соответствующим конструкциям C# или другого языка, повышая читабельность кода.
Перейдём, собственно, к взлому. Обнуление триала. Собственно, это даже не взлом, а полулегальный способ продлить срок использования неактивированной программы.
Заключается он в том, что находится место, где хранится дата первого запуска и меняется/уничтожается. После этого всё можно пользоваться программой до следующего срока. Посмотрим на нашего подопытного рефлектором: Немного погуляв по коду, находим интересную строчку в конструкторе Main.
Form. Открываем редактор реестра, идём в HKEY_CURRENT_USER\Software\Ultrapico\Expresso и видим следующие ключи: Удаляем их и получаем ещё 6. Данный вариант, конечно, прост и очевиден, но если он даже был бы сложнее — потребовалось бы чуть больше времени провести в рефлекторе, чтобы выяснить все места, куда пишется информация и зачистить их. Совет разработчикам, которые будут пытаться записать данные в потаённое место: пишите аккуратнее, а то всё может обернуться проблемами обычным пользователям, у которых почему- то не окажется данного места, или не хватит на него прав. Написание keygen'а. Самый ужасный для разработчика вариант, и самый приятный для конечного злобного пользователя. Программа считает себя лицензионной, никаких страшных телодвижений не нужно делать. Открываем рефлектор и ищем код на предмет классов содержащих License или Registration, видим: При вводе имени и кода по имени вычисляется некий хеш, который и сравнивается с кодом.
Данный хеш использует DES и всякие префиксы. Байты конвертятся в строку с помощью данного метода.
Теперь всё выяснилось, открываем IDE и копируем все необходимые куски кода (или сами реализовываем). Осталось только выяснить, какие значения у Prefix, Suffix и параметры реализации My. DES. Я их приводить не буду, это уже технические детали. В результате генерируем ключ на любое имя и видим: Бинго! Защита от кейгенов проста и очевида: использовать в каком либо виде ассиметричное шифрование. Т. е. сделать так, чтобы без знания приватного ключа сгенерировать код было бы невозможно, а данный ключ находится только в одном месте — у автора программы.
Использование враппера. Проверка корректности лицензии, достаточно хлопотное дело, и небыстрое. Поэтому разработчики программ обычно проверяют лицензию один раз, и дальше используют полученный флажок — валидна/невалидна (как вариант насколько валидна, если допускается несколько типов лицензии, отличающихся возможностями). Тут можно на этом сыграть, использовав следующий алгоритм: Указать программе, что лицензия уже проверена Указать программе, что лицензия корректна. Как это сделать? Я уже упоминал о наличии метаданных в исполняемых файлах в начале, этим и воспользуемся. Посмотрим как запускается программа и как проверяется лицензия: С запуском ничего интересного, а в проверке видно, что если уже программа зарегистрирована, то она считает, что всё хорошо и не делает дальнейшую работы по выяснению корректности лицензии. Воспользуемся этим: Сделаем новый проект, добавим Reference на Expresso.
Смотрим, что получилось: Ну кто бы сомневался. В данном случае всё оказалось просто, но если бы автор программы заменил публичные свойства на приватные, то всего- лишь пришлось бы использовать Reflection для доступа и всё бы свелось к исходной задаче. Думаю понятно, как можно пробовать защититься от этого — проверять лицензию периодически, смотреть окружение из которого запущена программа, сделать невозможным установку нужной переменной. Но все эти защиты приведут к тому, что злоумышленник будет использовать.
Физический взлом программы. Тут уже всё серьёзно. Программа целиком декомилируется в MSIL а из него уже собирается обратно (помните, я писал, что MSIL это такой же язык как и C#?). Для декомпиляции нам понадобится утилита из SDK под названием ildasm, а для компиляции компилятор из . NET Framework ilasm. Запускаем ildasm, открываем Expresso. Находим уже рассмотренный метод Is.
Registered и добавляем немножко своего кода (без меток): Потом берём ilasm и собираем всё назад (не забыв подключить ресурсы). Что делает данный код: устанавливает нужное имя для регистрации (не обязательно), и возвращает статус, что всё хорошо.
Чтобы было понятнее, так это выглядит в рефлекторе, в C#Т. Немного про код в MSIL: это стековая машина, у которой нет регистров, все операции имеют вид: засунуть в стек нужное количество параметров, выполнить функцию, которая заберёт нужное количество параметров и положит результат.
Ну и обратно: установить значение переменной тем, что лежит в стеке. Чтобы лучше понять работу всего этого рекомендую простой приём: пишите маленькую программу на привычном языке, компилируете, смотрите что получилось в MSILe и разбираетесь в конструкциях языка. При этом некоторые вещи в MSIL можно сделать очень красиво, например поменять две переменные местами — 4 симпатичных строчки (на C# меньше, но некрасиво). Чем жертвует злоумышленник: подписью программы, теперь она уже не автора, а его. В некоторых случаях это проблема, если в программе используется множество библиотек.
Тогда злобному хакеру придётся разбирать их все и собирать их заново, но если он с этим справится, то у него будет «своя» версия программы подписанная его ключом. Защиты от всего этого безобразия собственно немного: проводить обфускацию или выносить часть логики/проверки защиты в нативный код. Заключение. Думаю я рассказал, как просто всё можно разломать на . NET, если создатель не приложил усилий для защиты своей программы. А вы уж решайте, стоит ли делать защиту и тратить на это время и ресурсы.
А может просто сделать web- систему, или же бесплатную ограниченную версию. Решать разработчикам.