Я думаю, что люди прочитавшие заголовок этой темы, скажут "есть проверенный средства WDK и С++" но увы в моей голове не так много места что бы осваивать очередные абстракции, которыми так полон мир программирования. В моих силах писать программы под единственный компилятор Fasm. Но он предоставляет отладочные символы в виде расширения .fas . Этот формат удалось скормить IDA PRO , я надеялся на появление драйверных структур, а он всего лишь назвал метки. Отлаживая драйвер с помощью WinDbg мы видим такую картину: возможно ли перейти от просто значений в памяти к удобоваримой структуре? например как здесь--> Может как то самому можно вбить эти структуры вручную или скачать где нибудь. Например в IDA PRO можно добавлять структуры самому, но вот стандартных структур связанных с отладкой драйверов я в ней не нашёл. Можно переключить отладку на IDA PRO с предварительно загруженным файлом драйвера. Но появляется другая проблема. Почему-то в ней нельзя прочитать память связанную с работой драйвера.----> Получается единственны вариант, рассматривать структуры в виде обычных hex значений в WinDbg, что крайне не удобно ввиду того что они просто гиганские.
В IDA PRO <натягивание структуры> происходит следующим образом. На вкладке Structure жмём кнопку Ins и выбираем стандартную или создаём свою. Потом выбираем адрес в IDA view-A и в меню Edit--->Struct--->Struct var (Alt+Q). И любые данные или код можем уже интерпретировать как структуру. В WinDbg как я понял самому добавить структуру нельзя, он её получает из файлов .pdb. В окне регистра за самим значением регистра стоит стрелочка, в варианте когда она серенькая, этой памяти для него как бы не существует. Не какие переходы по адресам просто не работают, например на прыжок по этому адресу происходит jmp fail, а когда жмёшь правой кнопкой, как в User mode, контекстное меню не показывает не одной строчки, как либо связанной с просмотром этой памяти.
CrawlUp, Да просто всё. Примитивная и забавная задача для тех, кто знает архитектуру и инструменты. Но вы ньюби и понятия не имеете как там это всё устроено. Соотвественно начался разбор полётов" - каждых ваших движений в ос и отладчике. Это уже всем давно надоело. Открывайте спецификацию и изучайте.
не единственный берете адрес далее пишете (при загруженных символах): dt nt!_PEB 0x00000000 вместо нулей ваш адрес подставляете
Сомневаюсь что в видео есть какой-то смысл, но выложу вдруг кому-то поможет. За количество набитых постов что-то можно получить?
В Ida Pro проблема заключается в отсутствие загруженного модуля в памяти. Ida не создаёт сегмент для дезассемблируемого модуля. По этому не какие обращения к этой памяти невозможны. Я пробывал самостоятельно создавать сегмент, он создаётся с неадекватными значениями сегментных регистров(FFFF) и доступ к нему всё равно невозможен. И соответственно загрузить в него бинарный файл тоже нельзя. Этих проблем нет в WinDbg но там неясно как работать со структурами, если надо дописывать какие либо модули, то это точно не мой уровень. Сколько я не пытался так и не смог найти хоть один работающий драйвер x64 написанный на Fasme. А искать ошибки в существующих не получается ввиду вышеобозначенных трудностей. Вот видео отсутствующего сегмента: не хочу накалять обстановку
Забросил Ida pro подальше, начал разбираться с windbg. Работающие драйверы на Fasme под win64 зверь довольно редкий, но один из текстов всё же удалось обнаружить. https://github.com/SamLarenN/ReadWriteDriver_x64_Asm/blob/master/x64 Driver/64bitDriver.ASM С его помощью и книги Аблязова Р. удалось написать свой. Вдруг найдутся люди которым эта тема будет интересна, по этому выкладываю сюда. Строго рекомендуется для просмотра текста использовать Sublime Text форматирование tab 4. Тогда вы сможете не утонуть в навигации многострочного текста. Для программ на ассемблере это актуальная проблема. В Sumlime Text должно всё выглядеть так: Программа запускается под win10 и возможно под другими windows (надо перезайти в режиме не подписанных драйверов) , лучше запускать на виртуальной машине. Программа состоит из: запускного файла - GetIDT_64.exe запускает сервис GetIDT (не забудьте его удалить из реестра [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\GetIDT], если что-то пошло не так) и отображает адреса таблицы в list view. файла драйвера - IDT_DUMP_64.sys драйвер производит сохранение в буфер таблицы IDT, на сколько я понял для каждого процессора своя таблица, тут сохраняется только для одного. dll - MyGetLastError64 out_rax.DLL можно легко убрать из программы, нужна на этапе создания для борьбы с ошибками Инклудники все написаны для моего компьютера, для перекомпиляции придётся исправлять.