![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Fishtel |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.5.2010 Репутация: нет Всего: нет |
Здравствуйте, помогите решить задачу. Пишу программку для скрытия файлов(папок) для Windows 7
Внедрение dll через удаленный поток, метод перехвата : используя таблицу импорта Сложности : 1 Проводник не перехватывает FindNextFileW(Windows Explorer) 2 Не получается скрыть файлы используя myFindNextFileW (как пример в WinRAR) хотя видно что библиотека загружена и вызывается двойник myFindNextFileW Уже работает код внедрения библиотеки:
MAIN библиотеки:
функция подмены адресов:
сам двойник :
Спасибо. Надеюсь на помощь. Это сообщение отредактировал(а) Fishtel - 6.6.2010, 14:08 |
||||||||
|
|||||||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
На первый взгляд - функция двойник myFindNextFileW написана неверно - она не всегда возвращает результат и не всегда заполняет сруктуру lpFindFileData
И вообще она крайне подозрительна - параметр lpFindFileData у FindNextFileW - это out параметр (т.е. ваша функция должна его заполнять), а вы из него зачем то читатете |
|||
|
||||
| 12usver12 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
попробуй таким способом
а вообще читай внимательно мсдн,описание функций и возвращаемые значения Это сообщение отредактировал(а) 12usver12 - 30.5.2010, 11:23 |
|||
|
||||
| Fishtel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.5.2010 Репутация: нет Всего: нет |
12usver12 и xvr, спасибо.
12usver12 работает код:
xvr прочитав, ваше сообщение только понял)))) мне почему раньше казалось, что lpFindFileData уже приходит заполненная, а я ведь перехватываю вызов и она еще не успела заполниться, точно.... =) протестировал в Total, WinRAR, все ок а вот проводник вылетает при замене адресов (((( Это сообщение отредактировал(а) Fishtel - 30.5.2010, 11:58 |
|||
|
||||
| bra1ny |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 26.12.2008 Репутация: 2 Всего: 3 |
перехватите NtQueryDirectoryFile.
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России. |
|||
|
||||
| 12usver12 |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
вообще жестокий способ, может быть из-за него вылеты а что мой первоначальный код не работает ? в случае с explorer можно попробовать чота типа такого
|
||||||
|
|||||||
| xvr |
|
||||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Угу
Здесь нужно в цикле вызывать realAdrFindNextFileW пока она не вернет FALSE или пока возвращенное имя не будет отличаться от "имя.файла" Как то так
PS. А FindFirstFileW нормально перехвачен? Это сообщение отредактировал(а) xvr - 30.5.2010, 13:37 |
||||||||||||
|
|||||||||||||
| 12usver12 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
впринципе да - но просто в случае с эксплорером, стоит попробовать возможно он ориентируется по коду ошибки ERROR_NO_MORE_FILES впринципе можно быстро решить проблему в обработчике lstrcpyW(lpFindFileData->cFileName, L"111.txt"); но это будет некрасиво и неуниверсально, но все-таки решение |
|||
|
||||
| Fishtel |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.5.2010 Репутация: нет Всего: нет |
с Explorer проблема в том, что он вылетает в функции myChangeAdress
на строчках :
я пока так и тестирую ))) в дальнейшем в if() будет функция которая читает список запрещенных файлов и если найдет нужный возвратит false
да, там пока ток вызов оригинальной функции, но я этот перехватчик планирую использовать только, чтобы получить полный путь к файлу... Это сообщение отредактировал(а) Fishtel - 30.5.2010, 14:51 |
||||||
|
|||||||
| 12usver12 |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
to Fishtel не забывай в конце return retVal; а то опять будет что-то вылетать...
тут еще зависит от конкретной программы...возможно перечисление файлов выполняется таким образом в простых прогах
или что-то наподобие такого
поэтому универсальный способ скорее стоит искать через NtQueryDirectoryFile... хотя вот этот должен сработать универсально
Это сообщение отредактировал(а) 12usver12 - 30.5.2010, 15:19 |
||||||
|
|||||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
||||
|
||||
| Fishtel |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.5.2010 Репутация: нет Всего: нет |
вот такой код вызываю, ничего не меняется ((( |
||||
|
|||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
1) Проверьте, что возвращает VirtualProtect
2) WriteProcessMemory здесь излишен - вы пишите из своего собственного процесса. Вместо
|
||||
|
|||||
| Fishtel |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.5.2010 Репутация: нет Всего: нет |
возвращает не 0 в обоих случаях... и тут же вылетает ... Это сообщение отредактировал(а) Fishtel - 30.5.2010, 19:42 |
||||||
|
|||||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
А указатель по ppfn случайно не пересекает границу страницы?
|
|||
|
||||
| Fishtel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.5.2010 Репутация: нет Всего: нет |
а вот это я не знаю как проверить ((( я не могу отладчиком зайти в библиотеку(((( __asm {int 3} не тормозит.... |
|||
|
||||
| 12usver12 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
сделай для начала olly - just in time debugger, проверяй значение указателя ppfn для записи в секцию импорта , вынеси запись в критическую секцию |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
||||
|
||||
| Fishtel |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.5.2010 Репутация: нет Всего: нет |
запарился 3 часа пробовал разобраться с olly и никаких результатов я с ним раньше не работал, может подскажете, что мне нужно сделать чтобы посмотреть ppfn ? или тут быстро не получится ? |
||||
|
|||||
| 12usver12 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
значит не судьба, оставь программирование иди на менеджера
|
|||
|
||||
| Fishtel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.5.2010 Репутация: нет Всего: нет |
может и так)) но доделать нужно... с вылетом Explorer разобрался заменил VirtualProtect(ppfn,sizeof(ppfn),PAGE_READWRITE, &op); на VirtualProtectEx(GetCurrentProcess(),ppfn,sizeof(ppfn),PAGE_EXECUTE_READWRITE, &op); но вот теперь другая проблема, explorer не перехватывает FindNextFileW/ FindFirstFileW попробовал CloseHandle ее перехватывает думал он получает адресса через GetProcAddress, но и ее не удалось перехватить (((( подскажите как быть? может Explorer другими какими-то функциями отображает список файлов? Это сообщение отредактировал(а) Fishtel - 6.6.2010, 13:58 |
|||
|
||||
| Fishtel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.5.2010 Репутация: нет Всего: нет |
так ее ж нет в таблице импорта приложения (посмотрел с пом PE Explorer) и в msdn написано что она не используется, мне нужно под Windows 7сделать перехват... думаете стоит? |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Изучение сорцов FindFirstExW/FindNextExW (из W2K) показало, что они используют вызовы
|
|||
|
||||
| bra1ny |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 26.12.2008 Репутация: 2 Всего: 3 |
давно уже предложил перехватить сискол.
Это сообщение отредактировал(а) bra1ny - 6.6.2010, 14:30 --------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России. |
|||
|
||||
| Fishtel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.5.2010 Репутация: нет Всего: нет |
попробовал, к ней ни одна программа не обратилась (( |
|||
|
||||
| bra1ny |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 26.12.2008 Репутация: 2 Всего: 3 |
код покажите.
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России. |
|||
|
||||
| Fishtel |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.5.2010 Репутация: нет Всего: нет |
я пока просто пробую посмотреть вызоыется или нет
FindNextFileW в total и WinRAR работает как надо, в проводнике не отлавливается а NtQueryDirectoryFile даже в total и WinRAR не вызывается... может в 7 набор функций какой-то другой? может не получается, потому что я через таблицу импорта пробую? но я и сплайсинг пробовал, в проводнике не вызывается FindNextFile ((((( Это сообщение отредактировал(а) Fishtel - 6.6.2010, 15:36 |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
||||
|
||||
| Fishtel |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.5.2010 Репутация: нет Всего: нет |
не понял, что не так? я создал dll в ней функция замены адресов и мои двойники, эту dll я через удаленный поток внедряю в нужную программу, получается что я уже в ее адресном пространстве.... последний фрагмент кода это часть dll как в KERNEL32 ? вы имеете ввиду системную dll которая в ..\system32 ? в функции myChangeAdress я сначала получаю адрес начала файла.... потом нахожу по имени нужную библиотеку(KERNEL32.dll ток уже в памяти процесса), а в ней по смещению как в KERNEL32.dll(системной) нахожу нужную фунцию и вместо адреса вызова оригинальной записываю адрес вызова двойника.....
т.е. использовать сплайсинг ? не понимаю что не так я делаю если одни програмы работают, а проводник нет (((((( |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Ты вызываешь ImageDirectoryEntryToData на текущий модуль (т.е. exe'ник). А NtQueryDirectoryFile вызывается из реализации FindFirst/NextW, которая располагается явно не в exe файле, а в kernel32. Собственно там и надо пэтчить
Да
Надо смотреть код в месте перехвата в Проводнике. Без знания ассемблера и отладчиков это сделать невозможно |
|||
|
||||
| Fishtel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.5.2010 Репутация: нет Всего: нет |
еще немного не по теме говоря FindFirst/FindNext вы имеете ввиду FindFirstFile/FindNextFile ???
или они все используют NtQueryDirectoryFile |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
||||
|
||||
| Fishtel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.5.2010 Репутация: нет Всего: нет |
упс, сделал сплайсинг, для FindNextFileW таже ерунда, а вот начал смотреть NTQueryDirectoryFile уже в проводнике видно, что иногда к ней обращаются, ток как с помощью нее скрыть ? |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Отпарсить данные, возвращенные в FileInformation параметре (убрать из них упоминания о нужных файлах) |
|||
|
||||
| Fishtel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.5.2010 Репутация: нет Всего: нет |
объявил стурктуру
но Info->FileName не хранит имя файла а какую то ерунду... |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Угу. Для размышления - из MSDN
|
|||
|
||||
| Fishtel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 27.5.2010 Репутация: нет Всего: нет |
а вообще реально ли мне на уровне пользователя вроде ring 3, перехватить и обработать ZwQueryDirectoryFile ?
она ведь используется драйвером... |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
||||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |