Как создать неудаляемый файл в Delphi

[следующее является перефразировкой моего предыдущего вопроса, который был сочтен двусмысленным].

Я копаюсь в создании базового механизма лицензирования для демонстрационного приложения. То, что я имею в виду, выглядит так: приложение создает пустой «файл лицензии» с именем, скажем, «0b1xa487x.ini» при первом запуске, затем срок действия истекает через 30 дней после его первого запуска, и его нельзя запускать больше, пока поскольку этот конкретный файл присутствует в системе.

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

Где-то я видел аналогичный подход, основанный на атрибутах файла (в файле были установлены атрибуты HX); однако подход с использованием атрибутов ни к чему меня не привел, так как я не могу найти какой-либо задокументированной функции существования файлового атрибута X.

Я также знаю, что существуют и другие подходы, в том числе драйверы руткитов и системные службы, запускаемые от имени системного пользователя, но именно этот подход лучше всего подходит для этого сценария. Опять же, я подчеркиваю, что содержимое файла также может быть недоступно, я не планирую использовать подход для запуска каких-либо вредоносных программ из файла, как меня обвиняют ниже :)


person Bogdan Botezatu    schedule 27.04.2011    source источник
comment
Что вы пытаетесь достичь? Например, вы пытаетесь протестировать обработку ошибок в своем приложении? Если да, то какие ошибки вы пытаетесь обрабатывать?   -  person Marek Jedliński    schedule 27.04.2011
comment
Проголосовал за закрытие. Вопрос крайне неясный/расплывчатый. Больше похоже на запрос об известных уязвимостях Windows, чем на запрос помощи в программировании.   -  person Warren P    schedule 28.04.2011
comment
Ну, это то, что я называю начать не с той ноги. Я не ожидал получить столько негативных отзывов от самого первого поста на StackOverflow, особенно когда все, что я спросил, это идея о том, как создать бесполезный, недоступный файл в системе без установки драйвера руткита или запуска службы. . Я думал, что это было достаточно законно, учитывая тот факт, что я в значительной степени могу решить проблему с помощью любого из двух подходов, но я хотел бы, чтобы все было просто. Вы знаете, что они говорят, мы невиновны, пока не доказано обратное. Можете закрыть ветку.   -  person Bogdan Botezatu    schedule 28.04.2011
comment
@sphynx: Вы задали бессмысленный вопрос. Что такое поврежденный пустой файл? По определению пустой файл не может быть поврежден, поскольку в нем нет содержимого.   -  person Ken White    schedule 28.04.2011
comment
Добро пожаловать в Stack Overflow. (Правда!) Тело вопроса действительно ерунда. Нет такого понятия, как поврежденный пустой файл. Ваши комментарии показывают, что вы действительно хотите не поврежденный файл, а неудаляемый, и ваша идея для достижения этого состоит в том, чтобы сделать его поврежденным. Но возможность удаления не имеет ничего общего с содержимым; это связано с целостностью файловой системы и возможностью доступа к файлу. Возможно, вам просто нужно дать файлу такое имя, чтобы его нельзя было выбрать в проводнике и, следовательно, нельзя было удалить. Пожалуйста, обновите текст вопроса, чтобы отразить вашу фактическую цель.   -  person Rob Kennedy    schedule 28.04.2011
comment
@sphynx: У SO нет недостатка в неясных вопросах. Приложите немного усилий и предусмотрительности в своих вопросах, и вы обнаружите, что можете получить здесь большую помощь. Отметим, что среди критики также много обоснованных просьб о разъяснении. Обратите внимание на ссылку edit под вашим вопросом.   -  person Henk Holterman    schedule 28.04.2011
comment
Привет @Роб, @Хенк. Приятно не быть пригвожденным к автору вредоносных программ с самого начала. Я перефразировал свой вопрос, чтобы добавить дополнительную информацию о том, чего я хочу достичь, а также дополнительную информацию, почему я думаю, что это можно квалифицировать как законный вопрос программирования.   -  person Bogdan Botezatu    schedule 28.04.2011
comment
@sphynx: То, что вы запрашиваете, является вредоносной программой, независимо от того, намерены вы это или нет. Создание неудаляемого файла в любой наполовину продуманной операционной системе (включая Windows) невозможно по замыслу. Было бы очень плохо, если бы это было возможно. Если вы пытаетесь сделать демо-программу, просто сделайте демо-версию вашей программы, в которой отсутствуют некоторые ключевые функции, и если пользователям нужен полный набор функций, они могут заплатить вам за полную версию. Это упрощает работу для всех участников.   -  person Mason Wheeler    schedule 28.04.2011
comment
Создайте файл внутри папки внутри папки и так далее, пока сам файл и вся корневая папка не станут неудаляемыми. Дж/К. Не делай этого. Создание невидимого приложения для защиты файла — плохая идея, и я бы не хотел этого на своем компьютере. Если вы делаете что-то подобное, вы должны как минимум ясно изложить это потенциальным пользователям.   -  person Averroes    schedule 28.04.2011
comment
@Mason: Я пытаюсь определить, следует ли что-то читать во фразе: непродуманная операционная система (включая Windows) :D   -  person Disillusioned    schedule 28.04.2011


Ответы (3)


Corrupt предполагает несоответствие какому-то стандарту. Стандартов для пустых файлов не существует.

person Henk Holterman    schedule 27.04.2011
comment
Мне нужно заблокировать папку, и я хотел бы создать в этой папке файл, который ОС не сможет обрабатывать естественным образом, т. е. не сможет удалить этот файл. Я знаю, что есть и другие способы реализации этой функции, такие как обеспечение привилегий NTFS или даже развертывание драйвера файлового фильтра, но мне хотелось бы чего-то гладкого и простого. - person Bogdan Botezatu; 27.04.2011
comment
Вы не можете этого сделать. Сдавайся сейчас. - person David Heffernan; 27.04.2011
comment
@sphynx, вы в трех словах от того, чтобы спросить нас, как написать руткит. Пожалуйста, не делай этого. - person Cosmin Prund; 27.04.2011
comment
Извините, я знаю, как написать руткит. Я не буду просить вас сделать это для меня, особенно в Delphi :). Я пытаюсь создать неудаляемый файл, как я также объяснил в своем комментарии к предложению Раду. Все, чего я пытаюсь добиться, это получить пустой, неработающий (может быть, даже нечитаемый) файл, который на самом деле нельзя удалить. Вряд ли это можно назвать злым умыслом, не так ли? - person Bogdan Botezatu; 27.04.2011
comment
Да, это плохая схема защиты (напоминает мне старые времена DOS и нестандартные дискеты). Такие файлы плохо себя ведут и могут привести к проблемам с другими инструментами (например, с дефрагментаторами диска или проверкой диска). - person ; 28.04.2011
comment
@sphynx Если я удалю демоверсию, вы оставите неудаляемый файл на моем компьютере? - person Averroes; 28.04.2011
comment
Я бы назвал вредоносным любое программное обеспечение, которое помещает неудаляемый файл на мой компьютер. Это мой компьютер, а не твой, и ты понятия не имеешь, как я им пользуюсь. - person Graham; 28.04.2011
comment
Да, у вас все в порядке, к сожалению для меня. С другой стороны, большинство приложений, работающих в пробном или демонстрационном режиме, в конечном итоге оставят ключ реестра, сообщая приложению, что он был там и, вероятно, уже истек. Ты должен дать мне это. Я думал сделать то же самое, за исключением того, что я должен был использовать файл, но после того, как я переспал с этой идеей, я также считаю это плохим подходом. - person Bogdan Botezatu; 28.04.2011

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

person Bogdan Botezatu    schedule 28.04.2011
comment
если вы можете удалить этот файл, то это может сделать кто-то другой. основная идея здесь заключается в том, чтобы заблокировать другие решения для защиты вашей демонстрации. Насколько я помню, есть компоненты для Delphi, которые сделают эту работу за вас. - person Najem; 28.04.2011

Что касается вашего последнего ответа Хенку, я считаю, что проще создать службу, запустить ее автоматически с ОС и открыть файл в fmShareExclusive с помощью TFileStream.

Но вы не можете заставить ядро ​​ОС или антивирус сделать ваш файл «неудаляемым».

С уважением,
Раду

person RBA    schedule 27.04.2011
comment
Здравствуйте, Раду. В настоящее время я пробую ваше предложение. Если ОС не может обработать неправильную метку времени, то это то, что мне нужно. Я пытаюсь создать проверку системы (какая-то схема лицензирования), и я бы хотел, чтобы пользователь не мог удалить этот файл. Я вернусь к вам с ответом в ближайшее время. - person Bogdan Botezatu; 27.04.2011
comment
Пожалуйста, не используйте такой подход. Как пользователь, я был бы не очень рад, если бы вы создали неудаляемые файлы на моей машине. Как вы будете удалять его после того, как он вам больше не нужен? Я уверен, что есть лучшие способы решения схемы лицензирования. - person Runner; 28.04.2011