n0name Спасибо большое за ссылочку, буду иметь ввиду Но все-таки, такой подход на практике кем-нибудь применялся? Ужасно не хочется потратить кучу времени на то, что практически невозможно заставить работать в реальных условиях Если бы знал, что люди такое уже делали, получил бы мощный импульс оптимизма )
Прямо гора с плеч Исходники тогда выпрашивать уже не буду, надо и свой мозг напрягать, для развития Но пару вопросов, пожалуй, задам: дизассемблер свой или от Ms Rem'a? Тестили на нескольких версиях Windows? (Win2000 + Service Packs, а потом на WinXP) В принципе, было предложено три разных функции для перехвата (ZwResumeThread, ZwCreateFile и метод, предложенный fluderast, реабилитировавший ZwCreateProcess), поэтому думаю, что теоретическая часть разработки завершена... Когда начну писать код, наверное и пойму, что знаю только то, что ничего не знаю Спасибо еще раз всем за помощь!
Сначала было просто return *((char *) func_start + 1) , работало везде, кроме Win64 Потом перевел на udis86, соответственно, работает везде.
Serzh Я тоже делал, дизасм свой, работает только на WinXP SP(0-2), Win2k3SP(0-1), хотя для Win2k там переписать одну строчку.
как звучит =) Ну хз, у меня под рукой ntdll.dll из Win2k нет. Я ищу по маске "mov ecx, 7FFE0300h", или "BA0003FE7F". После этого в eax заноситься номер syscall'a, его я и выдираю.
Вообще лучше из таблицы экспорта адрес функции Zw* найти - это будет ее начало, а потом искать mov eax, "something" от этого адреса. P.S. Искать ничего непридется, mov eax, ххх идет первым, но всякое бывает
Можно и так. Хм, и как ты думашь что тогда будет? Мне такое тоде приходило в голову, тк SectionHandle OPTIONAL, но так ничего хорошего и не придумал =) А копаться в соцах неохота из-за такого пустяка.
Раз уж речь зашла об этом не подскажите какие функции нужно использовать для: 1) Определения имени создаваемого файла, зная хэндл файла (из ZwCreateFile) 2) Определения имени файла процесса, зная хэндл процесса (из ZwCreateProcess) Знаю что все это есть в справочникe но у меня пока мало опыта программирования драйверов((
Да не, я не об этом. Я ничего не перехватываю. Каким-то образом (неважно каким) у меня есть два хэндла- некоторого файла и некоторого процесса. Как мне по этим хэндлам получить имя этого файла и имя исполняемого файла процесса? Короче говоря, мне нужно знать какие функции это делают
NtQueryInformationFile с классом информации FileNameInformation. NtQueryInformationProcess с классом ProcessBasicInformation. Получил адрес PEB, дальше PEB->ProcessParameters->ImageName