Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Защита переменных программы в памяти

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

UncoNNecteD



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Интересует возможность защиты программ от взлома такими утилитами как artmoney и т.п.
То есть от утилит прямого редактирования памяти.
Есть такое? Может шифрование какое или еще что?

Всего записей: 4040 | Зарегистр. 21-03-2002 | Отправлено: 15:55 23-03-2003
OldGopher



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
UncoNNecteD
Конкретно в архитектуре х86 на 0-м кольце защиты допускается задание дескриторов данных с привилегиями на чтение и запись. Таким образом можно редактировать все что угодно в самой памяти в т.ч. и страницы кода постороннего процесса.  
 
Шифрование в свою очередь обеспечивается неким кодом программы, который тоже может быть протрассирован. Требуется защита от дебаггера (проще) и от дизассемблера (сложнее).

----------
Женщина - это такая баба, с которой хочется заняться сексом немедленно... (с) 2006

Всего записей: 3802 | Зарегистр. 25-10-2001 | Отправлено: 23:12 23-03-2003
UncoNNecteD



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Можно конкретнее?

Цитата:
Требуется защита от дебаггера (проще) и от дизассемблера (сложнее).

Материал на эту тему есть?

----------
-= Я тут чертовски давно =-

Всего записей: 4040 | Зарегистр. 21-03-2002 | Отправлено: 11:20 24-03-2003
Pinocchio

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
UncoNNecteD
Полно в интернете. Советую посмотреть DeDe (если речь о Delphi). Если не проверить на DeDe, то о защите говорить нету смысла. С помощью оного, всё колется в 5 сек. Либо пиши на чём нибудь другом.


----------
Meaning this is something additional.

Всего записей: 683 | Зарегистр. 18-11-2002 | Отправлено: 12:33 24-03-2003
OldGopher



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
UncoNNecteD
Помнится что-то было на www.astalavista.com

Всего записей: 3802 | Зарегистр. 25-10-2001 | Отправлено: 13:22 24-03-2003
mas



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OldGopher
 

Цитата:
защита от дебаггера (проще) и от дизассемблера (сложнее)

 
- это с каких пор такой расклад? Может, наоборот?
 
UncoNNecteD
Можно, например, crc конкретного участка проверять время от времени, или хранить список адресов нужного значения, которые менять постоянно в памяти (т.е. физически нужное значение будет в каждый раз в разных местах). Можно еще что-нибудь придумать.

Всего записей: 206 | Зарегистр. 08-03-2002 | Отправлено: 18:23 24-03-2003
Pinocchio

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
mas
Для Делфи дизасм весьма критичен. Можно не взламывать программу, а просто переписать, испльзуя защищенную от Дебаг программу, как шаблон.
 
UncoNNecteD
Не верь в свою защиту пока не побалуешься с DeDe. Ты всё поймёшь когда увидишь назвыния своих UNIT и опубликованных полей/свойств. Комментарии в дизасме пояснят не хуже BordbgX0.dll.

----------
Meaning this is something additional.

Всего записей: 683 | Зарегистр. 18-11-2002 | Отправлено: 13:37 25-03-2003
OldGopher



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
mas
Для защиты от дебаггера - пишется драйвер, который периодически прописывает значения 1 и 3 (и 2 = NMI если очень надо) вектора тем, что записано скажем в один из верхних векторов. Или векторов хардовых прерываний legacy-устройств.  
При попытке воспользоваться дебаггером - будет большой ку-ку.
 
Для защиты от дизассемблера приходится писать драйвер с самомодифицирующимся кодом, а там возможности весьма ограничены. Нужно соорудить достаточно длинный кусок кода без единого обращения к статическим сегментам памяти. Можно, но очень геморройно.

Всего записей: 3802 | Зарегистр. 25-10-2001 | Отправлено: 09:34 26-03-2003
mas



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pinocchio
Я в исходном сообщении ни слова о Делфи не увидел.
 
Pinocchio и OldGopher
Может я отстал от жизни, но защита от дизассемлера для меня будет состоять, например в изменении заголовка и любом шифровании (кода, импорта). Имхо, это элементарно.
Защиту от отладчика реализовать намного сложнее (я не имею ввиду IsDebuggerPresent или MeltIce), чем от дизассемблера.
 
 
OldGopher

Цитата:
... пишется драйвер ...

Думаю, это будет несколько нерентабельно, и автор, сумеющий такое реализовать, наверняка выберет другой путь.
 

Цитата:
Для защиты от дизассемблера приходится писать драйвер

А иначе никак?
 
Такое впечатлнение что мы о разных вещах говорим

Всего записей: 206 | Зарегистр. 08-03-2002 | Отправлено: 11:46 26-03-2003
Pinocchio

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
mas
С UncoNNecteD знаком по Дельфи. Извини, думал что он эти программы тоже хочет защитить. Вопрос по защите прог Дельфи, для меня очень актуален. Шифрование кода импорта для дизасм. не вьехал. Можно по подробнее? Дебаг не интересует, так как сравниваю размер с максимумом после сжатия, а потом INLINE во все энды.
OldGopher
Как прописать вектора в Win32? Это можно сделать для ActiveX? Работает ли такая методика против Soft-ICE?  
"драйвер с самомодифицирующимся кодом" - поподробнее бы. У меня есть экспорт функций EXE файла (точно так же как в DLL). Вызов этих функций на самого себя добавляет тумана, но к сожалению для DeDe маловато тумана.  


----------
Meaning this is something additional.

Всего записей: 683 | Зарегистр. 18-11-2002 | Отправлено: 12:49 26-03-2003
mas



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pinocchio
С импортом я имел ввиду не хранить имена функций в явном виде и строить таблицу импорта. Ну, в качестве простейшево примера - имена функций храним как хеш от имени (тотт же crc32, например), сканируем экспорт библиотеки, строим хеш от каждой функции, если подходит, вносим в наш импорт. Работает довольно быстро.
По поводу метода OldGopher, то такое работать будет, но для этого нужно написать vxd для 9х и sys для NT (и отладить его и для NT, и для 2k, и для XP). Так что проще другое что-то придумать.

Всего записей: 206 | Зарегистр. 08-03-2002 | Отправлено: 14:05 26-03-2003
OldGopher



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
mas
Мне была поставлена задача реализовать такой прикол на WinXP Embedded. Работает...  
SoftIce или не срабатывает вообще, или просто вешает к чертям систему (в зависимости от того, когда загружен).
 
Просто весь код, относящийся к системе защиты и лицензирования, помещался в драйвер, что уже само по себе несколько осложняло процесс вскрытия. Кроме того, сгенерированные им коды обладали временем жизни (скажем, одна неделя или десять минут) и по прошествию срока не работали. А сам драйвер хранил в особом месте текущее время/дату, чтобы нельзя было часы назад отвести (даже после низкоуровневого форматирования диска и полной реинсталляции).  
А сама часть кодогенерации была еще и зашифрована и расшифровывалась самим драйвером по внешнему паролю только для рассчета (и потом зашифровывалась обратно).
При дизассемблировании драйвера получался большой балаган. Там еще было много приколов...
 
В Windows NT/2K/XP (DDK) есть две хорошие функции -  
MmGetPhysicalAddress и MmMapIoSpace  
 
Они и позволяют модифицировать кодовый сегмент сколько влезет. Первая дает физический адрес некой функции, а вторая мапирует его как данные (с правами на чтение/запись). Не забудьте потом снять проекцию...
 

Всего записей: 3802 | Зарегистр. 25-10-2001 | Отправлено: 15:54 26-03-2003
mas



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OldGopher
Ну, я так и понял, что речь идет о чем-то не том
Согласись, такая защита имеет смысл только при очень дорогих и/или популярных(?) продуктах, на практике встречается не часто и для такого усложнения должна быть мотивация - посчитай сколько времени ты потратил на такую защиту (даже учитывая опыт). Думаю, не меньше 2-3 недель с отладкой (ну, если были наработки, то меньше).
Реально можно и проще защититься так что 90% "заинтересованных" лиц ничего не смогут сделать. Ну а 10% и такой путь обойдут - времени много уйдет, но если пойти на принцип (ну и способ шифрования позволяет )
UncoNNecteD, думаю, не это имел ввиду

Всего записей: 206 | Зарегистр. 08-03-2002 | Отправлено: 17:29 26-03-2003
OldGopher



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
mas
Система продавалась за 20000 баксов. И защита была соответствующая...


----------
Женщина - это такая баба, с которой хочется заняться сексом немедленно... (с) 2006

Всего записей: 3802 | Зарегистр. 25-10-2001 | Отправлено: 22:09 26-03-2003
Pinocchio

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
OldGopher
А как лучше защитить программу за 50 баксов. Стратегия в том, чтобы возыметь деньги за счет свежих версий. Хочется больше времени тратить на полезное програмирование, а с размахами, как в твоём случае у меня уйдет в  10 раз больше времени, чем на работу. А со временем уёдет и желание. Для каждой версии планируется модификация защиты, так чтобы с появлением взломанной версии появлялась новая - не взломанная. Какой метод выбрать, чтобы просто "усложнить жизнь халявщикам с моего огорода".
mas
Я импортирую очень мало, в основном импортирует VCL от Delphi, а перекомпилять его ужастно некрасиво. Хотя метод мне понятен - буду сочетать с публичными методами формы. А нити (thread) могут чем нибудь помочь?

----------
Meaning this is something additional.

Всего записей: 683 | Зарегистр. 18-11-2002 | Отправлено: 11:34 27-03-2003
UncoNNecteD



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Всем спасибо.
Я в общем то изначально не думал о дизассемблерах, но теперь понимаю что даже шифруя области хранения переменных ничего не добьешься.


----------
-= Я тут чертовски давно =-

Всего записей: 4040 | Зарегистр. 21-03-2002 | Отправлено: 14:56 27-03-2003
OldGopher



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
UncoNNecteD
Серьёзно можно защитить только такую программу, котора операется на некоторое поставляемое железо.  
Скажем, медицинский сканер. Софт просто не имеет смысла без самого прибора и т.п.
 
Или наоборот - какой смысл защищать драйвер видеокарты?
 
Shareware - смысл исключительно в добром отношении к пользователю: плати мне 5, 10 или 100 баксов и получишь обслуживание. Не хочешь - не плати и сам колупайся...

Всего записей: 3802 | Зарегистр. 25-10-2001 | Отправлено: 12:58 28-03-2003
mas



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pinocchio
Какая разница кто что импортирует - импорт он и есть импорт, один единственный
 
UncoNNecteD
Я уже не совсем понял, чего ты добиться хочешь - если только то, чтобы переменная защищенная была - делай несколько копий и сравнивай (хотя-бы одну две, можно с каким-то шагом, т.е. правильная величина n=25, а ты храни в одном месте n<<1, n+=1 и т.д. - это любой game hacker обломает).
 
OldGopher
По поводу шаровары

Цитата:
 смысл исключительно в добром отношении к пользователю

- согласен, но есть такие юзеры, которые покупают, если кряка найти не могут
А так самый простой вариант для шароварщика купить за 90 у.е. аспротект и только ключи блэклистить

Всего записей: 206 | Зарегистр. 08-03-2002 | Отправлено: 17:52 28-03-2003
OldGopher



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
mas
Интересно, а как заблеклистить (хорошее, блин, слово) целый кодогенератор?

Всего записей: 3802 | Зарегистр. 25-10-2001 | Отправлено: 21:11 28-03-2003
mas



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OldGopher
 
Целый кодогенератор? В общем случае его проще переписать. Если, скажем есть алгоритм генерации ключей, который отталкивается от какого-то начального параметра/ов, и есть кейген, то простой смены начальных данных при том же алгоритме будет недостаточно. Новый кейген пишется за 5 минут. У оперы, кстати, такая схема была при переходе с 6-й на 7-ю версию

Всего записей: 206 | Зарегистр. 08-03-2002 | Отправлено: 11:35 29-03-2003
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Защита переменных программы в памяти


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru