Исследование защиты программы USB Low-Level Format
Скриншот программы USB Low-Level Format
Утилита USB Low-Level Format предназначена для низкоуровнего форматирования карт памяти и USB-накопителей различных производителей (поддерживается более 20 типов контроллеров). При форматировании не только стирается вся информация, но также все параметры накопителя сбрасываются к заводским значениям. В некоторых случаях это позволяет даже восстановить неисправные накопители, например, у которых некорректно определяется емкость. Кроме того после форматирования можно сразу сделать загрузочную флешку. В бесплатном режиме USB Low-Level Format позволяет форматировать накопители емкостью не более 2GB. Машины времени, чтобы вернуться на много лет назад в эпоху таких емкостей, у меня нет, зато есть дизассемблер и отладчик, чтобы привести утилиту к реалиям нашего времени.
Забираем с офсайта дистрибутив, устанавливаем, смотрим что и как. Основной исполняемый файл ничем не упакован, отправляем его на разбор в дизассемблер. Теперь попытаемся определить признаки незарегистрированной программы. Для этого надо просто попытаться отформатировать диск большой емкости. Появится следующее сообщение:
Сообщение триальной версии
Вроде все понятно, но вот незадача, ни одну из этих строк в программе не найти, ни в юникоде, ни простым текстом. Зато обнаруживается текст из заголовка окна "Warning", а рядом с ним что-то интересное, явно не код и не случайные бинарные данные.
Зашифрованная строка в файле
Это не что иное, как зашифрованные строки сообщений, которые так или иначе связаны с регистрацией, триальностью и всяким таким. Алгоритм шифрования можно вычислить даже простым созерцанием, тут к ASCII-коду каждого символа исходной строки прибавляется единица.
Теперь давайте вернемся в дизассемблер и посмотрим, где и при каких условиях выводится сообщение об ограничениях.
Code (Assembler) : Убрать нумерацию
- .text:004843ED call @Controls@TControl@GetText$qqrv
- .text:004843F2 mov edx, [ebp+var_54]
- .text:004843F5 lea ecx, [ebp+var_3C]
- .text:004843F8 mov eax, [ebp+var_38]
- .text:004843FB call sub_4823A0
- .text:00484400 mov eax, [ebp+var_20]
- .text:00484403 mov edx, offset _str_GB_1.Text
- ; Емкость носителя должна быть в GB...
- .text:00484408 call @System@@LStrCmp$qqrv
- .text:0048440D jnz loc_484552
- .text:00484413 fild [ebp+var_48]
- .text:00484416 fld ds:tbyte_4864DC
- .text:0048441C fcompp
- .text:0048441E fstsw ax
- .text:00484421 sahf
- ; ... и их количество должно быть не больше 2
- .text:00484422 jnb loc_484552
- .text:00484428 mov eax, [ebp+var_38]
- ; Проверить признак зарегистрированности
- .text:0048442B cmp byte ptr [eax+432h], 0
- .text:00484432 jz loc_484552
- ; Вывести сообщение об ограничении функционала
- .text:00484438 lea edx, [ebp+var_58]
- .text:0048443B mov eax, off_490008
- .text:00484440 mov eax, [eax]
- .text:00484442 call @Forms@TApplication@GetTitle$qqrv
- .text:00484447 push [ebp+var_58]
- .text:0048444A push offset _str___57.Text
- .text:0048444F lea edx, [ebp+var_5C]
- .text:00484452 mov eax, offset _str_epft_opu_tvqqps.Text
- .text:00484457 call sub_4800BC
- .text:0048445C push [ebp+var_5C]
- .text:0048445F push offset _str___58.Text
- .text:00484464 push offset _str___59.Text
- .text:00484469 lea edx, [ebp+var_60]
- .text:0048446C mov eax, offset _str_Ep_zpv_xbou_up_.Text
- .text:00484471 call sub_4800BC
- .text:00484476 push [ebp+var_60]
- .text:00484479 lea eax, [ebp+var_4]
- .text:0048447C mov edx, 6
- .text:00484481 call @System@@LStrCatN$qqrv
- .text:00484486 push 4 ; uType
- .text:00484488 push offset aWarning ; "Warning"
- .text:0048448D mov eax, [ebp+var_4]
- .text:00484490 call @System@@LStrToPChar
- .text:00484495 push eax ; lpText
- .text:00484496 mov eax, [ebp+var_38]
- .text:00484499 call @Controls@TWinControl@GetHandle$qqrv
- .text:0048449E push eax ; hWnd
- .text:0048449F call MessageBoxA_0
- .text:004844A4 mov ebx, eax
Code (Assembler) : Убрать нумерацию
- .text:0048395E call dword ptr [edx+44h]
- .text:00483961 xor eax, eax
- .text:00483963 call sub_48CCBC
- ; Обнулить регистр EAX
- .text:00483968 xor eax, eax
- ; Обнулить два флага
- .text:0048396A mov [ebx+432h], al
- .text:00483970 mov [ebx+433h], al
- .text:00483976 mov byte ptr [ebx+430h], 0
- .text:0048397D lea edx, [ebp+var_20]
- .text:00483980 xor eax, eax
- .text:00483982 call @System@ParamStr$qqri
Программа успешно "зарегистрирована"
Кнопка "Upgrade" пропала, в заголовке красуется надпись "Pro", при попытке отформатировать накопитель большой емкости никаких сообщений не выводится, а само форматирование выполняется без каких-либо ограничений. Цель достигнута. А кроме того, пропатченная программа теперь может работать со съемного носителя.
Просмотров: 2333 | Комментариев: 5
Метки: исследование защиты
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(31.01.2022 в 17:30):
*ANY* requests are strictly prohibited. Here is not bureau of good offices.
Rattlesnake
(31.01.2022 в 17:14):
Great work indeed.. This is the first 100% crack of this I have ever seen..
[deleted]
[deleted]
ManHunter
(31.01.2022 в 02:03):
Ну дык, нашим легче.
voffka
(30.01.2022 в 14:07):
Классика жанра. Кто-то из разработчиков выпиливает весь функционал, и ради прикола оставляет окна регистрации, а кто-то выпиливает все проверки ключей и функционал проверяет булом isdemo.
Добавить комментарий
Заполните форму для добавления комментария
В сети есть информация, что защита этого инструмента также может быть снята твиком реестра до или после установки самой программы, без необходимости править оригинальный исполняемый файл <usbllfmt.exe>. Это реализовано в сборке elchupacabra. Его сборку проверил, файл <usbllfmt.exe> оригинальной en-версии не модифицирован, утилита работает и выполняет свои функции в режиме Pro. Но Вы, пожалуй, первый, кому удалось разобраться с механизмом защиты