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


Скриншот программы Zip Password Tool

Zip Password Tool от FDRLab Data Recovery Centre - программа для подбора паролей к ZIP-архивам. Позволяет подбирать пароли прямым перебором (Brute-force attack) и по заранее созданному словарю. По скорости работы, конечно, уступает лидерам в этой области, но со своей задачей вполне справляется, так что в можно держать в запасе на всякий случай. В бесплатной версии не показывает пароли длиннее 4 символов и не позволяет перебирать пароли по словарю. Это плохо, попробуем устранить эти недостатки.

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


"Нехорошая строка"

Теперь в дизассемблере посмотрим код, который ссылается на эти строчки. Тут тоже ничего сложного нет, все очень наглядно.
CODE:004DEFF3                 mov     edx, [eax]
CODE:004DEFF5                 call    dword ptr [edx+0ECh]
CODE:004DEFFB                 mov     eax, esi
; Вызвать функцию проверки регистрации
CODE:004DEFFD                 call    sub_4DCB30
; Если она вернула 0, то программа не зарегистрирована
CODE:004DF002                 test    al, al
CODE:004DF004                 jz      short loc_4DF022
; Установить флажок "зарегистрировано" в значение TRUE
CODE:004DF006                 mov     ds:byte_4EA9AD, 1
CODE:004DF00D                 mov     eax, [esi+338h]
CODE:004DF013                 mov     edx, 6
CODE:004DF018                 call    @Spin@TSpinEdit@SetValue$qqri
CODE:004DF01D                 jmp     loc_4DF112
CODE:004DF022 ; ----------------------------------------
; Триальная ветка алгоритма
CODE:004DF022 loc_4DF022:
CODE:004DF022                 mov     eax, [esi+3CCh]
CODE:004DF028                 mov     dl, 1
CODE:004DF02A                 call    @Controls@TControl@SetVisible$qqro
CODE:004DF02F                 mov     ds:byte_4EA9AD, 0
CODE:004DF036                 mov     eax, [esi+338h]
CODE:004DF03C                 mov     edx, 4
; .....
; Часть кода пропущена для экономии места
; .....
CODE:004DF09A                 mov     edx, [eax+0Ch]
CODE:004DF09D                 lea     eax, [ebp+var_10]
; Указатель на строку [unregistered]
CODE:004DF0A0                 mov     ecx, offset _str___unregistered_.Text
CODE:004DF0A5                 call    @System@@LStrCat3$qqrv
CODE:004DF0AA                 mov     eax, [ebp+var_10]
CODE:004DF0AD                 push    eax
CODE:004DF0AE                 mov     eax, [esi+2F8h]
CODE:004DF0B4                 mov     eax, [eax+208h]
CODE:004DF0BA                 xor     edx, edx
CODE:004DF0BC                 call    sub_442F90
CODE:004DF0C1                 pop     edx
CODE:004DF0C2                 call    unknown_libname_742
CODE:004DF0C7                 mov     eax, [esi+340h]
CODE:004DF0CD                 mov     eax, [eax+220h]
CODE:004DF0D3                 mov     edx, offset _str_________________6.Text
CODE:004DF0D8                 mov     ecx, [eax]
CODE:004DF0DA                 call    dword ptr [ecx+38h]
CODE:004DF0DD                 call    @Sysutils@Time$qqrv ; Sysutils::Time(void)
CODE:004DF0E2                 add     esp, 0FFFFFFF8h
CODE:004DF0E5                 fstp    [esp+1Ch+var_1C]
CODE:004DF0E8                 wait
CODE:004DF0E9                 lea     eax, [ebp+var_14]
CODE:004DF0EC                 call    unknown_libname_169
CODE:004DF0F1                 lea     eax, [ebp+var_14]
; Указатель на строку "Unregistered version is detected!"
CODE:004DF0F4                 mov     edx, offset _str___Unregistered_.Text
CODE:004DF0F9                 call    @System@@LStrCat$qqrv
CODE:004DF0FE                 mov     edx, [ebp+var_14]
CODE:004DF101                 mov     eax, [esi+340h]

Чтобы не тратить время на разбор алгоритма генерации ключа, просто пропатчим процедуру, отвечающую за проверку регистрации, записав в ее начало команды MOV AL,1; RET:

Запускаем пропатченный файл. Окно регистрации пропало, внешние признаки триальности тоже.


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

Для проверки попробуем подобрать пароль из 5 символов и выполнить поиск по словарю. Все опции работают, значит мы все сделали правильно. В качестве дополнительного приятного бонуса Zip Password Tool после патча может работать с любого съемного носителя, например с флешки. Затраченное время на снятие защиты - меньше одной минуты :)
Теги:
защита, взлом
Добавлено: 21 Сентября 2013 01:12:09 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...