считать серийный номер акб

Тема в разделе "WASM.BEGINNERS", создана пользователем manefa, 26 дек 2023.

  1. manefa

    manefa New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2010
    Сообщения:
    17
    краткое описание акб:
    акб собран на DS2438 Smart Battery Monitor и DS2433 4k-Bit EEPROM.
    в EEPROM таблица векторов, её размер по адресу 41h, начало 42h,
    количество векторов зависит от типа акб, их 13-17, неиспользуемые заполняются FFh.
    все поля данных начинаются с длинны и заканчиваются контрольной суммой,
    кроме четвёртого, в нём кс нет.
    второе поле начинается с двух волшебных байт, они с переворотом записаны в пользовательскую
    область DS2438. в первом поле ещё один волшебный байт, все три этих волшебных байта жёстко
    привязаны к серийному номеру DS2433 и из них-как то получается серийный номер акб.

    фирменное по для этих акб IMPRES Battery Data Reader Software, в нём есть все эти алгоритмы.
    адреса серийника, модели и химии 597E38, 597E3С и 597E4С, но вот как они туда попадают у меня найти не получилось.
     
    q2e74 нравится это.
  2. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.956
    Поле серийника 1032, химия 1044, модель 1035. Остается поставить пару бряков на GetDlgItem и SetWindowsTextW. Скорей всего шлет драйверу запросы TMTouchByte и TMTouchBit, либо ReadCOM и WriteCOM, возможно это даже голый обмен с устройством (учитывая куцость драйвера). Правда это почти наверняка никак не поможет с поиском идентов в еепроме, потому что это всего лишь интерфейс устройства и искать надо в прошивке.
     
    Mikl___ и q2e74 нравится это.
  3. manefa

    manefa New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2010
    Сообщения:
    17
    Приветствую, спасибо за быстрый ответ! Модель это самое простое, она в ascii в открытом виде в 0fh поле данных eeprom, с химией тоже особых проблем возникнуть не должно, либо дамп с акб найдётся или я просто найду перебором, эмулятор обоих чипов у меня есть.
    >Поле серийника 1032
    я знаю, вот код вывода на экран, туда он переписывается из 597E38h, вопрос немного в другом, как найти куда читаются сырые данные или наоборот откуда взялись готовые.

    .text:00404985 mov edi, [ebp+hWnd]
    .text:00404988 mov esi, ecx
    .text:0040498A lea eax, [esi+1A68h] ; указатель на буфер с серийником для вывода на экран
    .text:00404990 push eax ; int
    .text:00404991 push 408h ; int
    .text:00404996 push edi ; CDataExchange *
    .text:00404997 call ?DDX_Text@@YGXPAVCData......
     
    q2e74 нравится это.
  4. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.956
    Разные есть способы. Тебе повезло, что указатель формируется из базового адреса и достаточно большого смещения в какой-то структуре, можно просто найти все константы 0x1A68 и расставить там бряки.
     
    q2e74 нравится это.
  5. manefa

    manefa New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2010
    Сообщения:
    17
    это ничего не даст, я и так знаю как серийник попадает в буфер для вывода на экран

    .text:004056E1 push offset dword_597E38 ; буфер с серийником
    .text:004056E6 lea ecx, [edi+1A68h]; указатель на буфер с серийником для вывода на экран
    .text:004056EC call sub_402060

    upd: я не нахожу кода который бы что то складывал в 597E38, или это делается нетривиально
     
  6. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.956
    Ну если уверен, что ничего не даст, наверное хорошо в этом разбираешься. Из инструментария у тебя есть бряки на память/хардварные на обращение к ней, просмотр листинга задом наперед (на предмет откуда берется базовый адрес) и следуя адресами возврата в предыдущую процедуру, перезапуская программу и наблюдая в какой момент в структуре появились эти данные. И наконец можно найти решение творчески, например в интерфейсных библиотеках в папке с программой есть отладочные сообщения, все они обычно передаются одной процедуре, поставив бряк в которую (условный/со счетчиком) можно поймать вывод нужного и проследить как данные, которые процедура вернула, обрабатываются.
     
    q2e74 нравится это.
  7. manefa

    manefa New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2010
    Сообщения:
    17
    творчески... да, программа умеет скидывать сырые данные данные в текстовый файл, можно попробовать поскать откуда она их берёт. спасибо за идею))
     
  8. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    861
  9. manefa

    manefa New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2010
    Сообщения:
    17
    получилось найти сырые данные, программа выгребает 1, 2 и 3 байты серийника DSки...
    нужен совет по IDA, есть ли какой-то способ сопоставить абсолютные и относительные адреса? добавить каменты например, или как вы это вообще делаете? само собой хорошо бы автоматический поиск, а то вот такие вещи невероятно затрудняют поиски и находятся интуитивно

    .text:00411897 mov eax, [edi+46Ch] ; указатель на адрес с серийником DS
    .text:0041189D mov cl, [eax+1]
    .text:004118A0 mov dl, cl
    .text:004118A2 and dl, 0Fh
    .text:004118A5 mov byte_597D25, dl

    .text:00416BEC mov eax, dword_59829C ; указатель на адрес с серийником DS
    .text:00416BF1 mov cl, [eax+1]
    .text:00416BF4 mov dl, cl
    .text:00416BF6 and dl, 0Fh
    .text:00416BF9 mov byte_597D25, dl
     
  10. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.956
    Edi это первый аргумент процедуры, в 3 из 4 ее вызовов это один и тот же абсолютный адрес. Строго оно при статическом анализе не сопоставляется. Ручками конечно можно для удобства объявить, но не припомню чтобы в иде был солвер и она такое умела. Гидра может:
    изображение_2023-12-26_182918284.png