![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Определение программы
SpyBoy © (2005-07-14 20:41:00)Как определить, какая программа в данный момент использует файл(file.*)?
Германн (2005-07-15 01:18:00) [21]>BiN © (15.07.05 00:25) [8]
>В общем-то, решаемо и не так уж сложно.
В переводе на русский - "В общем-то решаемо, но только на NT-системах и с очень большим геморроем!"
Если я не правильно перевел, извини!
А уж если вспомнить Просто Джо © (14.07.05 21:13) [5],
то вообще "непереводимо"!
BiN (2005-07-15 00:25:00) [22]В общем-то, решаемо и не так уж сложно.
Содержимое таблиц хэндлов процессов можно получить с помощью функции NtQuerySystemInformation (тип информации SystemHandleInformation).
Выбираешь объекты с типом 'File', тип предварительно можешь узнать с помощью NtQueryObject или по полю ObjectTypeNumber из _SYSTEM_HANDLE_INFORMATION.
Далее с помощью всё того же NtQueryObject получаешь имя объекта файл, т.е. собственно путь файла в форме \Device\Harddisk0\Myfile.txt, который переводишь с помощью QueryDosDevice или еще как в удобоваримый DOS-формат.
Вуаля.
Да, чуть не забыл, в NtQueryObject следует, конечно же, передавать описатель полученный от DuplicateHandle, т.е. вероятно не все процессы можно будет открыть с доступом PROCESS_DUP_HANDLE.
Пример всего вышеописанного процесса любезно предоставлен Игорем Шевченко в посте http://www.delphimaster.ru/cgi-bin/forum.pl?id=1120126541&n=5
И еще, этот способ периодически будет приводить к фатальным зависанием в NtQueryObject, а именно при попытке обращения к именнованным каналам (а они также имеют тип "File") с незавершенными операциями ввода/вывода.
Есть и другой способ получения информации об открытых объектах, например, используя \Device\Physicalmemory, но это уже совсем другая история -)
SpyBoy (2005-07-14 21:24:00) [23]Неужнли никто не сталкивался
SpyBoy (2005-07-14 21:17:00) [24]Ну вобщем я пишу антикейлоггер, лог файл я уже нахожу, а как
найти сам .exe- ведь при использовании DotFixFileSigner ативирь его не ловит
Просто Джо (2005-07-14 21:13:00) [25]В общем случае нерешаемо, тем более, что не определено понятие "использует файл".
SpyBoy (2005-07-14 21:10:00) [26]да нет, а нельзя ли напистаь какую-нибудь ловушку?
Просто Джо (2005-07-14 21:08:00) [27]
> [2] SpyBoy © (14.07.05 21:05)
> А средствами DELPHI никак?
Ты ищешь что-то вроде функции WhoDoesUseThisFile? Нету такой функции, ни в Делфи, ни в Си++, ни в Бэйсике.
SpyBoy (2005-07-14 21:05:00) [28]А средствами DELPHI никак?
Просто Джо (2005-07-14 21:01:00) [29]Полный скан содержимого оп. памяти и страничного файла в режиме ядра. Затем подключаешь дисассемблер + мощный ИИ для выявлений мест, из которых вызывается CreateFile etc, затем подключаешь еще более мощный ИИ для выяснения времени когда это произошло и не закрыт ли уже файл. Примерная схема, удачи :0)