Blog. Just Blog

Исследование защиты Accent OFFICE Password Recovery

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

Accent OFFICE Password Recovery от AccentSoft Team - еще одна полезная в хозяйстве программа, на этот раз для восстановления забытых паролей от документов Microsoft Office. Скачать дистрибутив для исследования можно с офсайта. Устанавливаем, запускаем, наблюдаем знакомую картину: надпись "Unregistered copy" и предупреждение, что пробная версия открывает пароли максимум из 4 символов. Это несерьезно, поэтому приступаем к лечению.

Наружный осмотр пациента показывает, что файл упакован UPX, однако код упаковщика модифицирован и обычное UPX -d не срабатывает. Придется распаковать вручную или воспользоваться чем-нибудь типа Quick Unpack или UPX-Ripper. Все распаковалось успешно, распакованный файл запускается. Приступаем к прогрессивной терапии. Если есть строчка "Unregistered", значит по логике где-то должна быть "Registered". Найдем ее.

Строка найдена
Строка найдена

Теперь посмотрим код, который ссылается на эту строку. Код без сюрпризов, в нем сразу бросается в глаза комбинация из вызова какой-то функции и условного перехода в зависимости от ее возвращенного результата.
  1. .text:0040E4D8                 push    eax
  2. ; Похоже что тут вызывается функция проверки регистрационных данных
  3. .text:0040E4D9                 call    sub_4019B4
  4. .text:0040E4DE                 add     esp, 8
  5. .text:0040E4E1                 test    eax, eax
  6. ; По результатам проверки регистра EAX выполняется переход.
  7. ; EAX=1 - программа не зарегистрирована, EAX=0 - программа зарегистрирована.
  8. .text:0040E4E3                 jnz     short loc_40E51A
  9. .text:0040E4E5                 mov     word ptr [ebp-24h], 14h
  10. .text:0040E4EB                 mov     edx, offset aRegisteredCopy ; "Registered copy   ."
  11. .text:0040E4F0                 lea     eax, [ebp-0Ch]
  12. .text:0040E4F3                 call    sub_4CFE10
  13. .text:0040E4F8                 inc     dword ptr [ebp-18h]
  14. .text:0040E4FB                 mov     edx, [eax]
  15. .text:0040E4FD                 mov     eax, [ebx+2E0h]
  16. .text:0040E503                 call    @Controls@TControl@SetText$qqrx17System@AnsiString ; Controls::TControl::SetText(System::AnsiString)
  17. .text:0040E508                 dec     dword ptr [ebp-18h]
  18. .text:0040E50B                 lea     eax, [ebp-0Ch]
  19. .text:0040E50E                 mov     edx, 2
  20. .text:0040E513                 call    sub_4CFFB8
  21. .text:0040E518                 jmp     short loc_40E54D
  22. .text:0040E51A ; ---------------------------------------------------------------------------
  23. .text:0040E51A
  24. .text:0040E51A loc_40E51A:
  25. .text:0040E51A                 mov     word ptr [ebp-24h], 20h
  26. .text:0040E520                 mov     edx, offset aUnregistered_0 ; "Unregistered copy   ."
  27. .text:0040E525                 lea     eax, [ebp-10h]
  28. .text:0040E528                 call    sub_4CFE10
  29. .text:0040E52D                 inc     dword ptr [ebp-18h]
  30. .text:0040E530                 mov     edx, [eax]
  31. .text:0040E532                 mov     eax, [ebx+2E0h]
  32. .text:0040E538                 call    @Controls@TControl@SetText$qqrx17System@AnsiString ; Controls::TControl::SetText(System::AnsiString)
  33. .text:0040E53D                 dec     dword ptr [ebp-18h]
  34. .text:0040E540                 lea     eax, [ebp-10h]
  35. .text:0040E543                 mov     edx, 2
  36. .text:0040E548                 call    sub_4CFFB8
Терапия закончилась, переходим к хирургии. Попробуем пропатчить функцию проверки регистрации. Мы помним, что в случае успешной регистрации она должна вернуть EAX=0. Для этого пропишем в самое начало две команды: XOR EAX,EAX и RET
  1. ; Процедура проверки регистрации должна вернуть EAX=0 если программа
  2. ; зарегистрирована
  3. .text:004019B4                 push    ebp       ; <-- XOR EAX,EAX; RET
  4. .text:004019B5                 mov     ebp, esp
  5. .text:004019B7                 add     esp, 0FFFFFF94h
  6. .text:004019BA                 xor     eax, eax
  7. .text:004019BC                 lea     edx, [ebp+var_6C]
  8. .text:004019BF                 push    ebx
  9. .text:004019C0                 push    esi
  10. .text:004019C1                 push    edi
  11. .text:004019C2                 mov     esi, [ebp+arg_4]
  12. .text:004019C5                 mov     [ebp+var_4], eax
  13. .text:004019C8                 push    edx
  14. .text:004019C9                 call    sub_410950
  15. .text:004019CE                 pop     ecx
  16. .text:004019CF                 push    22h             ; n
  17. .text:004019D1                 mov     ecx, [ebp+src]
  18. .text:004019D4                 push    ecx             ; src
  19. .text:004019D5                 lea     eax, [ebp+var_6C]
  20. .text:004019D8                 push    eax             ; int
  21. .text:004019D9                 call    sub_410980
  22. .text:004019DE                 add     esp, 0Ch
  23. .text:004019E1                 lea     edx, [ebp+var_6C]
  24. .text:004019E4                 push    edx             ; src
  25. .text:004019E5                 call    sub_410A3C
  26. .text:004019EA                 pop     ecx
  27. .text:004019EB                 xor     ecx, ecx
  28. .text:004019ED                 xor     edx, edx
  29. .text:004019EF                 lea     eax, [ebp+var_14]
  30. .text:004019F2
  31. .text:004019F2 loc_4019F2:
  32. .text:004019F2                 lea     edi, [edx+esi*8]
  33. .text:004019F5                 xor     ebx, ebx
  34. .text:004019F7                 mov     bl, [eax]
  35. .text:004019F9                 cmp     ebx, dword_4DA7B0[edi*4]
  36. .text:00401A00                 jz      short loc_401A09
  37. .text:00401A02                 mov     eax, 1
  38. .text:00401A07                 jmp     short loc_401A18
  39. .text:00401A09 ; ---------------------------------------------------------------------------
  40. .text:00401A09
  41. .text:00401A09 loc_401A09:
  42. .text:00401A09                 add     eax, 2
  43. .text:00401A0C                 add     ecx, 2
  44. .text:00401A0F                 inc     edx
  45. .text:00401A10                 cmp     ecx, 10h
  46. .text:00401A13                 jl      short loc_4019F2
  47. .text:00401A15                 mov     eax, [ebp+var_4]
  48. .text:00401A18
  49. .text:00401A18 loc_401A18:
  50. .text:00401A18                 pop     edi
  51. .text:00401A19                 pop     esi
  52. .text:00401A1A                 pop     ebx
  53. .text:00401A1B                 mov     esp, ebp
  54. .text:00401A1D                 pop     ebp
  55. .text:00401A1E                 retn
Сохраняем изменения, запускаем, на первый взгляд все нормально. Для проверки сделаем запароленный файл в Microsoft Word, причем пароль надо будет сделать более 4 символов. Попробуем восстановить его. В настройках Accent OFFICE Password Recovery ставим метод Brute-Force, запускаем перебор.

Программа "зарегистрирована" и работает без ограничений
Программа "зарегистрирована" и работает без ограничений

"... и о чудо! Никаких пятен!". Пароль восстанавливается, плохих надписей нет. Для информации: аналогичным способом убирается защита для всех остальных программ от AccentSoft Team.

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

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

Комментарии

Отзывы посетителей сайта о статье
x (19.09.2011 в 10:34):
Спасибо за ответы. Если осталасть версия 2.80, которую ты исследовал, выложи ее на сайте.
ManHunter (16.09.2011 в 20:03):
Сейчас там навешан VMprot, так что забудь.
x (16.09.2011 в 17:44):
Не удается распаковать исполняемый файл (AccentOPR.exe версия 5.30 сборка 1296). Посоветуй, по-возможности, как это сделать?
x (16.09.2011 в 09:58):
Извини, если обидел. Твой блог очень интересен и познавателен. Если возможно, сделай подборку необходимого софта для для исследования.
ManHunter (16.09.2011 в 02:09):
А ты меня на слабо не бери. Тебе надо - ты и исследуй.
x (15.09.2011 в 18:11):
А более новую версию (5.0) исследовать слабо?
daymon (16.03.2009 в 09:28):
Спасибо за информацию, обязательно проверю.

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

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

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