Хочу ограничить число запусков программы в день. Счетчик для этого записываю в файл. Имя файла вычисляется как хеш от даты, соответственно оно каждый день разное и непредсказуемое. Но файл, понятное дело, можно найти и просто удалить.
Может в винде есть какой-то тип объектов, который живет вне программы? В первую очередь в голову приходит именованный мьютекс (точнее, семафор). Создал раз, и потом при каждом запуске программы находишь его и увеличиваешь счетчик. Но с конкретно с мьютексом увы не прокатит — он закроется по выходу из программы. (Исчезанием при перезагрузке можно пренебречь).
Но может есть что-то еще?
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
В реестр кучу мусорных закодированных значений и среди них нужное. При каждом запуске меняй все.
При отсутствии какого-то (почистили ручками) говори при запуске «ай-ай-ай» и exit(1)
Здравствуйте, Basil2, Вы писали:
B>Хочу ограничить число запусков программы в день. Счетчик для этого записываю в файл. Имя файла вычисляется как хеш от даты, соответственно оно каждый день разное и непредсказуемое.
B>Вопрос — куда его записать, чтобы не так просто было удалить? B>(Исходя из того, что имя файла тяжело поматчить по маске, а обычный пользователь не знаком с ProcMon).
B>Удобно бы в системную папку Temp, но ее легко почистить одной командой, снеся там всё. В System32 не поудаляешь, но туда и доступа может не быть. А куда бы еще можно записать?
По феншую куда-нить в LocalData
см. SHGetFolderPath + CSIDL_LOCAL_APPDATA
_____________________
С уважением,
Stanislav V. Zudin
Re: Где в памяти винды временно прихранить данные?
Здравствуйте, Basil2, Вы писали:
B>Может в винде есть какой-то тип объектов, который живет вне программы? В первую очередь в голову приходит именованный мьютекс (точнее, семафор). Создал раз, и потом при каждом запуске программы находишь его и увеличиваешь счетчик. Но с конкретно с мьютексом увы не прокатит — он закроется по выходу из программы. (Исчезанием при перезагрузке можно пренебречь).
Может службу/процесс вспомогательный запускать, если защита от простецов?
Я именованные мьютексы и events сам успешно использую (с префиксом Global\), но в таком сценарии не подходит.
Re[2]: Где в памяти винды временно прихранить данные?
Здравствуйте, Basil2, Вы писали:
B>Здравствуйте, qaz77, Вы писали:
Q>>Может службу/процесс вспомогательный запускать, если защита от простецов?
B>Это мне кажется перебором. Да и экзешник у меня всего один, типа installationless.
Сделай так, чтобы installationless.exe /guard создавал именованный мьютекс и саспендил процесс.
--
RedApe
Re: Где в памяти винды временно прихранить данные?
Здравствуйте, Basil2, Вы писали:
B>Хочу ограничить число запусков программы в день. Счетчик для этого записываю в файл. Имя файла вычисляется как хеш от даты, соответственно оно каждый день разное и непредсказуемое. Но файл, понятное дело, можно найти и просто удалить.
B>Может в винде есть какой-то тип объектов, который живет вне программы? В первую очередь в голову приходит именованный мьютекс (точнее, семафор). Создал раз, и потом при каждом запуске программы находишь его и увеличиваешь счетчик. Но с конкретно с мьютексом увы не прокатит — он закроется по выходу из программы. (Исчезанием при перезагрузке можно пренебречь).
B>Но может есть что-то еще?
Ну вы же понимаете, что такие способы защиты ломаются с ходу даже дилетантами. Простейшая виртуальная машина со снэпшотами сделает дело.
Re[2]: Где в памяти винды временно прихранить данные?
Здравствуйте, SaZ, Вы писали:
B>>Но может есть что-то еще? SaZ>Ну вы же понимаете, что такие способы защиты ломаются с ходу даже дилетантами. Простейшая виртуальная машина со снэпшотами сделает дело.
Тут даже команда date сделает дело, так что понимаю. Тут задача не столько 99% защиты, а просто обрубить перезапуски обычным пользователям и подзагеморроить продвинутых.
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Re[4]: Где в памяти винды временно прихранить данные?
Здравствуйте, RedApe, Вы писали:
Q>>>Может службу/процесс вспомогательный запускать, если защита от простецов? B>>Это мне кажется перебором. Да и экзешник у меня всего один, типа installationless. RA>Сделай так, чтобы installationless.exe /guard создавал именованный мьютекс и саспендил процесс.
Тут не понял. Вот пользователь запустил приложение, счетчик увеличился. Вот время истекло, и он закрыл приложение. Как тут саспендить?
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Re[5]: Где в памяти винды временно прихранить данные?
RA>>Сделай так, чтобы installationless.exe /guard создавал именованный мьютекс и саспендил процесс. B>Тут не понял. Вот пользователь запустил приложение, счетчик увеличился. Вот время истекло, и он закрыл приложение. Как тут саспендить?
тот процесс, который запущен с ключиком ведь может быть безголовым, никак не отображающимся пользователю. ну разве что в список процессов если полезет.
Re: Где в памяти винды временно прихранить данные?
Здравствуйте, Basil2, Вы писали:
[skipped] B>Может в винде есть какой-то тип объектов, который живет вне программы? В первую очередь в голову приходит именованный мьютекс (точнее, семафор). Создал раз, и потом при каждом запуске программы находишь его и увеличиваешь счетчик. Но с конкретно с мьютексом увы не прокатит — он закроется по выходу из программы. (Исчезанием при перезагрузке можно пренебречь).
B>Но может есть что-то еще? GlobalAddAtom будет жить после выхода из программы… Не!?!
Здравствуйте, Basil2, Вы писали:
B>Но может есть что-то еще?
Смотря от кого защититься хочешь.
От профессионального взломщика — все равно взломает, если твоя программа того стоит.
От дилетанта — сунь в какой-нибудь файл из AppData, предварительно зашифруй, а потом побайтно раскидай по этому файлу, а чтобы скучно не было, модифицируй еще десяток байтов в нем каждый раз без всякой надобности. Ну и контрольную сумму в файл положи. Без этого файла стартовать отказывайся. Файл создается при инсталляции. Пусть возится
Здравствуйте, std.denis, Вы писали:
B>>Тут не понял. Вот пользователь запустил приложение, счетчик увеличился. Вот время истекло, и он закрыл приложение. Как тут саспендить? SD>тот процесс, который запущен с ключиком ведь может быть безголовым, никак не отображающимся пользователю. ну разве что в список процессов если полезет.
Я за список процессов и беспокоюсь. Два процесс это странновато. Один убил — бесконтрольный запуск получил Хотя как решение, да.
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Re[2]: Где в памяти винды временно прихранить данные?
Здравствуйте, Carc, Вы писали:
B>>Может в винде есть какой-то тип объектов, который живет вне программы?
B>>Но может есть что-то еще? C>GlobalAddAtom будет жить после выхода из программы… Не!?!
Да!! Выглядит как то, что нужно. Правда там нельзя хранить пары ключ-значение, соответственно для счетчика надо будет вводить несколько атомов и перебирать их последовательно. Но в целом выглядит куда как безпалевнее файлов и реестра.
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Re[2]: Где в памяти винды временно прихранить данные?
Здравствуйте, Basil2, Вы писали:
B>Здравствуйте, Carc, Вы писали:
B>>>Может в винде есть какой-то тип объектов, который живет вне программы?
B>>>Но может есть что-то еще? C>>GlobalAddAtom будет жить после выхода из программы… Не!?!
B>Да!! Выглядит как то, что нужно. Правда там нельзя хранить пары ключ-значение, соответственно для счетчика надо будет вводить несколько атомов и перебирать их последовательно. Но в целом выглядит куда как безпалевнее файлов и реестра.
Почему нельзя?
В параметре, в строке в функции GlobalAddAtom можем что хочешь передать в пределах 255 байтов. Ну и, соответственно, пишем туда что-нить в стиле
"имя_ключа|значение_ключа_цифрой_или_еще_как". Ну, а потом, когда вынимаем парсим строку по нашему разделителю "|" на пару, и вынимаем уже и ключ, и само значение… Ну как-то так, в таком духе…
C>Хочу ограничить число запусков программы в день.…
Ну я бы не полагался на то, что машина в течение дня не перегружается.
Сейчас, конечно, не 90-е годы , но всё равно, некоторые машины выключают по-настоящему.
Хотя если этот фактор не учитывать и брать средне-статистического пользователя лаптопа или офисного компутера, то решение норм.
_____________________
С уважением,
Stanislav V. Zudin
Re[5]: Где в памяти винды временно прихранить данные?
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Ну я бы не полагался на то, что машина в течение дня не перегружается. SVZ>Сейчас, конечно, не 90-е годы , но всё равно, некоторые машины выключают по-настоящему.
SVZ>Хотя если этот фактор не учитывать и брать средне-статистического пользователя лаптопа или офисного компутера, то решение норм.
Дык про среднестатистического офисного и разговор… Крякеры чутка посерьезнее отловят нафиг этот атом, и попросту его грохнут сбоку-припеку, дело то не хитрое.
Если нужна серьезная защита, то такой подход и вовсе не годится.
А вот прыщавая школота, освоившая Ctrl+Alt+Del, и мнящая себя великими кул-хацкерами попросту перекурит в сторонке. Максимум на что они способны, это регмон да файлмон… Ну, а атомы, RegisterWindowMessage и прочия околопрограммерские приблудочки… Я умоляю, они слов то таких не слышали никогда, не то что, понимают о чем речь и как ловить…
Я дык просто привел пример простенького счетчика, который делается на коленке, за 10 минут и не отваливается с выходом из софтинки. Ну и что б детсад радостно не кричал уже через 20 минут "сломал! сломал! сломал!".
PS: Ну и не в лоб реализовывать конечно: парочку фантомов сбоку приписать к таком "счетчику". Ну там мусор какой в реестр пописывать, в файло тоже какого хлама на вид как счетчик дописывать… Нехай трудяцца, кул-хацкеры