![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| Coffein |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 9.4.2007 Репутация: нет Всего: нет |
Всем Привет!!! ПОМОГИТЕ! Попал в тупик, вот код дллки:
Получается вот какая штука, когда ее запускаешь она подгружается ко всем процессам и начинает перехватывать NtOpenFile. Но дело в том что я ссылку на старую функцию сохраняю сюда: NtCreateFileNextHook: function (FileHandle: PHandle; const DesiredAccess: ACCESS_MASK; ObjectAttributes: POBJECT_ATTRIBUTES; IoStatusBlock: PIoStatusBlock; AllocationSize: PLARGE_INTEGER; FileAttributes, ShareAccess, CreateDisposition, CreateOptions: ULONG; EaBuffer: PVOID; EaLength: ULONG): NTSTATUS; stdcall; А винда такое ощущение что вызывает перехватываемую функцию постоянно, и получается так что ссылка на старую функцию все время перезаписывается на в новь отловленную. При этом если я хочу запустить какой нибуть экзешник или просмотреть текстовик, то вылазиет ошибка чтто, типа не правильно указаны парамметры. Посоветуйте как быть. Это сообщение отредактировал(а) Coffein - 18.6.2007, 17:22 Присоединённый файл ( Кол-во скачиваний: 13 )
DLL.rar 50,55 Kb |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
сорь конечно, но приведенный мусор кодом назвать сложно...
зачем куча закоменченного кода? где ставится перехвать? где происходит вызов True-функций? почему в коде New функций происходит попытка "снять" перехват??? Это сообщение отредактировал(а) MetalFan - 18.6.2007, 10:06 -------------------- There are always someone smarter than you... |
|||
|
||||
| Coffein |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 9.4.2007 Репутация: нет Всего: нет |
Учел ваши замечания, прошу взгялнуть на исправления. ;)
В коде отлично видно где, функция SetWindowsHook(она же снимает) ставит глобальный хук для того чтобы внедрять в каждый пользовательский процесс мою дллку. Что касается перехвата функции то он ставится функцией HookProc('ntdll.dll', 'NtCreateFile', @NtCreateFileHookProc, @NtCreateFileNextHook), где true -функция храниться в NtCreateFileNextHook, а новая - NtCreateFileHookProc. В NtCreateFileHookProc происходит некая обработка парамметров и запись результата в файл, а далее передается управление старой функции.
В ОС происходит вызов, где ж еще. Так вот все дело в том, что есть мысль что функция обработчик не успевает сделать свою работу так как в файл записывается не полный текст. Как быть? |
||||||
|
|||||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
мм... да, я немного другую терминологию применил...
дело в том, что я называл New-функцией - ту функцию, котороя вызывается вместо перехваченной, а True-функция - это как раз та самая перехваченная функция. так это было в примере в известной статье Ms-Rem'а, на основе которой ты и делаешь перехват, как я понял. тут могу предположить, что возникает мегарекурсия.... т.е. в итоге CreateFile вызывает Native-функцию NtCreateFile, которая "перехвачена" в этом коде... а здесь на мой взгляд неплохо бы вернуть Result, возвращаемый True(NextHook) функцией.... так же отсутствует какой-либо контроль ошибок... нехорошо получается... если в твоем коде произойдет ошибка, то пострадает приложение, в котором был произведен перехват. Это сообщение отредактировал(а) MetalFan - 18.6.2007, 13:59 -------------------- There are always someone smarter than you... |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 6 Всего: 121 |
+1, человек или не понимает смысла в своих же действиях или просто невнимателен. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| Coffein |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 9.4.2007 Репутация: нет Всего: нет |
Больше склонен к "невнимателен", но в принципе если бы я понимал, уверен на 100 % такую тему на форуме не создавал! ;) Поэтому я и хочу разобратся, надеясь на ваш опыт и знания. В коде ошибся, не тот хук закоментил. Я эксперементировал на NtOpenFile, но это я в миг исправил.
Решительно согласен MetalFan, расскажи пожалуста поподробней как вернуть результат и каким образом сделать обработку ошибки, а то я не знаю как это реализовать. Это сообщение отредактировал(а) Coffein - 18.6.2007, 17:29 |
||||
|
|||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
мда... здесь бы учебничек по делфи не помешал... ибо эти вопросы из раздела "для новичков". рано тебе пока такими вещами, как перехвать апи, заниматься, имхо... -------------------- There are always someone smarter than you... |
|||
|
||||
| Coffein |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 9.4.2007 Репутация: нет Всего: нет |
MetalFan прошу конечно меня извенить, но больно интересно за что ты заработал свой статус? С таким статусом сложно дать новечку нормальный совет. Или до того зазнался что даже помочь в лом. Беспорно книга лучше, чем ответы таких "опытных" программистов! Чисто мое мнение!
P.S. Извините. |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 6 Всего: 121 |
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| Coffein |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 9.4.2007 Репутация: нет Всего: нет |
W4FhLF, спасибо тебе.
Сделав изменения в коде вот что получилось:
Вот я получил результат работы функции, а что теперь делать? Для чего мне нужен был result? Это сообщение отредактировал(а) Coffein - 18.6.2007, 20:48 |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
для этого есть раздел форума "Для новичков" это ты зря... если ты не знаком с такими элементарными вещами, как обработка исключений и возврат значения функции, то такими вещами, как в этой теме, тебе заниматься 99,9% рано. и это тебе скажет любой опытный программист. added later мда. а ты так ничего и не понял. Это сообщение отредактировал(а) MetalFan - 18.6.2007, 20:54 -------------------- There are always someone smarter than you... |
|||
|
||||
| Coffein |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 9.4.2007 Репутация: нет Всего: нет |
MetalFan спасибо за совет, я обязательно учту, надеюсь ты сильно не напрягался в помощи. Другой бы уже дельный совет дал, чем трындеть языком о пустом...
добавил поЗже но все равно спасибо! еще поЗже
А ты попробуй объяснить по другому, может получится, я хватаю на лету ;) Это сообщение отредактировал(а) Coffein - 19.6.2007, 00:32 |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 6 Всего: 121 |
Ну если тебе не нужен, то программе в рамках которой ты осуществил перехват очень даже. Это сообщение отредактировал(а) W4FhLF - 19.6.2007, 06:31 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
а тебе мало деальных советов? или ты читать не умеешь? ладно, повторю: 1) у тебя получается рекурсивный вызов... в случае перехвата NtCreateFile 2) никак не анализируются результаты вызовов функций WinApi -------------------- There are always someone smarter than you... |
|||
|
||||
| Coffein |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 9.4.2007 Репутация: нет Всего: нет |
Обрати пожалуста внимание на то что я отлавливаю NtOpenFile, я в функции-обработчик добавил обработку исключительной ситуации - если произойдет ошибка, то хук снимается, и остальные приложения не пострадают. Далее, в функции-обработчике для начала просто хочу записать в файл путь к файлу к которому осуществляется доступ. После этого мне надо отловленную функцию выполнить. Для этого я вызываю NtOpenFileNextHook(адрес старой функции). Но как я понимаю, если я ее вызову то я ее сразуже отлавлю, или нет? Проще говоря, что будет если я вызову NtOpenFileNextHook(...): она интерпритируется как NtOpenFile(...) и я ее снова отлавлю, или она выполнится без лишних помех?
Подскажи пожалуста, что нужно анализировать? Причем мне в дальнейшем нужно будет сверять путь и если он запрещен(по этому пути находится защищенный файл), я должен отправить приложению вызвавшему эту функцию значение INVALID_HANDLE_VALUE, но как это сделать тоже не знаю. |
||||
|
|||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |