Исследование защиты программы RAR Password Recovery Magic


Скриншот программы RAR Password Recovery Magic

Программа RAR Password Recovery Magic предназначена для восстановления забытых паролей к архивам RAR. Скорость работы существенно уступает топовым аналогам, так что программа сгодится исключительно для экспериментов. Пытается подобрать пароли по заранее созданному словарю, а также прямым перебором (brute-force). Настройки скудноваты, видимо вся энергия авторов ушла на написание интерфейса с поддержкой графического скина, или же в свое время это была чья-то лабораторная по информатике. К минусам можно отнести еще и шароварность.

Скачиваем дистрибутив, устанавливаем, запускаем. На запрос регистрации введем любые неправильные данные, получим сообщение "You are unsuccessful!". Запускающий файл ничем не упакован, строка сообщения обнаруживается в секции данных:
CODE:004A2B1C _str_You_are_unsucce dd 0FFFFFFFFh           ; _top
CODE:004A2B1C                 dd 21                   ; Len
CODE:004A2B1C                 db 'You are unsuccessful!',0; Text

На нее ссылается указатель:
DATA:004ACB0C off_4ACB0C      dd offset _str_You_are_unsucce.Text
DATA:004ACB0C ; DATA XREF: sub_4A3EAC+1DA
DATA:004ACB0C ; sub_4A4170+16C...

На него в свою очередь ссылается следующий указатель:
DATA:004AD118 off_4AD118      dd offset off_4ACB0C
    ; DATA XREF: _TCode_btnOkClick+DA

И только на этот указатель есть ссылка из секции кода:
...
CODE:004A4EFD                 call    @Controls@TControl@GetText$qqrv
; Controls::TControl::GetText(void)
CODE:004A4F02                 mov     eax, [ebp+var_4]
CODE:004A4F05                 push    eax
CODE:004A4F06                 lea     edx, [ebp+var_8]
CODE:004A4F09                 mov     eax, [ebx+308h]
CODE:004A4F0F                 call    @Controls@TControl@GetText$qqrv
; Controls::TControl::GetText(void)
CODE:004A4F14                 mov     edx, [ebp+var_8]
CODE:004A4F17                 mov     eax, ds:off_4ACC58
CODE:004A4F1C                 mov     eax, [eax]
CODE:004A4F1E                 mov     eax, [eax+370h]
CODE:004A4F24                 pop     ecx
; Вызвать функцию проверки введенных данных
CODE:004A4F25                 call    @Sqledit@EditSQL$qqrp16Classes
CODE:004A4F2A                 test    al, al
; Если функция вернула AL = 0, то введенные данные неправильные
CODE:004A4F2C                 jz      short loc_4A4FA3
; Программа успешно зарегистрирована
CODE:004A4F2E                 mov     edx, ds:off_4ACDD8
CODE:004A4F34                 mov     edx, [edx]
CODE:004A4F36                 mov     eax, ds:off_4ACC58
CODE:004A4F3B                 mov     eax, [eax]
...
; Часть кода пропущена
...
CODE:004A4FA1                 jmp     short loc_4A4FC6
CODE:004A4FA3 ; ----------------------------------------------------
CODE:004A4FA3 loc_4A4FA3:
; Показать сообщение о неправильном серийном номере
CODE:004A4FA3                 push    10h             ; uType
CODE:004A4FA5                 mov     eax, ds:off_4ACE88
CODE:004A4FAA                 mov     eax, [eax]
CODE:004A4FAC                 call    @System@@LStrToPChar$qqrx17System
; System::__linkproc__ LStrToPChar(System::AnsiString)
CODE:004A4FB1                 push    eax             ; lpCaption
CODE:004A4FB2                 mov     eax, ds:off_4AD118
CODE:004A4FB7                 mov     eax, [eax]
CODE:004A4FB9                 call    @System@@LStrToPChar$qqrx17System
; System::__linkproc__ LStrToPChar(System::AnsiString)
CODE:004A4FBE                 push    eax             ; lpText
CODE:004A4FBF                 push    0               ; hWnd
CODE:004A4FC1                 call    MessageBoxA_0_0
...

Теперь запустим программу под отладчиком и поставим точку останова по адресу 004A4F25. Введем в окно регистрации ваше имя и любой неправильный серийный номер, отладчик остановится на вызове функции проверки. Попробуем пройти ее пошагово. В самом начале функции на стеке видны введенное имя и неправильный серийник, а потом на основе введенного имени по адресу 00490F76 производятся какие-то расчеты.


Пошаговая трассировка

Если внимательно наблюдать за стеком, то можно заметить, что после этого в нем появилось еще одно интересное значение, очень похожее на какой-то серийный номер:


Серийный номер найден

Далее в регистры EAX и EDX заносится новая строка и введенный серийный номер, и по адресу 00490F81 выполняется их сравнение. Предположим, что это и есть правильный серийный номер для введенного имени. Скопируем его и повторим регистрацию, но уже с ним.


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

Как видим, наша догадка подтвердилась и регистрация прошла успешно. Теперь можно побаловаться и самой программой, чтобы убедиться в ее несостоятельности. Вот такая никому не нужная программа с никчемной защитой. Дорогие товарищи программисты, пожалуйста, никогда не пишите подобный софт! В интернете и без того слишком много хлама!
Теги:
защита, взлом
Добавлено: 21 Сентября 2013 02:43:45 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...