Изъять IOCTL из драйвера?!

Тема в разделе "WASM.BEGINNERS", создана пользователем Luzer, 12 янв 2010.

  1. Luzer

    Luzer New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2005
    Сообщения:
    95
    Доброго дня. Есть дайвер. Через IDA PRO "удалось" его проанализировать. (IDA PRO юзаю первый раз в жизни).
    Во вкладке Strings вывело кучу строк - приятно было увидеть там нечто типо +IOCTL_CAM..., -IOCTL_CAM... ну и много чего еще)
    Ищу я как раз IOCTLки. Но никак не могу вытащить данные. просто видимо тупо не понимаю.
    заголовочного файла к ним я не нашел, хотя вроде это и MSовский драйвер. Проблема еще в том, что это все под Windows Mobile и на ARM процессоре.
    Посему: вопрос, как можно изъять эти IOCTLки-наверное через чур идиотский, но тем не менее, как делали вы, или делали бы?
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Проанализировать функцию, адрес которой пишется в DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL].
     
  3. Luzer

    Luzer New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2005
    Сообщения:
    95
    извиняюсь конечно, но я ничего не понял) точнее может не правильно понял) вопщем подать запрос через DeviceIoControl с кодом IRP_MJ_DEVICE_CONTROL? вот только у меня и IRP_MJ_DEVICE_CONTROL нигде в заголовках нет. DDK наверное нада скачать ?)
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Может быть ты сначала изучишь, как устроены драйвера? Что такое IRP обработчики?
     
  5. Luzer

    Luzer New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2005
    Сообщения:
    95
    Это было бы неплохо=)
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Драйвер регистрирует callback-функции в передаваемой ему структуре DRIVER_OBJECT в массиве MajorFunction в ней. Эти функции будут вызываться при обращении к какому-либо устройству этого драйвера.

    Например, при CreateFile вызывается обработчик по индексу IRP_MJ_CREATE.
    А при DeviceIoControl вызывается обработчик IRP_MJ_DEVICE_CONTROL. Посмотри, какими указателям заполняются эти поля. И анализируй эти обработчики в иде.

    Разумеется, тебе нужен DDK и вообще познания о том, как работают драйвера.
     
  7. Luzer

    Luzer New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2005
    Сообщения:
    95
    спасибо за краткий ликбез=) сейчас же отправляюсь за знаниями
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    http://www.wasm.ru/series.php?sid=9
    читай
     
  9. Luzer

    Luzer New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2005
    Сообщения:
    95
    хм. походу это не относится к WinCE, т.к там нет как таковых драйверов... впрочим, сейчас подробней погружусь
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Про WinCE не в курсе. В любом случае, об этом можно прочитать в MSDN. Вроде там не много разницы
     
  11. Luzer

    Luzer New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2005
    Сообщения:
    95
    Ок. а если предположить, что речь в первом посте шла не о драйвере, как таковом, а о обычной dll и эти IOCTL - просто какие нить константы?
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Зависит от того, как эти константы в длл используются. В любом случае, анализировать код ф-ий, которые отвечают за обработку. ida pro + hexrays
     
  13. make

    make New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2009
    Сообщения:
    59
     
  14. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Ну без хексрейс) Чето я невнимателен сегодня
     
  15. Luzer

    Luzer New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2005
    Сообщения:
    95
    А можно как нить отладить этот "драйвер". Конкретно: поставить брекпоинт на месте, которое как я думаю возвращает значение константы и ждать пока дойдет до этого места исполнение?:) чувствую я что нельзя наверно)
     
  16. red_Human

    red_Human New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2008
    Сообщения:
    182
    Можно только осторожно)
     
  17. Luzer

    Luzer New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2005
    Сообщения:
    95
    Как?) может можно открыть файл прямо на кпк ? или мне здесь наверное бесполезно спрашивать про кпк?))
     
  18. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    Поставить брейпойнт можно, если установить отладчика режима ядра. Если я правильно понимаю, то чтобы узнать IOCTL, хватит иды. Исследовал некоторое время назад один "driver crackme", так хватило одной иды и ольки. В прочем может я не прав.