Хочу отреверсить драйвер USBSTOR.SYS из Windows7 SP1.

Тема в разделе "WASM.BEGINNERS", создана пользователем algent, 11 апр 2018.

  1. algent

    algent Member

    Публикаций:
    0
    Регистрация:
    11 апр 2018
    Сообщения:
    101
    Интересуют ограничения по MaximumTransferLength в STORAGE_ADAPTER_DESCRIPTOR.
    Не пинайте если чё. Я не профи-реверсёр. Много реверсил i51 в 90х, ну ещё чуток x86 в нулевых.
    С новым инструментом совсем не знаком, прошу подсказать.
    Вопросы: 1. Конечно, едва ли, но вдруг он уже есть в исходниках или типа того??
    В WDK видел Storage библиотеки и сэмплы, но имхо, придётся именно реверсить.
    2. Иначе, подскажите плз, простой и бесплатный софт + утилиты, дающие дизасм-листинг с
    с именами функций из MSDN. Вероятно, это фантастика? Повторюсь, я чуток выпал из темы.
    Если последнее возможно и есть из чего выбрать, нужна возможность, сохранить листинг в обычный текстовый файл -
    придётся долго и нудно изучать, а комп не всегда под рукой. Отладка пока не нужна.
    Новый Hiew(и т.п.) даст листинг с человеческими именами вызовов?
    Лежит где-то древняя версия, на винте в 4ГБ :))).
    3. Реально ли избежать работу с IDA? Древняя версия где-то лежит, но блин....
    На форуме не нашёл подходящего FAQ по теме. Киньте ссылку плз, если в моей задаче всё сложно и надо многобукав.
    Заранее СПАСИБО.
     
  2. Коцит

    Коцит Active Member

    Публикаций:
    0
    Регистрация:
    31 янв 2017
    Сообщения:
    130
    >>> простой и бесплатный софт + утилиты, дающие дизасм-листинг с именами функций из MSDN. нужна возможность, сохранить листинг в обычный текстовый файл. Отладка пока не нужна.
    -----------------
    по-ходу любой из 'дасмов это может: 'W32Dasm, HDasm'.
    для сброса в файл, мышей указываешь на начальную строку, и с шифтом отмечаешь последнюю.

    >>> Новый Hiew даст листинг с человеческими именами вызовов?
    -----------------
    HIEW-8.43 - сначала[F8], ..потом[F7] для просмотра импорта, или [F9] для экcпорта.
    после этого в окне дизасма появляются "человеческие имена":

    hi1.gif
     
  3. algent

    algent Member

    Публикаций:
    0
    Регистрация:
    11 апр 2018
    Сообщения:
    101
    Ух, СПАСИБО. По правде, не ожидал, что все так удобно и комфортно.
     
  4. unc1e

    unc1e Active Member

    Публикаций:
    2
    Регистрация:
    28 июл 2017
    Сообщения:
    287
    ида вам более подойдет, там все просто для быстрого старта
     
  5. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.090
    да, чичаЗЪ более, чем удобно == прогонку можно под виртой делать, а во времена софтайса о таком тока мечтать можно было :)))
     
  6. algent

    algent Member

    Публикаций:
    0
    Регистрация:
    11 апр 2018
    Сообщения:
    101
    Боюсь увлечься:)). Реверсинг всегда был в самый кайф, но боюсь, превратить его в серьёзное дело, слишком не просто.
    Это у меня этакий непредвиденный комбэк. Посмотрю как пойдёт, пока всё выглядит как маленькая задачка, но может и иду придётся задействовать:).
     
  7. FoxB

    FoxB Member

    Публикаций:
    0
    Регистрация:
    10 июл 2003
    Сообщения:
    109
    Ну а если начать с теории? покурить Universal Serial Bus Mass Storage Class Specification Overview Revision 1.2 или Universal Serial Bus Mass Storage Class UFI Command Specification Revision 1.0
     
  8. FoxB

    FoxB Member

    Публикаций:
    0
    Регистрация:
    10 июл 2003
    Сообщения:
    109
    Это наверно MaximumTransferSize, что отдает клиент хосту

    The driver specifies these pipe characteristics when it selects the configuration of a USB device with a URB request whose function type is URB_FUNCTION_SELECT_CONFIGURATION.

    The MaximumPacketSize value is derived from the first 11 bits of the wMaxPacketSize field of the endpoint descriptor, which indicates the maximum number of bytes that the host controller can send to or receive from the endpoint in a single transaction.
    Typically, for high-speed transfers, the host controller sends or receives one transaction per microframe. However, high speed, high bandwidth isochronous or interrupt endpoints support higher data rates through additional transactions. This allows the host controller to transfer up to 3072 bytes in a single microframe. The number of additional transactions supported by that type of endpoint is indicated by bits 12..11 of wMaxPacketSize (least significant bit is 0). That number can be 0, 1, or 2. If 12..11 indicate 0, additional transactions per microframe are not supported by the endpoint. If the number is 1, then the host controller can send an additional transaction (total of two transactions per microframe); 2 indicates two additional transactions (total of three transactions per microframe).
    The value received in MaximumPacketSize for an isochronous endpoint (high-speed and high-bandwidth) indicates the total number of bytes that the host controller can send to or receive from the endpoint in one microframe. The value includes the number of bytes in additional transactions, if the endpoint supports them. For example, consider the following isochronous endpoint characteristics:
    • wMaxPacketSize is 1,024
    • Bits 12..11 indicate 2
    • Interval is 1.
    In the preceding example, the value received in MaximumPacketSize is 3,072 bytes (Total transactions * wMaxPacketSize). Because Interval is 1, the polling period is 1. Thus, the host controller can transfer 3,072 bytes in each microframe of a frame. In a single I/O request (described in one URB), the host controller can transfer no more than 24,576 bytes.
    Код (C):
    1. typedef struct _USBD_PIPE_INFORMATION {
    2.   //
    3.   // OUTPUT
    4.   // These fields are filled in by USBD
    5.   //
    6.   USHORT MaximumPacketSize;  // Maximum packet size for this pipe
    7.   UCHAR EndpointAddress;  // 8 bit USB endpoint address (includes direction)
    8.   // taken from endpoint descriptor
    9.   UCHAR Interval;  // Polling interval in ms if interrupt pipe
    10.  
    11.   USBD_PIPE_TYPE PipeType;  // PipeType identifies type of transfer valid for this pipe
    12.   USBD_PIPE_HANDLE PipeHandle;
    13.  
    14.   //
    15.   // INPUT
    16.   // These fields are filled in by the client driver
    17.   //
    18.   ULONG MaximumTransferSize; // Maximum size for a single request in bytes.
    19.   ULONG PipeFlags;
    20. } USBD_PIPE_INFORMATION, *PUSBD_PIPE_INFORMATION;
     
  9. algent

    algent Member

    Публикаций:
    0
    Регистрация:
    11 апр 2018
    Сообщения:
    101
    Так это всё я уже почти наизусть знаю:). Прошу прощения, что сразу не описал задачу подробнее - просто подумал, что это никому не интересно.
    Дело в следующем: я разрабатываю USB девайс, довольно узко-специализированного назначения, это по сути, измерительное устройство. И уже довольно давно, он использует LibUSB драйвера. Они очень-очень хороши, но и у них есть пара недостатков: во-1х, их нет на андроиде. А ведь очень заманчиво, запускаться на смарте за 40$, или дешовом планшете - лишь бы был USB OTG. Во-2х, LibUSB драйвера, требуют установки. И не поверите, но есть люди, для которых, проблема установить эти драйвера. А так называемые "стандартные USB классы", реализованы(их драйверы), почти везде, на всех системах, и даже на дешовых смартах/планшетах. Их больше десятка разных, но самый известный USB mass storage class. Его драйверы загружаются(сами!!!, прозрачно для пользователя) при работе с флешками, USB дисками и т.п. Вот и я реализовал этот класс в своём девайсе, ну типа заставил его притворяться флешкой. Но вылезла проблема: USB mass storage class, идеален для работы с данными, которые уже хранятся где-то. И можно не спешить их читать. Их можно читать даже маленькими блоками. И в моём дивайсе, я без проблем читаю данные, которые хранятся в SDRAM. Но у меня есть режим, типа режима самописца, данные идут потоком 24МБ в секунду, постоянно, это типа "живые данные". И недопустимы перерывы в передаче данных, даже в микросекунду, в течении секунд/минут/да хоть часов - на сколько места на винте хватит. Им нельзя сказать: "Вы тут подождите, мне тут надо сформировать врэппер статуса, отправить его на хост, потом дождаться нового врэппера команды, и вы(т.е. данные) снова будуте передаваться". Universal Serial Bus Mass Storage Class Specification это вообще уродец ещё тот, мало того, что там нет, говоря языком электронщиков - интерлива(или языком программеров - буферизации), там вообще 1 входной эндпойнт делится данными и статусом и 1 выходной, делится данными и командами. Единственный выход, это увеличить тот самый MaximumTransferLength(это максимальный размер передаваемого блока) - это поле в структуре STORAGE_ADAPTER_DESCRIPTOR, эта структура описывает характеристики USB адаптера хоста. Увы, правильные и педантичные англосаксы, не могли себе представить, что можно захотеть заставить кастомный девайс, мимикрировать под флешку. И как результат, до Win7 SP1, максимальный размер передаваемого блока, был 64К. Потом MS, через дворд-запись в реестре, разрешил поднять размер блока до 2М. Но мне этого мало, я собираюсь его увеличить до гигов. Я перебрал все стандартные USB классы, от стилл имаж, он же PTP, до видео класса, но всё не то, надо юзать USB mass storage class. И менять код в usbstor.sys В принципе, тема очень скользкая, я сам не знаю, можно ли предлагать покупателям, подменять оригинальный драйвер, каким-то "левым, подозрительным". Но имхо, в 200 слов, можно научить, как пользоваться командой fc(file compare) и Hiew, и популярно объяснить, как проверить, убедиться в отсутствии заподлянок и успокоиться. Просто, когда девайс, сразу, без установки драйверов, готов работать везде, имхо, это стоит трудов. И конечно, есть надежда когда-нибудь убедить MS, легализовать такой патч. Только вот я чего-то, после регистрации, даже разместить свой вопрос на этом форуме не смог :nea: https://social.msdn.microsoft.com/F...10write10-maximum-length-on-windows?forum=wdk Целый день пытался создать там тему, наверно санкции:).
     
  10. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.090
    чё-т я тебя не понял == вроде, ты про андроид и, по идее, сорцы там открытые. а под вынь всё же лучше написать отдельный дравер: в лицухе выни написано, что реверсинг запрещён.
    а что тебе мешает сделать установщик более удобным для юзьвера 777
     
  11. algent

    algent Member

    Публикаций:
    0
    Регистрация:
    11 апр 2018
    Сообщения:
    101
    Пардон за задержки в ответах, проблем щас, просто пипец... :dntknw:.
    Ну в принципе, можно так, сяк и этак. Это иногда и вопрос вкуса. Я например, поддерживаю старые версии, есть код чтобы работать из под Wine и т.п. Ничего сложного, но чисто психологически, меня сильно плющит от такого разнообразия. А под андроид, я пока и не мечтаю о полном функционале. Имхо, пока MSD самое лучшее.
    Врядли можно написать что-то лучше, чем LibUSB. Я вообще-то, очень сильно зауважал эти драйвера, имхо, они совершенны. Почти:). Я уже писал, почему ухожу от них. Точнее, как опция, я планирую их оставить конечно. Ну а лицуха выни...... :). Вот бы это всё покупателей не волновало, это было бы здорово. Будет выбор. А я переживу как-нибудь :).
    Хм, это половинчатое решение. Может быть и стоит, ведь как вариант, я LibUSB оставлю. Но хочется, чтобы каждая из альтернатив была удобной и сейчас мои мысли прежде всего о mass storage.
     
  12. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.090
    algent, одна из острейших проблем современной софтины стала невозможность нормальной работы в "белом" режиме (то бишь с соблюдением лицух). поэтому сейчас нарастает движуха с созданием "серых" форков/решений. Ты описал реально "серое" решение, тч добрый тебе совет == не светись на сайте мокрых с интересными своими вопросами :secret::grin:
     
  13. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.090
    разве размер блока не имеет физ. ограничений 777
     
  14. algent

    algent Member

    Публикаций:
    0
    Регистрация:
    11 апр 2018
    Сообщения:
    101
    Очень интересно. Про это не слышал. Здесь это можно открыто обсуждать, или тоже нужны предосторожности? Если что - bortsoff@gmail.com. Для меня конечно важно решить свои проблемы. Но без серьёзных причин, не хочу гадить на чужую малину. Хотя бы тех же мокрых или кого то ещё. Но уверен, если уже есть(или создать) умная, организованная, мощная сила, то и с ними можно найти компромисс. Впрочем, то о чём ты сказал, как-то слишком ново для меня, надо будет переварить :).
    На стороне девайса легко выдать и непрерывный поток. На стороне хоста, например с LibUSB, эта задача уже давно решена и хорошо работает. С mass storage, пока не знаю. Возможно надо вообще переписать кусок драйвера. В реестре ессно, можно указать любое 4х байтное значение, даже огромное. И когда запрашиваешь свойства адаптера, DeviceIoControl возвращает именно число записанное в реестре. Но больше 2МБ, не передаёт. Возможно, есть ещё одно сравнение, помимо сравнения с двордом из реестра, и его надо заблокировать. А возможно, железо адаптера вообще не способно слать блоки больше 2МБ, этого я пока не знаю. Тогда надо будет повозиться. Пока успел только мельком просмотреть драйвер в текстовом формате, тот самый адрес MaximumTransferLength в реестре, в конце файла, сразу бросается в глаза:). Надеюсь сегодня найду время ещё покопаться.
     
  15. algent

    algent Member

    Публикаций:
    0
    Регистрация:
    11 апр 2018
    Сообщения:
    101
    Уважаемые, подскажите, сколько стоит решение такой задачи?
    И вообще, существует ли более-менее сложившийся рынок подобных услуг?
    Возможно, примерный расценки здесь известны и их можно озвучить?
    Хотя бы кол-во цифр и в какой валюте...
    Или же, подобные задачи редкость и вопрос цены - чисто как повезёт??
     
  16. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    269
    не уверен, что понятие как повезёт это меньше 5к зелени
     
  17. algent

    algent Member

    Публикаций:
    0
    Регистрация:
    11 апр 2018
    Сообщения:
    101
    Понял, спасибо.
    А существуют ли классные реверсёры с хорошим знанием английского? Как обстоят дела у буржуев?
    Там рынок таких услуг существует?
    И особо интересно с точки зрения закона, мы все не читая, соглашаемся с условиями лицензии...
    А если распространять модифицированные драйвера, за это светят финансовые санкции, или это уголовка - типа реального срока? И соотв-но, нельзя даже нос высунуть за пределы России??? Понятно, что юристов здесь нет, но может кто уже находил ответ на этот вопрос? Поделитесь, плз, если так. ИМХО, трюков и отмазок можно придумать много, но надо знать - реальная опасность хоть есть?
     
  18. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.549
    Адрес:
    Russia
    algent, реверсеров достаточно много хороших и в России. тут весь вопрос в количестве денег и то какими путями вы их заплатите. А все что связано с лицензией и ее нарушением- будет висеть на вас. Реверсер покажет вам где патчить и какие байты. Сам по себе патчер (буть это ехе или батник) - просто программа и иметь ее на носителе информации - ненаказуемо. Но вот за использование и то - как использовано - тут другой разговор. По этому сам реверсер ничем не рискует.
     
    Mikl___ и Indy_ нравится это.
  19. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    269
    Особенно если принимает оплату в битках
     
  20. algent

    algent Member

    Публикаций:
    0
    Регистрация:
    11 апр 2018
    Сообщения:
    101
    Я почему про буржуев спросил:
    Реверсёры это просто люди, талантливые одиночки(чаще), не сильно склонные к совместным действиям. Имхо, у нас во всяком случае. Было бы здорово увидеть то, что называется экосистемой, ну хотя бы в упрощённой версии, в виде сетевого ресурса. Как место, предлагающее всё-всё-всё для жизни реверсёра, не только обмен опытом и случайные заказы от редких, нестандартно мыслящих заказчиков. Но и обсуждение юридических тонкостей, совместная защита от маразмов нашей жизни, мощный промоушен не просто услуг, а самого подхода, имеющего потенциал для сильного роста и захвата новых сфер и территорий. И т.д.
    Имхо, у буржуев должны быть такие площадки, потому и спрашиваю.
    Сама тема реверсинга находится под пристальным вниманием людей в погонах, но например мой вопрос, вроде выглядит легальным и даже общественно полезным. Это надо будет уточнить. И такие вопросы могут быть у сотен, они могут обелить, легализовать и даже крышевать более скользкие темы. Поэтому, где-то, такое точно есть, ну или однажды появится. Если кто-то встретит такой ресурс в сети, ПЛЗ, киньте сюда ссылку.