Blog. Just Blog

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

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

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

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

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

Теперь в дизассемблере посмотрим код, который ссылается на эти строчки. Тут тоже ничего сложного нет, все очень наглядно.
  1. CODE:004DEFF3                 mov     edx, [eax]
  2. CODE:004DEFF5                 call    dword ptr [edx+0ECh]
  3. CODE:004DEFFB                 mov     eax, esi
  4. ; Вызвать функцию проверки регистрации
  5. CODE:004DEFFD                 call    sub_4DCB30
  6. ; Если она вернула 0, то программа не зарегистрирована
  7. CODE:004DF002                 test    al, al
  8. CODE:004DF004                 jz      short loc_4DF022
  9. ; Установить флажок "зарегистрировано" в значение TRUE
  10. CODE:004DF006                 mov     ds:byte_4EA9AD, 1
  11. CODE:004DF00D                 mov     eax, [esi+338h]
  12. CODE:004DF013                 mov     edx, 6
  13. CODE:004DF018                 call    @Spin@TSpinEdit@SetValue$qqri
  14. CODE:004DF01D                 jmp     loc_4DF112
  15. CODE:004DF022 ; ----------------------------------------
  16. ; Триальная ветка алгоритма
  17. CODE:004DF022 loc_4DF022:
  18. CODE:004DF022                 mov     eax, [esi+3CCh]
  19. CODE:004DF028                 mov     dl, 1
  20. CODE:004DF02A                 call    @Controls@TControl@SetVisible$qqro
  21. CODE:004DF02F                 mov     ds:byte_4EA9AD, 0
  22. CODE:004DF036                 mov     eax, [esi+338h]
  23. CODE:004DF03C                 mov     edx, 4
  24. ; .....
  25. ; Часть кода пропущена для экономии места
  26. ; .....
  27. CODE:004DF09A                 mov     edx, [eax+0Ch]
  28. CODE:004DF09D                 lea     eax, [ebp+var_10]
  29. ; Указатель на строку [unregistered]
  30. CODE:004DF0A0                 mov     ecx, offset _str___unregistered_.Text
  31. CODE:004DF0A5                 call    @System@@LStrCat3$qqrv
  32. CODE:004DF0AA                 mov     eax, [ebp+var_10]
  33. CODE:004DF0AD                 push    eax
  34. CODE:004DF0AE                 mov     eax, [esi+2F8h]
  35. CODE:004DF0B4                 mov     eax, [eax+208h]
  36. CODE:004DF0BA                 xor     edx, edx
  37. CODE:004DF0BC                 call    sub_442F90
  38. CODE:004DF0C1                 pop     edx
  39. CODE:004DF0C2                 call    unknown_libname_742
  40. CODE:004DF0C7                 mov     eax, [esi+340h]
  41. CODE:004DF0CD                 mov     eax, [eax+220h]
  42. CODE:004DF0D3                 mov     edx, offset _str_________________6.Text
  43. CODE:004DF0D8                 mov     ecx, [eax]
  44. CODE:004DF0DA                 call    dword ptr [ecx+38h]
  45. CODE:004DF0DD                 call    @Sysutils@Time$qqrv ; Sysutils::Time(void)
  46. CODE:004DF0E2                 add     esp, 0FFFFFFF8h
  47. CODE:004DF0E5                 fstp    [esp+1Ch+var_1C]
  48. CODE:004DF0E8                 wait
  49. CODE:004DF0E9                 lea     eax, [ebp+var_14]
  50. CODE:004DF0EC                 call    unknown_libname_169
  51. CODE:004DF0F1                 lea     eax, [ebp+var_14]
  52. ; Указатель на строку "Unregistered version is detected!"
  53. CODE:004DF0F4                 mov     edx, offset _str___Unregistered_.Text
  54. CODE:004DF0F9                 call    @System@@LStrCat$qqrv
  55. CODE:004DF0FE                 mov     edx, [ebp+var_14]
  56. CODE:004DF101                 mov     eax, [esi+340h]
Чтобы не тратить время на разбор алгоритма генерации ключа, просто пропатчим процедуру, отвечающую за проверку регистрации, записав в ее начало команды MOV AL,1; RET:
  1. CODE:004DCB30 sub_4DCB30      proc near
  2.  
  3. CODE:004DCB30 var_18          = byte ptr -18h
  4. CODE:004DCB30 var_8           = dword ptr -8
  5. CODE:004DCB30 var_1           = byte ptr -1
  6. CODE:004DCB30
  7. CODE:004DCB30                 push    ebp    ; <-- записать MOV AL,1; RET
  8. CODE:004DCB31                 mov     ebp, esp
  9. CODE:004DCB33                 add     esp, 0FFFFFFE8h
  10. CODE:004DCB36                 push    ebx
  11. CODE:004DCB37                 push    esi
  12. CODE:004DCB38                 xor     edx, edx
  13. CODE:004DCB3A                 mov     [ebp+var_8], edx
  14. CODE:004DCB3D                 xor     eax, eax
  15. CODE:004DCB3F                 push    ebp
  16. CODE:004DCB40                 push    offset loc_4DCBD1
  17. CODE:004DCB45                 push    dword ptr fs:[eax]
  18. CODE:004DCB48                 mov     fs:[eax], esp
  19. CODE:004DCB4B                 mov     [ebp+var_1], 0
  20. ...
Запускаем пропатченный файл. Окно регистрации пропало, внешние признаки триальности тоже.

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

Для проверки попробуем подобрать пароль из 5 символов и выполнить поиск по словарю. Все опции работают, значит мы все сделали правильно. В качестве дополнительного приятного бонуса Zip Password Tool после патча может работать с любого съемного носителя, например с флешки. Затраченное время на снятие защиты - меньше одной минуты :)

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

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

Комментарии

Отзывы посетителей сайта о статье
ManHunter (20.02.2010 в 16:42):
Если такой вопрос вообще возник, то эта статья точно не для тебя.
Валера (20.02.2010 в 12:46):
Где найди программу дизассемблер у меня такого их нет
Заранее спасибо
INC (17.09.2009 в 21:40):
Thanks

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

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

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