![]() |
eXeL@B —› Программирование —› Вопрос по перехвату API |
Посл.ответ | Сообщение |
|
Создано: 22 декабря 2008 23:57 · Личное сообщение · #1 Всем привет... Есть прекрасные статьи MSRem'а по перехвату. У меня вопрос по 3 части: www.wasm.ru/article.php?article=apihook_3 В прилагающихся файлах есть "Номера всех системных вызовов Windows 2000/XP": www.wasm.ru/pub/21/files/sysservice.rar Так вот вопрос: Как определить Serivce ID для неизвестной функции или функции в Vista? ![]() |
|
Создано: 23 декабря 2008 00:09 · Личное сообщение · #2 |
|
Создано: 23 декабря 2008 00:11 · Поправил: Viktoro · Личное сообщение · #3 |
|
Создано: 23 декабря 2008 00:21 · Поправил: coderess · Личное сообщение · #4 Дизассемблируя kernel32.dll и ntdll.dll, в кернел содердаться WinAPI функции, которые ведут к ntdll.dll, гуляешь по отладчику и получаешь, пример ниже: ZwQueryInformationProcess: Code:
После входа по (F7) Code:
вызывая: Code:
мы переходим к SYSENTER (для Windows XP) в Windows 2000, int 2eh Code:
Несколько замечаний: В сайсе есть такая команда как ntcall, с помощью нее можно просматривать номера системных вызовов и второе точно не помню на каком то из сервис паков используется Code:
----- Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes ![]() |
|
Создано: 23 декабря 2008 10:14 · Личное сообщение · #5 |
|
Создано: 23 декабря 2008 11:26 · Личное сообщение · #6 |
|
Создано: 23 декабря 2008 21:27 · Личное сообщение · #7 |
|
Создано: 27 декабря 2008 09:04 · Поправил: NeoTall · Личное сообщение · #8 Всем привет... Появился такой вопрос. Как унифицировать работу драйвера в системах NT/2k/XP/2k3/Vista? В аттаче, рабочий (в WinXP) пример от MSRem'а (бинарники, сурсы и утилита загрузки - 28кБ). Однако, как оказалось, он не загружается в Win2k3 (и думаю в Vista тоже). Кто может подсказать, в чем ошибка? З.Ы. Пересобирал исходники с помощью Win2k3 DDK (3790.1830) как с настройками "FRE WNET", так и с настройками "FRE WXP"...результат один. Ну, и вопрос на будущее (пока не к спеху): Будет ли этот драйвер работать в 64битной системе? Или же его надо пересобирать с "FRE 64"? Заранее Спасибо... С Наступающими, Всех, Праздниками!!! ![]() ![]() |
|
Создано: 27 декабря 2008 09:41 · Личное сообщение · #9 |
|
Создано: 27 декабря 2008 09:45 · Личное сообщение · #10 |
|
Создано: 27 декабря 2008 11:25 · Личное сообщение · #11 В аттаче, рабочий (в WinXP) пример от MSRem'а (бинарники, сурсы и утилита загрузки - 28кБ). Однако, как оказалось, он не загружается в Win2k3 (и думаю в Vista тоже). Кто может подсказать, в чем ошибка? в Windows Vista введена цифровая подпись на драйверах windowshelp.microsoft.com/Windows/ru-RU/help/5622d7d6-531b-4e76-be48-0059d38339c41049.mspx Руководство по подписи драйверов oszone.net/4846_2 ----- Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes ![]() |
|
Создано: 27 декабря 2008 14:46 · Поправил: SLV · Личное сообщение · #12 |
|
Создано: 28 декабря 2008 10:58 · Личное сообщение · #13 2 coderess С вистой понятно, а как быть с Windows 2003 Server? 2 SLV Я может и первый раз что-то с драйвером пытаюсь "замутить", но на такие грабли: Code:
не наступлю. Добавление: Code:
никак не помогает. Я же четко написал "...он не загружается в Win2k3", а не "не работает"... Вот в чем вопрос!!! ![]() |
|
Создано: 29 декабря 2008 00:12 · Поправил: coderess · Личное сообщение · #14 |
|
Создано: 29 декабря 2008 08:20 · Личное сообщение · #15 2 coderess И что я должен вынести из этого топика? Я его уже читал. Насчет полного кода DriverEntry он есть в аттаче. Как оказалось, даже такой драйвер: Code:
не загружается в Windows 2003 Server... Сборку делал как для WXP, так и для WNET. Будут ли еще какие-нибудь предложения? ![]() |
|
Создано: 31 декабря 2008 17:37 · Личное сообщение · #16 |
|
Создано: 31 декабря 2008 19:30 · Личное сообщение · #17 |
|
Создано: 03 января 2009 16:14 · Личное сообщение · #18 |
|
Создано: 03 января 2009 17:21 · Личное сообщение · #19 |
|
Создано: 03 января 2009 18:32 · Личное сообщение · #20 |
|
Создано: 03 января 2009 19:41 · Поправил: coderess · Личное сообщение · #21 |
|
Создано: 03 января 2009 20:15 · Поправил: HiEndsoft · Личное сообщение · #22 NeoTall пишет: Используя какие API, винда программно выключает винт при простое? Можно было бы и самому DeviceIOControl поперехватывать и посмотреть.... Вот код на Си (писал когда-то "убивалку" винта в цикле "пуск"-"стоп" шпинделя): Code:
----- продавец резиновых утёнков ![]() |
|
Создано: 04 января 2009 14:26 · Личное сообщение · #23 Благодарю всех за помощь...однако пока не все как оказалось. 2 HiEndsoft А почему Вы используете ou[6]=0xe0;? В статье, которую посоветовал coderess, указано другое значение: Code:
Да, и в подтверждение этого, скомпилив Ваш код с ou[6]=0xe0; остановки не получилось, а вот с ou[6]=0xe6;, все прошло успешно, диск остановился. ...Да и в DDK: Code:
Теперь как программно остановить диск стало ясно, отлично. Далее я сделал перехват NtDeviceIOControlFile фильтруя значение IOControlCode (на равенство IOCTL_IDE_PASS_THROUGH) и 6-ого байта InputBuffer (на равенство 0хЕ6). В результате получил вот что: Если использовать Ваш, HiEndsoft, код (с правкой), то загруженный драйвер прекрасно справляется с задачей, перехватывает NtDeviceIOControlFile (вызов DeviceIOControl) и правильно обрабатывает данные, но если настроить систему питания на отключение дисков при простое, загрузить драйвер, и ждать, то диски как останавливались, так и останавливаются!!! Помогите разобраться. В чем дело? Как блокировать отключение дисков системой при простое? ![]() |
|
Создано: 04 января 2009 16:06 · Личное сообщение · #24 |
|
Создано: 04 января 2009 20:53 · Личное сообщение · #25 coderess пишет: IOCTL_SCSI_PASS_THROUGH подходит как для IDE, так и для SCSI Неа. Вот кусок кода. Можете смеяться, в С я не очень шарю. Code:
Обрабатываю все возможные варианты IOControl'а. Но системную остановку это не перехватавает. Что еще посоветуете? Могу выложить полный исходник драйвера, если надо... ![]() |
|
Создано: 04 января 2009 21:46 · Поправил: HiEndsoft · Личное сообщение · #26 NeoTall пишет: А почему Вы используете ou[6]=0xe0;? --блин, реально очепятка У меня работает: и SATA и IDE -тормозит с парковкой. Вообще - вариантов помню несколько было...(в каких - то тулзах типа HDDScan сплайсил DeviceIoControl..) Перед этим делаю IOCTL_SCSI_RESCAN_BUS. Еще вариант: Code:
В те времена в наличии полного комплекта NTDDK не было, приходилось извращаться. ----- продавец резиновых утёнков ![]() |
|
Создано: 07 января 2009 16:37 · Личное сообщение · #27 Привет... Спасибо за подсказки. Вот какой еще вопрос возник: Какими API винда отключает систему, перезагружает ее или завершает сеанс? Посмотрел драйвер HideToolz, там MsRem вроде перехватывает: ZwSetSystemPowerState ZwShutdownSystem ZwRaiseHardError ZwInitiatePowerAction ExitWindowsEx первые 4 я перехватываю, HookAnalyzer правильно определяет перехваченные функи, однако винда все равно перезагружает комп. Посоветуйте, как блокировать перезагрузку компа? ![]() |
|
Создано: 07 января 2009 17:00 · Поправил: coderess · Личное сообщение · #28 Я завершал работу системы вызовом ZwShutdownSystem с получением прав на перезагрузку SE_SHUTDOWN_PRIVILEGE Вот пример rootkits.ru/viewtopic.php?id=616 Также с помощью CsrClientCallServer можно, мини описание: bugtraq.ru/library/internals/shut.html bugtraq.ru/library/internals/.keep/shut.cpp.txt ----- Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes ![]() |
|
Создано: 07 января 2009 17:58 · Личное сообщение · #29 |
![]() |
eXeL@B —› Программирование —› Вопрос по перехвату API |