Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.136.97.64] |
|
Сообщ.
#1
,
|
|
|
Простенькая программа, без инсталяшки, должна после определенной даты, хранящейся в программе, перестать запускаться.
Но вот есть проблема: как можно отследить, что пользователь перевел время/дату назад? Реестр можно подправить, файлы программы можно заново скопировать... Думал при старте определять время последнего доступа в каталоги "Program Files" и Windows, и брать самое позднее время/дату, но ведь после запуска система исправит на время, установленное пользователем. Сканировать каталог и смотреть время у каждого файла - во-первых это долго, во-вторых, если старенький винт, то грохот будет... А сканировать определенное число файлов, так можно не попасть на самый свежий... Как быть? |
Сообщ.
#2
,
|
|
|
Самый надежный вариант, при наличии инета, это - NTP, опрос серверов времени.
Добавлено Если без инета, то "осмотр" некоторого множества, скажем так, "ключевых" файлов и времен их создания/доступа: %SYSTEMDRIVE%\hiberfil.sys %USERPROFILE%\NTUSER.DAT %USERPROFILE%\NTUSER.DAT{*} %USERPROFILE%\Local Settings\History\History.IE5\* %USERPROFILE%\AppData\Roaming\Mozilla\Firefox\Profiles\* ... ... ... Ну и в таком духе ... Ну и ждать кряка программы, если программа норм - быстро ее вылечат. |
Сообщ.
#3
,
|
|
|
Спасибо!
Тут не только без интернета, да еще на некоторых ПК стоит Windows 98! А что в ней схожего есть? |
Сообщ.
#4
,
|
|
|
Цитата Vladimir_ @ должна после определенной даты, хранящейся в программе, перестать запускаться. Предлагаю заменить дату на количество запусков. |
Сообщ.
#5
,
|
|
|
Цитата B.V. @ Предлагаю заменить дату на количество запусков. Это самое простое - что обходится, даже без кряков. Монитор реестра + Файловый монитор + контроль операций удаления, создания и записи (чтение не интересует). Пишется loader который приводит все в первозданное состояние. ИМХО, нужно читать даты тех файлов, которые пишет не эта программа, а системные, временные, кэши разные. |
Сообщ.
#7
,
|
|
|
Цитата JoeUser @ Это самое простое - что обходится, даже без кряков. То, что ты описал далее, на самом деле и является "кряком". А насчет "простое" -- это проще, чем поменять системную дату? |
Сообщ.
#8
,
|
|
|
Цитата B.V. @ То, что ты описал далее, на самом деле и является "кряком" Ну да, я имел ввиду - патчи. Цитата B.V. @ А насчет "простое" -- это проще, чем поменять системную дату? В том то и дело, если ловить действия программы по файлам и реестру, то: 1) В случае счетчика запусков - их нужно где-то хранить, нашли хранилище(а) - в лоадере чистим их 2) В случае анализа произвольных файлов на время записи/доступа - их тыщу, обрабатываются быстро, а вот зачем их прога читает, нужно голову ломать. В итоге, "счетчик" я бы обошел легче. |
Сообщ.
#9
,
|
|
|
Тут надо найти какие-то хитрые файлы, которые после смены даты/времени не сразу меняют свою дату/время - а то как отследить, если система после перезагрузки сразу изменит?
|
Сообщ.
#10
,
|
|
|
В чистом виде никак, имхо проще сделать триал, с реально вырезанным функционалом, а не просто заблоченным по какому либо критерию.
|
Сообщ.
#11
,
|
|
|
Да у меня простенькая программа, нужно так же просто ограничить время работы с отслеживанием перевода даты назад. И ломать смысла нет
|
Сообщ.
#12
,
|
|
|
При реализации этой задачи возможны интересные препятствия. Указанный формат не соответствует правильному, хотя эта информация из RFC. Впрочем, Wireshark декодирует и покажет всё как надо. --- Удивительно, уже не первый раз сталкиваюсь. Читаешь RFC, а потом оказывается, что "не соответствует". |
Сообщ.
#13
,
|
|
|
Цитата Vladimir_ @ Тут надо найти какие-то хитрые файлы, которые после смены даты/времени не сразу меняют свою дату/время - а то как отследить, если система после перезагрузки сразу изменит? "Против лома - нет приема!" Совет простой - не зацикливайся на 100%-ном отказе работы по лимиту календаря. Напиши шрифтом стопицотого размера, что "программа по истечении времени и без регистрации будет нестабильна на 77%". Нарушения ищи по файлам, на которые я тебе дал наколку, молча выгружай прогу спустя 3-17 мин, как- только обнаружен ахтунг. Для энд-юзера это гемор аццкий и уверенный аргумент достать лопатник и отслюнявить лавэ |
Сообщ.
#14
,
|
|
|
В общем поигрался с переводом времени и перезагрузкой винды.
Пока нашел какие файлы искать, которые после перезагрузки не меняют свои дату/время: C:\Windows\*.ini TEMP\*.* Добавлю еще время каталогов C:\Windows, С:\RECYCLER и самой программы. Думаю, что этого для такой проги будет достаточно. И еще попутные вопросы: 1. чем быстрее получить время создания/модификации ОДНОГО каталога или файла? Ведь он может быть не доступен. Для поиска по маске пользуюсь FindFirstFile() 2. поиск файлов засуну в поток, стартанув его при старте проги. Допустим было найдено, что время перевели. Как более-менее правдоподобно аварийно завершить программу? Т.е. чтобы было видно, что это не защита сработала, а ошибка в проге? |
Сообщ.
#15
,
|
|
|
Цитата Vladimir_ @ И еще попутные вопросы: 1. чем быстрее получить время создания/модификации ОДНОГО каталога или файла? Ведь он может быть не доступен. Для поиска по маске пользуюсь FindFirstFile() Быстрее API не найдешь. Цитата Vladimir_ @ 2. поиск файлов засуну в поток, стартанув его при старте проги. Допустим было найдено, что время перевели. Как более-менее правдоподобно аварийно завершить программу? Т.е. чтобы было видно, что это не защита сработала, а ошибка в проге? Самое, имхо, правильное - сообщать не сразу по факту обнаружения, а спустя 7-27 минут. Это усложнит реверс. |
Сообщ.
#16
,
|
|
|
Цитата Vladimir_ @ Как более-менее правдоподобно аварийно завершить программу? Т.е. чтобы было видно, что это не защита сработала, а ошибка в проге? Например, вообще ничего не сообщать и не завершать. Просто с какого-то момента ограничить функционал. Не выполнять какие-то функции и всё. |
Сообщ.
#17
,
|
|
|
Цитата Как более-менее правдоподобно аварийно завершить программу? Т.е. чтобы было видно, что это не защита сработала, а ошибка в проге? "Точка входа в процедуру в библиотеке kernel32.dll не найдена" У меня вопрос: - какой смысл НЕ сообщать пользователю о том, что период триала простенькой программы закончился? |
Сообщ.
#18
,
|
|
|
Цитата Prince @ Очевидно, чтобы пользователь не захотел рыться в поисках взлома программы, а обдумал свои действия и наверняка увидел, что период закончился. Если же не увидит, то может сообщить издателю, а тогда автор прожки намекнёт, что "срок то вышел, поди? ". какой смысл НЕ сообщать пользователю о том, что период триала простенькой программы закончился? |
Сообщ.
#19
,
|
|
|
Пожалуй, я бы подумал, что автор программы очень странный и лучше с ним не связываться. Куплю лицензию, вылезет какая-то ошибка, и поди знай, намек ли это автора на что-либо, или глюк программы...
|
Сообщ.
#20
,
|
|
|
Ограничивать функционал непродуктивно, найти под дебагером точку ветвления несложно. Однако простое отсрочивание решения куда сильнее напрягает хацкеров. Сделать несколько прокси-объектов, передающий некое состояние друг другу с произвольной задержкой каждый (особенно если состояние не банальный bool, а какое-нибудь DWORD, а ещё лучше HANDLE от GlobalAlloc(), хранящий экземпляр полиморфного класса, чем метод будет PostMessage()ить этот признак каким-нибудь WM_COPYDATA), явно на порядок проще в реализации, чем во взломе. Только главное, как абсолютно верно заметил Prince, ничего не портить. Выдать транспарант, сохранить состояние и выйти – самое то. Пусть запускает повторно, открывает документы итп заново, если ему нравится такой рабочий процесс.
|
Сообщ.
#21
,
|
|
|
Цитата Qraizer @ Ограничивать функционал непродуктивно, найти под дебагером точку ветвления несложно. Найти не сложно, если такая точка вообще есть. Можно ограничить функционал (в dll, например) как посредством физической редакции исполнимого файла, так и полной заменой полноценной dll на демо-версию. Те полноценное приложение вообще может отсутствовать. .. И пусть тогда заново скачивает, устанавливает.. "запускает повторно, открывает документы итп заново, если ему нравится такой рабочий процесс". © |
Сообщ.
#22
,
|
|
|
Vladimir_
Можно поставить диапазон дат в которые прога запускается(или минимальную дату) 05.05.2016-07.09.2016. Если умельцы мотают дату, как правило сразу несколько лет. |
Сообщ.
#23
,
|
|
|
Цитата ^D^ima @ Можно поставить диапазон дат в которые прога запускается(или минимальную дату) 05.05.2016-07.09.2016. Если умельцы мотают дату, как правило сразу несколько лет. Не не не Мотают на дату первого запуска. Vladimir_, а в чем суть программы, что она делает? |
Сообщ.
#24
,
|
|
|
Все советчики в этой теме забывают главное: не ломаемой защиты не существует. Весь вопрос в целесообразности взлома, а целесообразность зависит от востребованности. Если программа простая и не пользуется особой популярностью, смысла усложнять защиту никакого нет.
Сообщения были разделены в тему "Обсуждение методов защиты ПО" |
Сообщ.
#25
,
Сообщение отклонено: Qraizer -
|