Дезассемблирование JF-Tool

Тема в разделе "WASM.RESEARCH", создана пользователем wint, 31 мар 2006.

  1. wint

    wint New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2006
    Сообщения:
    66
    Доброго всем времени суток.



    Такая проблема: Есть флешка JetFlash к ней в комплекте идет пакет программ-утилит. В частности утилитка, создающая "закрытую" паролем область на флешке.

    Работает она по следующему алгоритму:

    1.Вставляем флешку, Windows монтирует "открытую" область.

    2.Запускаем программу, вводим пароль и жмем "ОК"

    3.Программа оотключает "открытую" область и монтирует "закрытую"...



    Путем перехвата данных с USB-порта удалось установить что пароль передается с флешки в открытом виде... Никаких дополнительных файлов на диске не создается... BootSector и FAT ничего подозрительного не содержат... При введении пароля срабатывает точка останова на ReadFile(правда как-то не всегда...)



    Задача: Найти место на флешке(физическое) где ентот самый пароль лежит(ведь где-то он есть=)) Буду рад любой информации по теме...



    P.S. Где-то здесь на форуме был исходник проги "клонирующей" USB-flash... Я снял копию этой прогой и "прошелся" по ней поиском ASCI строк, пароль не нашел...
     
  2. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    А если тем же самым WinHex'ом попробовать? Им и поискать потом можно нужную строку.
     
  3. Bozar

    Bozar New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    24
    не факт что её можно будет найти в ASCII представлении, наверняка применяются какие-то алгоритмы. попробуй использовать плагин kanal в PEid.
     
  4. ECk

    ECk Member

    Публикаций:
    0
    Регистрация:
    9 апр 2004
    Сообщения:
    454
    Адрес:
    Russia
    Пароль не хранится на диске вообще - читай

    ATA/ATAPI Security features set. (подробнее на www.t13.org - Technical Committee T13 AT Attachment)

    В особенности для флешек там масса функций имеется.

    Пароль там устанавливается на аппаратном уровне, может устанавливаться максимально доступный без пароля адрес, может лочиться после трех попыток ввода неверного пароля или замерзать (тоже после трех попыток ввода неверного пароля).

    Куча реализаций имеется также для обычных дисков - например:

    http://www.fitzenreiter.de



    The ATASX BIOS ROM provides the "ATA Security Feature Set" which

    most modern SATA, ATA/IDE hard disks (HDDs) support but the most PC BIOS do not.



    While booting ATASX can

    + unlock already locked HDDs with the correct user password

    (automatic and manual entering)

    + also freezes the SATA, ATA security functions on unlocked ATA HDDs.



    ЗЫ Если описываемая программа использует ATA Security features, пароля в открытом виде ты не найдешь. Правда, там по стандарту может быть Master Password, который дает возможность сброса User Password.
     
  5. wint

    wint New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2006
    Сообщения:
    66
    1.WinHex был опробован - не прокатило...

    2.Э... Я в английском не селен... Но из того что ты сказал суть улавливаю... Приминительно к моей ситуации пароль не блокирует диск... Кол-во попыток не огранничено, есть возможность смены пароля... Возможноли программно обойти(точнее заполучить пароль, т.к. бональная правка команды cmp в коде программы все решает, но это не наш метод;)) привиденный тобой тип защит?
     
  6. ECk

    ECk Member

    Публикаций:
    0
    Регистрация:
    9 апр 2004
    Сообщения:
    454
    Адрес:
    Russia
    Возможно, если это User Password и не установлен Master Password. То есть, можно его просто отключить (подробнее по ссылке - www.t13.org - например ATA/ATAPI 6 draft - в виде pdf там выложен, там перечень команд и все подробно прописано)
     
  7. wint

    wint New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2006
    Сообщения:
    66
    Ну допустим я нашел команду "DISABLE PASSWORD" её код FC0h

    Но как ее выполнить... Писать ассемблерную процедуру? тогда какое прерывание вызывать?

    (Я не очень разбираюсь в подобных тонкостях, и читать англоязычную документацию мне довольно трудно, был бы признателен если бы вы подсказали русско язычные источники по этому вопросу, хотя бы самые азы)...?



    P.S. Поймите меня правильно, я спрашиваю не потому что мне лень читать, а потому что сроки поджимают, а на чтение документауии на иностранном уйдет уйма времени...
     
  8. wint

    wint New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2006
    Сообщения:
    66
  9. eugene_

    eugene_ New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2005
    Сообщения:
    93
    Адрес:
    Russia
  10. wint

    wint New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2006
    Сообщения:
    66
    Сейчас вожусь с еще одной подобной прогой, называется U-Storage... Так там монтирование "закрытого" диска осуществляется функцией DeviceIOControl, причем похоже(не спел проверить) введенный пароль передается ей в качестве параметра и она сама разбирается монтировать диск или нет (ф-я всегда выполняется не зависимо от введенного пароля, а результаты разные)... Вопрос: Как бы её заставить монтировать диск ВСЕГДА?





    push esi

    .text:004026BF push edi

    .text:004026C0 push 8

    .text:004026C2 lea eax, [ebp+arg_C]

    .text:004026C5 pop ecx

    .text:004026C6 mov esi, offset aUsbc_6 ; "USBC"

    .text:004026CB push 1 ; size_t

    .text:004026CD push eax ; void *

    .text:004026CE lea edi, [ebp+var_24]

    .text:004026D1 lea eax, [ebp+var_13]

    .text:004026D4 rep movsd

    .text:004026D6 push eax ; void *

    .text:004026D7 call memcpy

    .text:004026DC lea eax, [ebp+arg_8]

    .text:004026DF push 1 ; size_t

    .text:004026E1 push eax ; void *

    .text:004026E2 lea eax, [ebp+var_13+1]

    .text:004026E5 push eax ; void *

    .text:004026E6 call memcpy

    .text:004026EB push 8 ; size_t

    .text:004026ED lea eax, [ebp+var_13+2]

    .text:004026F0 push [ebp+arg_4] ; void *

    .text:004026F3 push eax ; void *

    .text:004026F4 call memcpy

    .text:004026F9 lea eax, [ebp+var_24]

    .text:004026FC push 1Fh ; size_t

    .text:004026FE push eax ; void *

    .text:004026FF lea eax, [ebp+OutBuffer]

    .text:00402705 push eax ; void *

    .text:00402706 call memcpy

    .text:0040270B add esp, 30h

    .text:0040270E lea eax, [ebp+BytesReturned]

    .text:00402711 push 0 ; lpOverlapped

    .text:00402713 push eax ; lpBytesReturned

    .text:00402714 lea eax, [ebp+OutBuffer]

    .text:0040271A push 0Dh ; nOutBufferSize

    .text:0040271C push eax ; lpOutBuffer

    .text:0040271D lea eax, [ebp+OutBuffer]

    .text:00402723 push 1Fh ; nInBufferSize

    .text:00402725 push eax ; lpInBuffer

    .text:00402726 push 220004h ; dwIoControlCode

    .text:0040272B push [ebp+hDevice] ; hDevice

    .text:0040272E!!!!!!!!!!!!! call ds:lol: eviceIoControl

    .text:00402734 lea eax, [ebp+OutBuffer]

    .text:0040273A push offset aUsbc_0 ; "USBC"