Где в памяти винды временно прихранить данные?
От: Basil2 Россия https://starostin.msk.ru
Дата: 29.06.20 18:17
Оценка:
Хочу ограничить число запусков программы в день. Счетчик для этого записываю в файл. Имя файла вычисляется как хеш от даты, соответственно оно каждый день разное и непредсказуемое. Но файл, понятное дело, можно найти и просто удалить.

Может в винде есть какой-то тип объектов, который живет вне программы? В первую очередь в голову приходит именованный мьютекс (точнее, семафор). Создал раз, и потом при каждом запуске программы находишь его и увеличиваешь счетчик. Но с конкретно с мьютексом увы не прокатит — он закроется по выходу из программы. (Исчезанием при перезагрузке можно пренебречь).

Но может есть что-то еще?
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Отредактировано 30.06.2020 15:04 Basil2 . Предыдущая версия .
Re: Куда записать временный файл, но не %TEMP%?
От: Homunculus Россия  
Дата: 29.06.20 18:19
Оценка: 5 (1) +1 -1
Здравствуйте, Basil2, Вы писали:

В реестр кучу мусорных закодированных значений и среди них нужное. При каждом запуске меняй все.
При отсутствии какого-то (почистили ручками) говори при запуске «ай-ай-ай» и exit(1)
Отредактировано 29.06.2020 18:22 Homunculus . Предыдущая версия .
Re: Куда записать временный файл, но не %TEMP%?
От: Stanislav V. Zudin Россия  
Дата: 29.06.20 18:24
Оценка: 10 (1)
Здравствуйте, Basil2, Вы писали:

B>Хочу ограничить число запусков программы в день. Счетчик для этого записываю в файл. Имя файла вычисляется как хеш от даты, соответственно оно каждый день разное и непредсказуемое.


B>Вопрос — куда его записать, чтобы не так просто было удалить?

B>(Исходя из того, что имя файла тяжело поматчить по маске, а обычный пользователь не знаком с ProcMon).

B>Удобно бы в системную папку Temp, но ее легко почистить одной командой, снеся там всё. В System32 не поудаляешь, но туда и доступа может не быть. А куда бы еще можно записать?


По феншую куда-нить в LocalData
см. SHGetFolderPath + CSIDL_LOCAL_APPDATA
_____________________
С уважением,
Stanislav V. Zudin
Re: Где в памяти винды временно прихранить данные?
От: qaz77  
Дата: 30.06.20 15:50
Оценка:
Здравствуйте, Basil2, Вы писали:

B>Может в винде есть какой-то тип объектов, который живет вне программы? В первую очередь в голову приходит именованный мьютекс (точнее, семафор). Создал раз, и потом при каждом запуске программы находишь его и увеличиваешь счетчик. Но с конкретно с мьютексом увы не прокатит — он закроется по выходу из программы. (Исчезанием при перезагрузке можно пренебречь).


Может службу/процесс вспомогательный запускать, если защита от простецов?

Я именованные мьютексы и events сам успешно использую (с префиксом Global\), но в таком сценарии не подходит.
Re[2]: Где в памяти винды временно прихранить данные?
От: Basil2 Россия https://starostin.msk.ru
Дата: 01.07.20 04:00
Оценка:
Здравствуйте, qaz77, Вы писали:

Q>Может службу/процесс вспомогательный запускать, если защита от простецов?


Это мне кажется перебором. Да и экзешник у меня всего один, типа installationless.
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Re[3]: Где в памяти винды временно прихранить данные?
От: RedApe Беларусь  
Дата: 01.07.20 09:06
Оценка: 5 (1)
Здравствуйте, Basil2, Вы писали:

B>Здравствуйте, qaz77, Вы писали:


Q>>Может службу/процесс вспомогательный запускать, если защита от простецов?


B>Это мне кажется перебором. Да и экзешник у меня всего один, типа installationless.


Сделай так, чтобы installationless.exe /guard создавал именованный мьютекс и саспендил процесс.
--
RedApe
Re: Где в памяти винды временно прихранить данные?
От: SaZ  
Дата: 01.07.20 10:44
Оценка: +1
Здравствуйте, Basil2, Вы писали:

B>Хочу ограничить число запусков программы в день. Счетчик для этого записываю в файл. Имя файла вычисляется как хеш от даты, соответственно оно каждый день разное и непредсказуемое. Но файл, понятное дело, можно найти и просто удалить.


B>Может в винде есть какой-то тип объектов, который живет вне программы? В первую очередь в голову приходит именованный мьютекс (точнее, семафор). Создал раз, и потом при каждом запуске программы находишь его и увеличиваешь счетчик. Но с конкретно с мьютексом увы не прокатит — он закроется по выходу из программы. (Исчезанием при перезагрузке можно пренебречь).


B>Но может есть что-то еще?


Ну вы же понимаете, что такие способы защиты ломаются с ходу даже дилетантами. Простейшая виртуальная машина со снэпшотами сделает дело.
Re[2]: Где в памяти винды временно прихранить данные?
От: Basil2 Россия https://starostin.msk.ru
Дата: 01.07.20 13:37
Оценка:
Здравствуйте, SaZ, Вы писали:

B>>Но может есть что-то еще?

SaZ>Ну вы же понимаете, что такие способы защиты ломаются с ходу даже дилетантами. Простейшая виртуальная машина со снэпшотами сделает дело.

Тут даже команда date сделает дело, так что понимаю. Тут задача не столько 99% защиты, а просто обрубить перезапуски обычным пользователям и подзагеморроить продвинутых.
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Re[4]: Где в памяти винды временно прихранить данные?
От: Basil2 Россия https://starostin.msk.ru
Дата: 01.07.20 13:39
Оценка:
Здравствуйте, RedApe, Вы писали:

Q>>>Может службу/процесс вспомогательный запускать, если защита от простецов?

B>>Это мне кажется перебором. Да и экзешник у меня всего один, типа installationless.
RA>Сделай так, чтобы installationless.exe /guard создавал именованный мьютекс и саспендил процесс.

Тут не понял. Вот пользователь запустил приложение, счетчик увеличился. Вот время истекло, и он закрыл приложение. Как тут саспендить?
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Re[5]: Где в памяти винды временно прихранить данные?
От: std.denis Россия  
Дата: 01.07.20 14:45
Оценка:
RA>>Сделай так, чтобы installationless.exe /guard создавал именованный мьютекс и саспендил процесс.
B>Тут не понял. Вот пользователь запустил приложение, счетчик увеличился. Вот время истекло, и он закрыл приложение. Как тут саспендить?
тот процесс, который запущен с ключиком ведь может быть безголовым, никак не отображающимся пользователю. ну разве что в список процессов если полезет.
Re: Где в памяти винды временно прихранить данные?
От: Carc Россия https://vk.com/gosha_mazov
Дата: 01.07.20 17:28
Оценка: 10 (1)
Здравствуйте, Basil2, Вы писали:
[skipped]
B>Может в винде есть какой-то тип объектов, который живет вне программы? В первую очередь в голову приходит именованный мьютекс (точнее, семафор). Создал раз, и потом при каждом запуске программы находишь его и увеличиваешь счетчик. Но с конкретно с мьютексом увы не прокатит — он закроется по выходу из программы. (Исчезанием при перезагрузке можно пренебречь).

B>Но может есть что-то еще?

GlobalAddAtom будет жить после выхода из программы… Не!?!
Aml Pages Home
Re: Где в памяти винды временно прихранить данные?
От: FR  
Дата: 02.07.20 05:26
Оценка:
Здравствуйте, Basil2, Вы писали:

B>Но может есть что-то еще?


Если для совсем безграмотных взломщиков, то можно писать в альтернативный поток ntfs (ntfs alternate data streams) какого-нибудь файла.
Re: Где в памяти винды временно прихранить данные?
От: Pavel Dvorkin Россия  
Дата: 02.07.20 06:20
Оценка: 11 (2) +1
Здравствуйте, Basil2, Вы писали:

B>Но может есть что-то еще?


Смотря от кого защититься хочешь.
От профессионального взломщика — все равно взломает, если твоя программа того стоит.
От дилетанта — сунь в какой-нибудь файл из AppData, предварительно зашифруй, а потом побайтно раскидай по этому файлу, а чтобы скучно не было, модифицируй еще десяток байтов в нем каждый раз без всякой надобности. Ну и контрольную сумму в файл положи. Без этого файла стартовать отказывайся. Файл создается при инсталляции. Пусть возится
With best regards
Pavel Dvorkin
Отредактировано 02.07.2020 6:21 Pavel Dvorkin . Предыдущая версия .
Re[6]: Где в памяти винды временно прихранить данные?
От: Basil2 Россия https://starostin.msk.ru
Дата: 02.07.20 11:08
Оценка:
Здравствуйте, std.denis, Вы писали:

B>>Тут не понял. Вот пользователь запустил приложение, счетчик увеличился. Вот время истекло, и он закрыл приложение. Как тут саспендить?

SD>тот процесс, который запущен с ключиком ведь может быть безголовым, никак не отображающимся пользователю. ну разве что в список процессов если полезет.

Я за список процессов и беспокоюсь. Два процесс это странновато. Один убил — бесконтрольный запуск получил Хотя как решение, да.
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Re[2]: Где в памяти винды временно прихранить данные?
От: Basil2 Россия https://starostin.msk.ru
Дата: 02.07.20 11:21
Оценка:
Здравствуйте, Carc, Вы писали:

B>>Может в винде есть какой-то тип объектов, который живет вне программы?


B>>Но может есть что-то еще?

C>GlobalAddAtom будет жить после выхода из программы… Не!?!

Да!! Выглядит как то, что нужно. Правда там нельзя хранить пары ключ-значение, соответственно для счетчика надо будет вводить несколько атомов и перебирать их последовательно. Но в целом выглядит куда как безпалевнее файлов и реестра.
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Re[2]: Где в памяти винды временно прихранить данные?
От: Stanislav V. Zudin Россия  
Дата: 02.07.20 11:28
Оценка:
Здравствуйте, Carc, Вы писали:

B>>Но может есть что-то еще?

C>GlobalAddAtom будет жить после выхода из программы…

А после перезапуска системы атом сохранится?
ЗЫ. Не сталкивался с Атомами со времен ручного вызова RegisterWindowClass().
_____________________
С уважением,
Stanislav V. Zudin
Re[3]: Где в памяти винды временно прихранить данные?
От: Carc Россия https://vk.com/gosha_mazov
Дата: 02.07.20 12:09
Оценка:
Здравствуйте, Basil2, Вы писали:

B>Здравствуйте, Carc, Вы писали:


B>>>Может в винде есть какой-то тип объектов, который живет вне программы?


B>>>Но может есть что-то еще?

C>>GlobalAddAtom будет жить после выхода из программы… Не!?!

B>Да!! Выглядит как то, что нужно. Правда там нельзя хранить пары ключ-значение, соответственно для счетчика надо будет вводить несколько атомов и перебирать их последовательно. Но в целом выглядит куда как безпалевнее файлов и реестра.

Почему нельзя?
В параметре, в строке в функции GlobalAddAtom можем что хочешь передать в пределах 255 байтов. Ну и, соответственно, пишем туда что-нить в стиле
"имя_ключа|значение_ключа_цифрой_или_еще_как". Ну, а потом, когда вынимаем парсим строку по нашему разделителю "|" на пару, и вынимаем уже и ключ, и само значение… Ну как-то так, в таком духе…
Aml Pages Home
Re[3]: Где в памяти винды временно прихранить данные?
От: Carc Россия https://vk.com/gosha_mazov
Дата: 02.07.20 12:12
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:



SVZ>А после перезапуска системы атом сохранится?

Нет, конечно, не сохранится.
Но и у топикстартера задача другая
Автор: Basil2
Дата: 29.06.20

Хочу ограничить число запусков программы в день.…

Aml Pages Home
Re[4]: Где в памяти винды временно прихранить данные?
От: Stanislav V. Zudin Россия  
Дата: 02.07.20 12:21
Оценка:
Здравствуйте, Carc, Вы писали:

SVZ>>А после перезапуска системы атом сохранится?

C>Нет, конечно, не сохранится.
C>Но и у топикстартера задача другая
Автор: Basil2
Дата: 29.06.20

C>

C>Хочу ограничить число запусков программы в день.…


Ну я бы не полагался на то, что машина в течение дня не перегружается.
Сейчас, конечно, не 90-е годы , но всё равно, некоторые машины выключают по-настоящему.

Хотя если этот фактор не учитывать и брать средне-статистического пользователя лаптопа или офисного компутера, то решение норм.
_____________________
С уважением,
Stanislav V. Zudin
Re[5]: Где в памяти винды временно прихранить данные?
От: Carc Россия https://vk.com/gosha_mazov
Дата: 02.07.20 13:30
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Ну я бы не полагался на то, что машина в течение дня не перегружается.

SVZ>Сейчас, конечно, не 90-е годы , но всё равно, некоторые машины выключают по-настоящему.

SVZ>Хотя если этот фактор не учитывать и брать средне-статистического пользователя лаптопа или офисного компутера, то решение норм.

Дык про среднестатистического офисного и разговор… Крякеры чутка посерьезнее отловят нафиг этот атом, и попросту его грохнут сбоку-припеку, дело то не хитрое.
Если нужна серьезная защита, то такой подход и вовсе не годится.

А вот прыщавая школота, освоившая Ctrl+Alt+Del, и мнящая себя великими кул-хацкерами попросту перекурит в сторонке. Максимум на что они способны, это регмон да файлмон… Ну, а атомы, RegisterWindowMessage и прочия околопрограммерские приблудочки… Я умоляю, они слов то таких не слышали никогда, не то что, понимают о чем речь и как ловить…

Я дык просто привел пример простенького счетчика, который делается на коленке, за 10 минут и не отваливается с выходом из софтинки. Ну и что б детсад радостно не кричал уже через 20 минут "сломал! сломал! сломал!".

PS: Ну и не в лоб реализовывать конечно: парочку фантомов сбоку приписать к таком "счетчику". Ну там мусор какой в реестр пописывать, в файло тоже какого хлама на вид как счетчик дописывать… Нехай трудяцца, кул-хацкеры
Aml Pages Home
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.