Fasm, отладка драйвера без отладочных символов.

Тема в разделе "WASM.NT.KERNEL", создана пользователем CrawlUp, 19 мар 2018.

  1. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    90
    Я думаю, что люди прочитавшие заголовок этой темы, скажут "есть проверенный средства WDK и С++" но увы в моей голове не так много места что бы осваивать очередные абстракции, которыми так полон мир программирования. В моих силах писать программы под единственный компилятор Fasm. Но он предоставляет отладочные символы в виде расширения .fas . Этот формат удалось скормить IDA PRO , я надеялся на появление драйверных структур, а он всего лишь назвал метки.
    Отлаживая драйвер с помощью WinDbg мы видим такую картину:
    [​IMG]

    возможно ли перейти от просто значений в памяти к удобоваримой структуре? например как здесь-->

    [​IMG]

    Может как то самому можно вбить эти структуры вручную или скачать где нибудь.
    Например в IDA PRO можно добавлять структуры самому, но вот стандартных структур связанных с отладкой драйверов я в ней не нашёл.
    Можно переключить отладку на IDA PRO с предварительно загруженным файлом драйвера. Но появляется другая проблема. Почему-то в ней нельзя прочитать память связанную с работой драйвера.---->
    [​IMG]

    Получается единственны вариант, рассматривать структуры в виде обычных hex значений
    в WinDbg, что крайне не удобно ввиду того что они просто гиганские.
     
    Последнее редактирование: 19 мар 2018
  2. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    90
    В IDA PRO <натягивание структуры> происходит следующим образом. На вкладке Structure жмём кнопку Ins и выбираем стандартную или создаём свою. Потом выбираем адрес в IDA view-A и в меню Edit--->Struct--->Struct var (Alt+Q). И любые данные или код можем уже интерпретировать как структуру. В WinDbg как я понял самому добавить структуру нельзя, он её получает из файлов .pdb.
    В окне регистра за самим значением регистра стоит стрелочка, в варианте когда она серенькая, этой памяти для него как бы не существует. Не какие переходы по адресам просто не работают, например на прыжок по этому адресу происходит jmp fail, а когда жмёшь правой кнопкой, как в User mode, контекстное меню не показывает не одной строчки, как либо связанной с просмотром этой памяти.
     
  3. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    CrawlUp,

    Да просто всё. Примитивная и забавная задача для тех, кто знает архитектуру и инструменты. Но вы ньюби и понятия не имеете как там это всё устроено. Соотвественно начался разбор полётов" - каждых ваших движений в ос и отладчике. Это уже всем давно надоело. Открывайте спецификацию и изучайте.
     
  4. Fail

    Fail Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2012
    Сообщения:
    503
    В принципе так же можно отвечать на любую тех. тему:dance3:
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    не единственный
    берете адрес

    далее пишете (при загруженных символах):

    dt nt!_PEB 0x00000000

    вместо нулей ваш адрес подставляете
     
    CrawlUp нравится это.
  6. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    90
    Сомневаюсь что в видео есть какой-то смысл, но выложу вдруг кому-то поможет. :)

    За количество набитых постов что-то можно получить?
     
  7. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    90
    Всё это не работает, там дело в чём то другом :dntknw:
     
  8. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    CrawlUp,
    расшифруйте...
     
  9. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    90
    В Ida Pro проблема заключается в отсутствие загруженного модуля в памяти. Ida не создаёт сегмент для дезассемблируемого модуля. По этому не какие обращения к этой памяти невозможны.
    Я пробывал самостоятельно создавать сегмент, он создаётся с неадекватными значениями сегментных регистров(FFFF) и доступ к нему всё равно невозможен. И соответственно загрузить в него бинарный файл тоже нельзя.
    Этих проблем нет в WinDbg но там неясно как работать со структурами, если надо дописывать какие либо модули, то это точно не мой уровень.
    Сколько я не пытался так и не смог найти хоть один работающий драйвер x64 написанный на Fasme. А искать ошибки в существующих не получается ввиду вышеобозначенных трудностей.

    Вот видео отсутствующего сегмента:


    :) не хочу накалять обстановку
     
  10. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    90
    Забросил Ida pro подальше, начал разбираться с windbg. Работающие драйверы на Fasme под win64 зверь довольно редкий, но один из текстов всё же удалось обнаружить. https://github.com/SamLarenN/ReadWriteDriver_x64_Asm/blob/master/x64 Driver/64bitDriver.ASM С его помощью и книги Аблязова Р. удалось написать свой. Вдруг найдутся люди которым эта тема будет интересна, по этому выкладываю сюда.

    Строго рекомендуется для просмотра текста использовать Sublime Text форматирование tab 4. Тогда вы сможете не утонуть в навигации многострочного текста. Для программ на ассемблере это актуальная проблема. В Sumlime Text должно всё выглядеть так:
    [​IMG]

    Программа запускается под 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
    можно легко убрать из программы, нужна на этапе создания для борьбы с ошибками
    Инклудники все написаны для моего компьютера, для перекомпиляции придётся исправлять.
     

    Вложения:

    • GetIDT_64.zip
      Размер файла:
      127,6 КБ
      Просмотров:
      517
    • GetIDT_64.rar
      Размер файла:
      118,1 КБ
      Просмотров:
      521
    Коцит и Mikl___ нравится это.