Ocho: мы строили, строили и наконец построили
Собственно, все, только что рассказанное,- это так себе, предисловие фактически. То есть вы, конечно, можете настроить систему и при определенном везении даже продлить ее trial'ный период на следующую пятилетку. Но это все, так сказать, цветочки для сисадминов, которые, как известно, хоть и super, но все-таки юзеры. Но все-таки хотелось бы не тырить софт Venturcom ценой 1500 зеленых, а честно его порвать и реконструировать. Поэтому любой нормальный хацкер должен срочно закатать все, чего там у него закатывается, и наваять OpenBXP, работающий под Linux и другими системами. В целях портабельности я бы выбрал Java или Perl - заодно получится компактный и структурированный исходный код.
Несколько наводящих подсказок. Первое, что мы уже и сделали, это использовали альтернативный сервер DHCP, то есть эта компонента у нас уже Open. Точно так же и TFTP- и PXE-серверы являются чем-то совершенно от BXP не зависимым. Учитывая, что и PXE, и BOOTP представлены хоть и бесплатными, но все-таки принадлежащими 3Com, серверами, я рекомендовал бы просто игнорировать эти варианты загрузки (хотя бы временно, до лучших времен). Кстати, если вы настроили DHCP так, как показано в этой статье, то вам эти сервисы, что называется, однозначно не упираются - я их даже не стартовал.
В качестве шага к светлому будущему я предпринял установку бесплатного Solar Windows TFTP Server v.6.0, переписал в его каталог C:\TFTP-Root файл VLDRMI13.bin, после чего спокойно положил сервис BXP TFTP - и все продолжало работать как ни в чем не бывало (ну, за исключением лагов "TFTP Timeout", которые фиксировал Solar TFTP - но загрузке это не мешало, да и кто знает, как там работал BXP TFTP, я в его логи не вдавался).
Итак, осталось четыре сервиса, которые воленс-ноленс придется реконструировать, поскольку падение любого из них мгновенно делает сетевую загрузку невозможной. Исследование закладки General дает нам следующие соответствия имен файлов (в каталоге C:\Program Files\Venturcom\BXP\) и сервисов:
BXP Adaptive Boot Service | BNAbs.exe | 48 Кб |
BXP IO Service | VLDIOS.exe | 200 Кб |
BXP Login Service | VLDLS.exe | 209 Кб |
BXP Write Cache I/O Service | BNWclos.exe | 40 Кб |
Кроме того, придется разобраться с клиентскими модулями: модулем BNClient размером 24 Кб, драйвером BXP Miniport SCSI Virtual Adapter (копии всех используемых файлов лежат в C:\WINNT\System32\BNTemp, 107 Кб) и самым ужасным файлом - VLDRMI.bin.
Ужасен этот файл не столько своим небольшим размером (всего 22 Кб, половина из которых - диагностические сообщения, однородные массивы и сообщения об ошибках), сколько полным отсутствием знакомых ориентиров вроде системных вызовов, поскольку на момент загрузки он работает в среде PXE bre-boot-OS, где, естественно, доступны какие-то системные вызовы, например BIOS, в том числе сетевые PXE, но, как это работает, придется изучать с нуля. Для дизассемблирования помогут такие подсказки:
- сначала сверните строки в конце текста и однородные массивы по всему тексту - из-за неизвестной точки входа это не делается автоматически;
- данные процедуры по соглашению кодеров vldrmi находятся за телом этой же процедуры, и, поскольку все происходит в одном сегменте, адресация таких "локальных переменных" часто осуществляется через CS;
- выравнивание кода - по границам двойных слов, так что пару нулей часто означает границы процедур;
- типичный пролог процедур: 66h, 60h, 6h, 1Eh - что в терминах ассемблера выглядит как:
- или что-то в этом роде, после нескольких удачных попаданий остальные процедуры найдутся сами.
Есть еще небольшая наводка по поводу "где лежат параметры, которые изменяются в процессе настройки". Есть такая простая утилита fc (типа File Compare) - сделав копию с образа и изменяя параметры, можно обнаружить следующее (флажки 57C8-57C9 - последние байты в файле):
* | Verbose Mode | No | Yes |
[0013] | 00 | 80 | |
[57C8] | A7 | 27 | |
* | Subnet Mask | bytes [2C-2D-2E-2F] | маска подсети, первые байты старшие |
No | Yes (установлены ненулевые значения) | ||
[57C8] | 4A | 27 | |
[57C9] | 0B | 0F | |
* | Default Gateway | bytes [30-31-32-33] | адрес маршрутизатора, первые байты старшие |
No | Yes (установлены ненулевые значения) | ||
[57C8] | 29 | 27 | |
[57C9] | 0C | 0F | |
* | Login Servise | bytes [34-35-36-37] | адрес сервера |
word [38-39] | порт сервера | ||
No | Yes (установлены значения, отличные от "по умолчанию") | ||
[57C8] | 10 | 27 | |
[57C9] | 0D | 0F |
Решив ее, вы немедленно станете героем дня, многие конторы мира начнут вас хотеть, а вы сами сможете создать вокруг себя движение - в общем, варианты на выбор. А остальные пусть очередной раз переписывают свое резюме, каждому, как говорится, свое.