Кросспост с васма моей темы, думаю, пригодится людям и тут почитать, которые этим интересуются. И просто в коллекцию статей. Сегодня очередным вопросом о том, с чего начать кодинг под ринг0, меня вынудили дать развернутый ответ, в связи с чем хочу все изложить последовательно. WARNING флеймерам: все нижеизложенное является моей личной точкой зрения, не претендует на единственно возможную и ни в коем случае на абсолютную правильность. Это одно из возможных руководств к действию, не исключающее других, но предполагающее, что человек будет следовать поэтапно и последовательно, не перепрыгивая и не меняя местами пункты. Приветствуются конструктивные замечания к изложенным инструментам и справочным материалам. Все нижеизложенное касается кодинга под ос XP/2003 x32, для более поздних потребуется некоторые корректировки, но я все равно рекомендую начинать с икспи. Сперва речь пойдет про необходимые инструменты. 1. Конечно же, потребуется Windows Driver Kit XP 2600, он же Driver Development Kit в прошлом, вообщем называйте как хотите, а я буду сокращенно именовать такие продукты далее как DDK. Суть в том, что там содержатся инклуды и либы для Си компилятора, чтобы можно было собрать работающий бинарник драйвера. Так же обычно там содержатся и специальные версии этих самых компиляторов и линкеров, которыми я обычно предпочитаю не пользоваться, а собирать всё в студии, о чем расскажу далее. Где достать wdk/dkk не помню, я думаю, что гуглу виднее, помню лишь что когда-то что-то связанное с этим было платным и свободно не раздавалось вроде бы, но в любом случае можно достать, тем более сейчас. 2. Очень полезно будет заиметь так же Installable File System Kit (IFS Kit) XP 2600, в котором есть много того, чего нету в ддк. Даже если вы не будете разрабатывать драйвера файловых систем, хидеры и либы из ifs kit лишними не будут. В кустарных условиях если совсем пришел капец можно доволствоваться файлом ntifs.h, который составили добрые люди и распространяют по лицензии GNU GPL, который можно найит на 1-2 строчке гугла по запросу "ntifs.h" (для тех, кому лень - сначала подзатыльник . потом - ntifs.h). Где достать сам IFS Kit честно не знаю и как он ко мне попал так же не помню. Рекомендую погуглить. 3. Debugging Tools for Windows x32, в принципе гугл на это название сразу выдает линк, но, опять же для ленивых, клац. Там же предлагают скачать символы - я бы не рекомендовал. Во-первых, далеко не все файлы из символьного пака потребуются. Во-вторых, я до сих пор не разобрался как прикрутить их символьные паки к ихнему же WinDbg (отладчик из Debugging Tools for Windows). Почему-то те символы, которые скачивает WinDbg в рантайме, имеют другую структуру каталогов, нежели их паки. Вообщем, мое предложение - скачивать символы в рантайме, благо у большинства инет сейчас быстрый и трафика шибко много там не потребуется - от силы метров 100-150 суммарно для большинства бинарей, которые вообще потребуются. Для этого надо будет ввести команду в WinDbg !sympath srv*D:\Symbols*http://msdl.microsoft.com/download/symbols, где D:\Symbols - локальный путь, куда сохранять символы. Ну, об этом далее. 4. Локально установленный MSDN версии не ниже April 2007. Естественно, чтобы там была дока и на ддк. Иначе будет совсем-совсем грустно. 5. М. Руссинович, Д. Соломон "Внутреннее устройство Microsoft Windows 2000/XP/2003 Server". И не надо говорить, что она толстая и нет времени читать! =) Никогда не понимал людей, которые так говорят про справочник. А ведь это по сути справочник. Ну, точнее, я, конечно, не хочу сказать, что все книги делятся на учебники и справочники, нет. Я клоню к тому, что это не учебник. Её стоит читать подряд, но не стоит пытаться понять абсолютно все, о чем написано, в отличие от учебника. В этом плане она частичто учебник. Потом, когда потребуется что-то конкретное, лезем в нужную главу и начинаем досконально изучать. И тогда эта книга - справочник. Я ее полностью страницу за страницей читал два раза. Прежде, чем что-либо читать еще или кодить. Так получилось, что я тогда уезжал в другой город на две недели, а незадолго до этого я ходил в книжный и случайно наткнулся на эту книжку и купил. Решил взять её почитать в дороге или по-вечерам. Взял Комп с собой не брал, поэтому вечерами я только и делал, что читал эту книгу подряд страницу за страницей. За две недели вечерами я прочитал ее два раза "от корки до корки", как говорится. Неприятный момент в том, что к концу чтения начинает забываться то, о чем писалось в начале. Это первая причина, почему я ее перечитал тогда дважды. Вторая причина - такой материал трудно изложить последовательно, многие части ядра взаимосвязаны и описать одно, не описывая другого, очень трудно. Поэтому первый раз ее нужно сесть читать, не стараться запомнить и понять всё, стараться понять и запомнить самое главное, а что именно главное, будет ясно по ходу чтения - об этом будет больше всего говориться, и оно автоматически запомнится лучше всего. При первом прочтении большинство терминов будут непонятны даже с учетом наличия глоссария в конце по описанной выше причине. Поэтому после первого прочтения книга читается второй раз, опять не надо стараться запомнить всё, но понять нужно больше, чем в первый раз - ведь теперь в общих чертах известен материал последующих глав. Только после таких манипуляций с этой книгой я рекомендую садиться что-либо писать. Не особо люблю статьи аля "пишем первый драйвер за 5 минут своими руками ляляля", одну из которых наблюдал в последнее время на хабре, не в обиду автору будет сказано. Там очень стараются излагать материал по ходу дела, в итоге получается статья про первый драйвер, где немного рассказано про подсистему ввода-вывода, немного про память, немного про IRQL, еще чуть-чуть про диспетчеризацию сервисов, в результате чего у читателя образуется такая каша, что ее потомздесь разгребать и разгребать, причем научить человека потом сложнее, чем если бы он таких статей вообще не читал. К сожалению, есть опыт с одним таким знакомым. Ну, вообщем-то, даже и не одним. 6. После прочтения Руссиновича очень рекомендую статьи Four-F на васме, сам их использовал когда-то Наверное, это самый качественный вариант изложения материала. К сожалению, там затронуты не все необходимые на первых порах темы, поэтому остальное придется брать из других источников. Важный момент: настоятельно рекомендую именно сначала прочитать Руссиновича, а потом статьи Four-F'а. Видел людей, которые выпендриваются, что учатся только по статьям, не имея теоритической базы. Ни к чему хорошему это не приводит при всем уважении к качеству статей и их авторам. Без теоритической базы - никуда. 7. VMware Workstation не менее, по-моему 5 версии (кажется, там появилась поддержка снапшотов, которые будут критически необходимы). Про то, какие бяки вытворять с ней и как настраивать - далее, а пока продолжим список инструментов и теоритического материала. 8. Windows Research Kernel; win2k, nt4 sources. Поскольку это варез, ссылок не дождётесь Первое гуглится легко (и даже по-моему доступно на сайте мс), а второе и третье откровенный варез, который не очень просто найти в гугле, но возможно, если хорошо поискать. Мануалы, книжки и статьи это хорошо, а первоисточник - исходники - всегда лучше. Если что-то будет не понятно в Руссиновиче, то всегда можно посмотреть, а как же оно устроено на самом деле. Так же окажутся полезными сорцы React OS, если не знаете, что это такое - срочно бегом в гугл и читать офсайт. Штука очень интересная и полезная (я про отдельно взятые исходники с учебной точки зрения. Сама ОС пока кривая) 9. Windows Checked Build. Что такое checked build и чем отличаются checked и retail build можно узнать из Руссиновича. К сожалению, мелкомягкие не позволяют скачать отдельно ядро и хал в checked сборке, поэтому надо либо выкачивать весь инсталлер, либо (если трафик не позволяет) кого-то просить у кого он есть, чтобы вынули ядро и хал оттудова. Сам инсталлер это самораспаковывающийся CAB-архив, поэтому даже ничего ставить не надо, просто открыть WinRAR'ом. Потребуются файлы i386\nt*kr*.ex_ (4 штуки), i386\hal*.dl_ (не помню сколько штук ) 10. Удобные маленькие штучки от Sysinternals (опять этот Руссинович!) Всякие regmon, filemon, DbgView, WinObj окажутся очень полезными при отладке. Так же советую WinObjEx от Four-F. Тоже незаменимая штука. 11. Само собой, лоадер драйверов. Благо их пруд пруди. Хоть из kmdkit Four-F'а, хоть мой компактный, хоть какой-нибудь. Главное, чтобы умел инсталить сервис, стартовать и останавливать его. 12. Так же полезна будет утилита pdbdump - ей нужно скормить символы ядра и хранить полученные хидеры как зеницу ока. Ибо документированы далеко не все структуры, а интерес человека не знает границ и везде хочется сунуть свой нос. 13. Хороший дизассемблер, тут IDA Pro + HexRays практически сметают всех конкурентов. Один раз надо будет сделать базы .idb для ядра и хал (разумеется с символами) для checked и retail версий ядра. С инструментами, вроде, покончили. Для особых извращенцев, у которых в крови зашкаливает адреналин и всегда хочется приключений на свои вторые девяносто, могу посоветовать поставить локально на компьютер отладчик Soft ICE. Если сумеете поставить и заставить его работать, то получите массу удовольствия от того, как драйвера будут падать не в синий экран, а в черное окно отладчика, в котором можно будет покрутить код и потыкать в регистры. Очень интересно, забавно, но крайне не рекомендовано - эксперименты, которые коснутся кеша файловой системы и прочих важных штук, могут угробить вам часть данных на харде. Собственно тоже самое могу сказать и просто про запуск своих неотлаженных драйверов на собственной машине. Вообщем, как говорится, на свой страх и риск и не говорите потом, что я не предупреждал, если вдруг пропадёт вся порнуха с винта Теперь излагаю что требуется сделать: 1. Я думаю, я уже достаточно раз повторил про Руссиновича и про статьи. Так что сначала нужно заиметь себе в голове теорминимум. 2. Если чего-то из списка нет, то поставить: студию (подойдет любая >= чем 2003 (7 версия) и заканчивая 2008 (9 версия,последняя)), Debugging Tools, VMware, скачать checked build и вообще заиметь все инструменты из списка в первой половине статьи. 3. Настроить студию для сборки драйверов. Например, здесь неплохо так изложено как это сделать. Тут обычно многие справляются, поскольку подключать мозги к этому процессу практически не требуется. 4. Настроить на VMware (как, она еще не установлена? тогда бегом ставить) COM-порт чтобы он указывал на пайп. http://rootkits.ru/viewtopic.php?id=72 тут вполне достойно описано как это сотворить. Для проверки нужно загрузить винду в вмваре, предварительно прописав в C:\boot.ini пункт с дополнительными ключами /DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200 Далее, загрузить этот пункт при старте и попробовать подключиться из WinDbg - его нужно запустить, нажать Ctrl-K, выбрать закладку COM, галочку Pipe, в качестве порта ввести \\.\pipe\com_1 (или вместо \\.\ путь к компьютеру, где запущена VMware. Да-да, вы не ослышались - можно VMware поставить на одном компе, а отлаживать с другого), скорость 115200 и нажать ОК. После чего нажать Ctrl-Break. Если все сделано верно, то WinDbg скажет, что ему пришлось остановиться, потому что мы его попросили и если после этого мы увидим приглашение для ввода команд внизу окна - все прошло чудесно и все работает. Можно попробовать набрать что-нибудь, например, kb и посмотреть стек вызовов, или r и посмотреть регистры. 5. Подключаться к VMware уже можно, но нет символов. Срочно исправляем это недоразумение и в WinDbg прописываем в File -> Symbol File Path srv*D:\Symbols*http://msdl.microsoft.com/download/symbols, где D:\Symbols - путь, где будут сохраняться все скаченные символы. Туда можно скачивать символы и разных версий виндоус, они не перепутаются, поскольку распределяются по каталогам с уникаьлными номерами-хешами содержимого. Можно поставить галочку Reload, а можно ввести команду .reload по необходимости 6. Наделать в VMware снапшотов - сначала retail версию, загруженную в обычном и дебаг режимах, потом заменить ядро и хал на checked версии и снова загрузить в дебаг и обычном режимах. Получается 4 снапшота. Очень пригодится потом. 7. Наделать в IDA .idb баз для ядра и хал checked и retail версий, разумеется, скормив символы ей. Получатся увесистые базы мегабайт по пятьдесят, которые в дальнейшем очень потребуются, если вдруг что-то будет непонятно. Сначала лезем в Руссиновича, потом в сорцы ядра, потом в дизасм ядра в этих базах, пока не наступит прозрение. 8. Утилитой pdbdump наделать хидеров разных версий ядра с разных систем (nt, 2000, xp, 2003 с различными SP. пригодится), как я уже выше говорил. Поскольку в ддк документировано много, но далеко не всё. А любопытство границ не знает. Вроде бы всё, если что-то еще вспомню, то допишу. PS. Пыщ-пыщ PPS. Ссылки из статьи (чтобы не бегать лишний раз по тексту): http://www.acc.umu.se/~bosse/ntifs.h (ntifs.h) http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx (Debugging tools) http://alter.org.ua/ru/docs/nt_kernel/vc8_proj/ (настройка Visual Studio 8) http://rootkits.ru/viewtopic.php?id=72 (настройка VMware) http://sourceforge.net/projects/pdbdump (утилита pdbdump) А так же: http://www.wasm.ru/publist.php?list=21 (статьи раздела "Секреты Win32") http://rootkits.ru/viewforum.php?id=1 (раздел, посвященный кернел кодингу) http://rootkit.com/ (без комментариев..) http://osronline.com/ (очень хороший сайтик с форумом, где много полезного, правда, на англицком.) http://reactos.org/ (оф сайт React OS) http://forum.vingrad.ru/ (еще один достойный форум по программированию) http://rsdn.ru/ (тут думаю тоже комментарии не нужны) http://technet.microsoft.com/en-us/sysinternals/default.aspx (сайт Sysinternals, который с недавнего времени хостится у MS, когда они их переманили к себе) http://www.dumpanalysis.org/ (в тему анализа дампов, вчера-сегодня некий Ra_Sh подкинул в личку, думаю, он будет не против, если я опубликую) UPD: https://www.wasm.ru/forum/viewtopic.php?id=29640 оригинал, пополнять список ссылок буду там.
Это в принципе выисняется по пути разработки драйверов, хорошо что сейчас оно сосредоточено в одной статье. В Syser есть загрузщик дров.