Blog. Just Blog

Исследование защиты программы USBFlashCopy

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Темная сторона Силы | Автор: ManHunter
Скриншот программы USBFlashCopy
Скриншот программы USBFlashCopy

Программа USBFlashCopy предназначена для автоматического создания резервных копий данных с Flash-накопителей при подключении их к компьютеру. Резервная копия создается в фоновом режиме, возможны настройки для копирования файлов только отдельного типа, например, картинки или документы. Блин, да кого я обманываю... Программа USBFlashCopy предназначена для скрытого копирования информации с чужих флешек при подключении их к вашему компьютеру, например, файлов с паролями, личных фотографий, документов и других данных на ваш выбор. В бесплатном режиме на экране показывается окно с прогрессом копирования, которое невозможно закрыть, а также при каждом подключении носителей выдается окно с запросом настроек копирования. Чтобы убрать все палево и работать в скрытом режиме, требуется регистрация. Естественно, не бесплатная.

Программа портативная, не требует установки, поэтому качаем с офсайта один исполняемый файл. Никаких навесных защит на нем нет, поэтому сразу отправляем его в дизассемблер, а сами смотрим, как программа ведет себя в бесплатном режиме, и какие основные отличия от платного. Одно из основных отличий - в меню, которое появляется при клике на иконку в трее, отключены пункты "Go Silent", который отвечает за переход программы в скрытный режим, и "Hide/show backup progress", который скрывает окно с процессом кражи копирования данных.

Пункт меню отключен
Пункт меню отключен

Очевидно, что в программе должны выполняться манипуляции с этими пунктами, а именно активация или отключение, в зависимости от наличия регистрации. Открываем файл в редакторе ресурсов, ищем в нем описание меню, чтобы узнать идентификаторы пунктов.

Описание меню в ресурсах
Описание меню в ресурсах

Интересующие нас значения - это 32798 (801Eh в шестнадцатеричной системе счисления) и 32795 (801Bh). Теперь поищем в листинге дизассемблера какие-нибудь действия, производимые с этими идентификаторами.
  1. ...
  2. .text:00408AC0                 push    0
  3. .text:00408AC2                 lea     ecx, [esp+538h+var_258] ; void *
  4. ; Вызвать какую-то функцию какой-то проверки
  5. .text:00408AC9                 call    sub_4021B0
  6. .text:00408ACE                 mov     esi, [esp+538h+hMenu]
  7. .text:00408AD2                 add     esp, 4
  8. ; Если она вернула EAX=0, то переход
  9. .text:00408AD5                 test    eax, eax
  10. .text:00408AD7                 jz      short loc_408AF3
  11. .text:00408AD9                 mov     edi, ds:EnableMenuItem
  12. ; Отключить пункт меню "Go Silent"
  13. .text:00408ADF                 push    1               ; uEnable
  14. .text:00408AE1                 push    801Bh           ; uIDEnableItem
  15. .text:00408AE6                 push    esi             ; hMenu
  16. .text:00408AE7                 call    edi ; EnableMenuItem
  17. ; Отключить пункт меню "Hide/show backup progress"
  18. .text:00408AE9                 push    1               ; uEnable
  19. .text:00408AEB                 push    801Eh           ; uIDEnableItem
  20. .text:00408AF0                 push    esi             ; hMenu
  21. .text:00408AF1                 call    edi ; EnableMenuItem
  22. .text:00408AF3 loc_408AF3:
  23. .text:00408AF3                 mov     eax, hWnd
  24. .text:00408AF8                 mov     ecx, [esp+534h+Point.y]
  25. .text:00408AFC                 mov     edx, [esp+534h+Point.x]
  26. .text:00408B00                 push    0               ; LPTPMPARAMS
  27. .text:00408B02                 push    eax             ; HWND
  28. .text:00408B03                 push    ecx             ; int
  29. .text:00408B04                 push    edx             ; int
  30. .text:00408B05                 push    102h            ; UINT
  31. .text:00408B0A                 push    esi             ; HMENU
  32. .text:00408B0B                 call    ds:TrackPopupMenuEx
  33. .text:00408B11                 mov     esi, eax
  34. .text:00408B13                 cmp     esi, 8006h
  35. ...
Что получилось? Если процедура sub_4021B0 вернула EAX=0, то мы перепрыгиваем через код блокировки пунктов меню. Посмотрим, что же это за такая интересная процедура. Она достаточно объемная, поэтому я не буду приводить ее здесь целиком, только самые интересные участки кода:
  1. ...
  2. ; Инициализация хэша MD5
  3. .text:00402351                 mov     [esp+3DCh+var_3B8], 67452301h
  4. .text:00402359                 mov     [esp+3DCh+var_3B4], 0EFCDAB89h
  5. .text:00402361                 mov     [esp+3DCh+var_3B0], 98BADCFEh
  6. .text:00402369                 mov     [esp+3DCh+var_3AC], 10325476h
  7. ...
  8. ; Работа с временем системы
  9. .text:00402487                 lea     ecx, [esp+3C8h+SystemTime]
  10. .text:0040248B                 push    ecx             ; lpSystemTime
  11. .text:0040248C                 call    ds:GetLocalTime
  12. .text:00402492                 lea     edx, [esp+3C8h+FileTime]
  13. .text:00402496                 push    edx             ; lpFileTime
  14. .text:00402497                 lea     eax, [esp+3CCh+SystemTime]
  15. .text:0040249B                 push    eax             ; lpSystemTime
  16. .text:0040249C                 call    ds:SystemTimeToFileTime
  17. .text:004024A2                 movzx   edx, word ptr [edi+2Eh]
  18. .text:004024A6                 lea     ecx, [esp+3C8h+var_3B8]
  19. .text:004024AA                 push    ecx             ; lpFileTime
  20. .text:004024AB                 push    0               ; wFatTime
  21. .text:004024AD                 push    edx             ; wFatDate
  22. .text:004024AE                 call    ds:DosDateTimeToFileTime
  23. ...
Интуиция мне подсказывает, что считать MD5 от каких-то данных и проверять текущее время, а потом принимать решение об отключении пунктов меню - это самая натуральная функция проверки регистрации. Как мы уже выяснили ранее, она должна возвращать EAX=0, это и будет признак зарегистрированности программы. Нет ничего проще, патчим начало функции, записывая по адресу 4021B0 команды XOR EAX,EAX; RET. Сохраняем изменения, запускаем.

Пункт в окне выбора профиля активирован
Пункт в окне выбора профиля активирован

В окне выбора профиля исчезла информация о необходимости приобретения ключа для перехода в скрытый режим. Все пункты в меню в трее разблокированы, доступны опции скрытия значка, а в окне настроек показывается информация о регистрации.

Программа успешно "зарегистрирована"
Программа успешно "зарегистрирована"

Но поскольку мы не знаем точно ни формата легального ключа, ни какие данные в нем содержатся, ни как он шифруется или проверяется, то вместо них показываются какие-то странные значения. Для красоты можно найти и отредактировать юникодную строку с шаблоном регистрационных данных:

Шаблон регистрационных данных
Шаблон регистрационных данных

Можно вписать вместо нее свое имя, или оставить как есть, это уже на ваш выбор. Также оставляю на вашей совести то, для чего вы будете использовать эту программу.

Поделиться ссылкой ВКонтакте
Просмотров: 9845 | Комментариев: 13

Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
Yoshida (04.04.2012 в 00:01):
Спасибо, по образу и подобию вылечил IrfanView.
Yoshida (02.04.2012 в 09:52):
Да, 1 января 1601 года был замечательным днем. Кроме того, что светило солнце, он ознаменовал начало нового, 17 века, положил начало многим открытиям. И именно в тот день была зарегистрирована программа! Это ли не прекрасно?
ManHunter (16.12.2011 в 11:19):
Здесь не стол заказов.
Петр (16.12.2011 в 02:09):
Есть схожая бесплатная программа www.usbgrab.h16.ru

И ещё http://armsoft.ru/index.php?go=flashcop  настроек больше, только тоже платная. Может отломаете?
ManHunter (01.12.2011 в 09:01):
Musika, если на чужом компе и флешка воткнута на видном месте, то смотреть, чтобы она не по делу не моргала. Но если у нехорошего человека есть немного мозгов, то он бы разместил порт для подключения где-нибудь в незаметном месте, под столом или за системником. Так что защиты нет. Еще как вариант хранить важные данные в архиве под паролем. Даже если и утянут, то не воспользуются.
Musika (01.12.2011 в 00:09):
Приветствую,

Подскажите, что блокирует "работу" этой и подобной
этой программ.
Спасибо.
CoStick (30.11.2011 в 23:33):
Недавно искал подобное, надо было "забекапить" незаметно флэшку одного "товарища" нанятого на время... Нашел "Shadow Disk Copy v1.7" (на русском и бесплатно)- есть режим невидимого снятия образа (при этом флэшка подозрительно долго моргает своим индикатором) и режим при котором типа флэха проверяется антихвирем. Но увы, у "товарища" оказалась флэшка в 1500Гб, т.е. внешний жесткий диск и места физически куда это слить, тем более незаметно, не оказалось.
Never (30.11.2011 в 15:25):
"Блин, да кого я обманываю" )))
Три года назад, когда искал что-то подобное, кажется ты мне ее и советовал.
Vnv (29.11.2011 в 19:00):
Да, программка ломается одним байтом: .4022fd JMP 0040254c --> JMP 00402548 :)

Упс, очепятка. JMP 0040254A
ManHunter (29.11.2011 в 17:39):
Ну только если погнулось прямоугольное выделение в XnView, в чем я сильно сомневаюсь. Отдых, отдых и еще раз отдых.
AyTkACT (29.11.2011 в 17:37):
ManHunter, скрин с подписью "Пункт в окне выбора профиля активирован" - криво обрезан по левому краю или я уже засыпаю?
ManHunter (29.11.2011 в 16:54):
Я начал переводить описание с офсайта, но потом одумался :)
AyTkACT (29.11.2011 в 16:54):
>> ...предназначена для автоматического создания резервных копий данных...
Ага. Прям таки вижу как хомячки "бэкапят" чужие флешки.)))

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.11 сек. / MySQL: 2 (0.0086 сек.) / Память: 4.5 Mb
Наверх