
Исследование защиты 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". Найдем ее.

Строка найдена
Теперь посмотрим код, который ссылается на эту строку. Код без сюрпризов, в нем сразу бросается в глаза комбинация из вызова какой-то функции и условного перехода в зависимости от ее возвращенного результата.
Code (Assembler) : Убрать нумерацию
- .text:0040E4D8 push eax
- ; Похоже что тут вызывается функция проверки регистрационных данных
- .text:0040E4D9 call sub_4019B4
- .text:0040E4DE add esp, 8
- .text:0040E4E1 test eax, eax
- ; По результатам проверки регистра EAX выполняется переход.
- ; EAX=1 - программа не зарегистрирована, EAX=0 - программа зарегистрирована.
- .text:0040E4E3 jnz short loc_40E51A
- .text:0040E4E5 mov word ptr [ebp-24h], 14h
- .text:0040E4EB mov edx, offset aRegisteredCopy ; "Registered copy ."
- .text:0040E4F0 lea eax, [ebp-0Ch]
- .text:0040E4F3 call sub_4CFE10
- .text:0040E4F8 inc dword ptr [ebp-18h]
- .text:0040E4FB mov edx, [eax]
- .text:0040E4FD mov eax, [ebx+2E0h]
- .text:0040E503 call @Controls@TControl@SetText$qqrx17System@AnsiString ; Controls::TControl::SetText(System::AnsiString)
- .text:0040E508 dec dword ptr [ebp-18h]
- .text:0040E50B lea eax, [ebp-0Ch]
- .text:0040E50E mov edx, 2
- .text:0040E513 call sub_4CFFB8
- .text:0040E518 jmp short loc_40E54D
- .text:0040E51A ; ---------------------------------------------------------------------------
- .text:0040E51A
- .text:0040E51A loc_40E51A:
- .text:0040E51A mov word ptr [ebp-24h], 20h
- .text:0040E520 mov edx, offset aUnregistered_0 ; "Unregistered copy ."
- .text:0040E525 lea eax, [ebp-10h]
- .text:0040E528 call sub_4CFE10
- .text:0040E52D inc dword ptr [ebp-18h]
- .text:0040E530 mov edx, [eax]
- .text:0040E532 mov eax, [ebx+2E0h]
- .text:0040E538 call @Controls@TControl@SetText$qqrx17System@AnsiString ; Controls::TControl::SetText(System::AnsiString)
- .text:0040E53D dec dword ptr [ebp-18h]
- .text:0040E540 lea eax, [ebp-10h]
- .text:0040E543 mov edx, 2
- .text:0040E548 call sub_4CFFB8
Code (Assembler) : Убрать нумерацию
- ; Процедура проверки регистрации должна вернуть EAX=0 если программа
- ; зарегистрирована
- .text:004019B4 push ebp ; <-- XOR EAX,EAX; RET
- .text:004019B5 mov ebp, esp
- .text:004019B7 add esp, 0FFFFFF94h
- .text:004019BA xor eax, eax
- .text:004019BC lea edx, [ebp+var_6C]
- .text:004019BF push ebx
- .text:004019C0 push esi
- .text:004019C1 push edi
- .text:004019C2 mov esi, [ebp+arg_4]
- .text:004019C5 mov [ebp+var_4], eax
- .text:004019C8 push edx
- .text:004019C9 call sub_410950
- .text:004019CE pop ecx
- .text:004019CF push 22h ; n
- .text:004019D1 mov ecx, [ebp+src]
- .text:004019D4 push ecx ; src
- .text:004019D5 lea eax, [ebp+var_6C]
- .text:004019D8 push eax ; int
- .text:004019D9 call sub_410980
- .text:004019DE add esp, 0Ch
- .text:004019E1 lea edx, [ebp+var_6C]
- .text:004019E4 push edx ; src
- .text:004019E5 call sub_410A3C
- .text:004019EA pop ecx
- .text:004019EB xor ecx, ecx
- .text:004019ED xor edx, edx
- .text:004019EF lea eax, [ebp+var_14]
- .text:004019F2
- .text:004019F2 loc_4019F2:
- .text:004019F2 lea edi, [edx+esi*8]
- .text:004019F5 xor ebx, ebx
- .text:004019F7 mov bl, [eax]
- .text:004019F9 cmp ebx, dword_4DA7B0[edi*4]
- .text:00401A00 jz short loc_401A09
- .text:00401A02 mov eax, 1
- .text:00401A07 jmp short loc_401A18
- .text:00401A09 ; ---------------------------------------------------------------------------
- .text:00401A09
- .text:00401A09 loc_401A09:
- .text:00401A09 add eax, 2
- .text:00401A0C add ecx, 2
- .text:00401A0F inc edx
- .text:00401A10 cmp ecx, 10h
- .text:00401A13 jl short loc_4019F2
- .text:00401A15 mov eax, [ebp+var_4]
- .text:00401A18
- .text:00401A18 loc_401A18:
- .text:00401A18 pop edi
- .text:00401A19 pop esi
- .text:00401A1A pop ebx
- .text:00401A1B mov esp, ebp
- .text:00401A1D pop ebp
- .text:00401A1E retn

Программа "зарегистрирована" и работает без ограничений
"... и о чудо! Никаких пятен!". Пароль восстанавливается, плохих надписей нет. Для информации: аналогичным способом убирается защита для всех остальных программ от AccentSoft Team.
Просмотров: 5849 | Комментариев: 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):
Спасибо за информацию, обязательно проверю.

Добавить комментарий
Заполните форму для добавления комментария
