Исследование защиты программы BurnAware Professional
Скриншот программы BurnAware Professional
BurnAware Professional - мультимедийный комбайн для работы с CD и DVD дисками, а также образами дисков. Состоит из набора отдельных специализированных утилит, запускаемых из единой оболочки. Без регистрации работа большинства компонентов ограничена по времени, хотя в принципе очень странно делать платным подобный софт, ведь бесплатных аналогов предостаточно.
Забираем с офсайта дистрибутив (или тут) самой максимальной профессиональной редакции, устанавливаем, смотрим что и как.
Триальное окно
При запуске появляется триальное окно со счетчиком оставшихся дней и предложением оплатить дальнейшие услуги.
Окно "О программе"
В окне "О программе" отображается сообщение о незарегистрированной версии. Отправные точки есть. Исполняемый файл ничем не упакован, отправляем его в дизассемблер. Поиском по строчке "Unregistered" выходим на следующий код:
Code (Assembler) : Убрать нумерацию
- .text:0064A7DB mov eax, [ebp+var_4]
- .text:0064A7DE call sub_524D5C
- .text:0064A7E3 mov eax, [ebp+var_4]
- .text:0064A7E6 mov eax, [eax+3E8h]
- .text:0064A7EC mov edx, offset aBurnawareProfe
- ; "BurnAware Professional"
- .text:0064A7F1 call sub_51CE2C
- .text:0064A7F6 lea eax, [ebp+var_48]
- .text:0064A7F9 push eax
- .text:0064A7FA mov ecx, offset aUnregisteredEv
- ; "Unregistered evaluation version"
- .text:0064A7FF mov edx, offset aUnregistered
- ; "Unregistered"
- .text:0064A804 mov eax, offset off_64AB68
- .text:0064A809 call sub_646994
- .text:0064A80E mov edx, [ebp+var_48]
- .text:0064A811 mov eax, [ebp+var_4]
- .text:0064A814 mov eax, [eax+408h]
- .text:0064A81A call sub_51CE2C
- .text:0064A81F mov eax, [ebp+var_4]
- .text:0064A822 mov eax, [eax+408h]
- .text:0064A828 mov eax, [eax+74h]
- .text:0064A82B mov edx, 0D5h
- .text:0064A830 call sub_4EFA34
- .text:0064A835 mov eax, [ebp+var_4]
- .text:0064A838 mov eax, [eax+408h]
- .text:0064A83E mov eax, [eax+84h]
- .text:0064A844 mov ecx, [eax+0Ch]
- .text:0064A847 add ecx, ecx
- .text:0064A849 mov eax, [ebp+var_4]
- .text:0064A84C mov eax, [eax+408h]
- .text:0064A852 mov eax, [eax+84h]
- .text:0064A858 mov edx, 1
- .text:0064A85D call sub_52D5D0
- .text:0064A862 xor eax, eax
- .text:0064A864 mov [ebp+var_C], eax
- .text:0064A867 mov dl, 1
- .text:0064A869 mov eax, ds:off_4E4328
- .text:0064A86E call sub_4E5390
- .text:0064A873 mov [ebp+var_8], eax
- .text:0064A876 xor eax, eax
- .text:0064A878 push ebp
- .text:0064A879 push offset loc_64AAC0
- .text:0064A87E push dword ptr fs:[eax]
- .text:0064A881 mov fs:[eax], esp
- .text:0064A884 mov edx, 80000001h
- .text:0064A889 mov eax, [ebp+var_8]
- .text:0064A88C call sub_4E5478
- .text:0064A891 mov edx, offset aSoftwareBurnaw
- ; "Software\\BurnAware\\License"
- .text:0064A896 mov eax, [ebp+var_8]
- ; Запросить ключ реестра
- .text:0064A899 call sub_4E5610
- .text:0064A89E test al, al
- ; Ключа нет, программа не зарегистрирована
- .text:0064A8A0 jz loc_64AAAA
- .text:0064A8A6 mov edx, offset off_64AE7C
- .text:0064A8AB mov eax, [ebp+var_8]
- ; Проверить длину строки регистрации
- .text:0064A8AE call sub_4E59F8
- .text:0064A8B3 cmp eax, 5Ah
- ; Длина меньше 5Ah символов, программа не зарегистрирована
- .text:0064A8B6 jle loc_64AAAA
- .text:0064A8BC push offset dword_64AE90
- .text:0064A8C1 lea edx, [ebp+var_54]
- .text:0064A8C4 xor eax, eax
- .text:0064A8C6 call sub_405AB0
- .text:0064A8CB mov eax, [ebp+var_54]
- .text:0064A8CE lea edx, [ebp+var_50]
- .text:0064A8D1 call sub_423AAC
- ; Запустить внешнюю проверку регистрации
- .text:0064A8D6 push [ebp+var_50]
- .text:0064A8D9 push offset aAsprlib_exe4
- ; "asprlib.exe\" 4"
- .text:0064A8DE lea eax, [ebp+var_4C]
- .text:0064A8E1 mov edx, 3
- .text:0064A8E6 call sub_4093A4
- .text:0064A8EB mov eax, [ebp+var_4C]
- .text:0064A8EE lea edx, [ebp+var_C]
- .text:0064A8F1 call sub_649E0C
- .text:0064A8F6 mov eax, [ebp+var_C]
- .text:0064A8F9 xor edx, edx
- .text:0064A8FB push edx
- .text:0064A8FC push eax
- .text:0064A8FD lea eax, [ebp+var_5C]
- .text:0064A900 call sub_422CB8
- .text:0064A905 mov eax, [ebp+var_5C]
- .text:0064A908 mov dx, [eax+6]
- .text:0064A90C lea eax, [ebp+var_58]
- .text:0064A90F call sub_4090D8
- .text:0064A914 mov eax, [ebp+var_58]
- .text:0064A917 call sub_423028
- ; Проверить значение кода возврата
- .text:0064A91C sub eax, 2
- .text:0064A91F jz short loc_64A92F
- .text:0064A921 sub eax, 2
- .text:0064A924 jz loc_64A9EF
- .text:0064A92A jmp loc_64AAAA
- .text:0064A92F ; -----------------------------------------
- .text:0064A92F loc_64A92F:
- .text:0064A92F lea eax, [ebp+var_60]
- .text:0064A932 push eax
- .text:0064A933 mov ecx, offset off_64AECC
- .text:0064A938 mov edx, offset off_64AF00
- .text:0064A93D mov eax, offset aV3_1_2 ; "v3.1.2"
- .text:0064A942 call sub_646994
- .text:0064A947 mov edx, [ebp+var_60]
- .text:0064A94A mov eax, [ebp+var_4]
- .text:0064A94D mov eax, [eax+408h]
- .text:0064A953 call sub_51CE2C
- .text:0064A958 lea eax, [ebp+var_64]
- .text:0064A95B push eax
- .text:0064A95C mov ecx, offset aSingleUserLice
- ; "Single user license"
- .text:0064A961 mov edx, offset aSingle ; "Single"
- .text:0064A966 mov eax, offset off_64AB68
- .text:0064A96B call sub_646994
- .text:0064A970 mov edx, [ebp+var_64]
- .text:0064A973 mov eax, [ebp+var_4]
- .text:0064A976 mov eax, [eax+400h]
Начинаем патчить. Поскольку никаких лицензий у нас не было и нет, то патчим два условных перехода по адресам 0064A8A0 и 0064A8B6. После этого заменяем любой из условных переходов по адресам 0064A91F или 0064A924 на безусловный. Сохраняем изменения, запускаем.
Окно "О программе"
Триальное окно при старте осталось, но окно "О программе" заметно преобразилось. Предположу, что за первоначальную проверку должен отвечать похожий на этот код. Поищем другие вхождения строки "asprlib.exe" и участки кода, где это приложение запускается с параметром "4". Обнаруживается очень похожий код:
Code (Assembler) : Убрать нумерацию
- .itext:00661007 mov edx, off_66B210
- ; Проверить наличие лицензии
- .itext:0066100D mov edx, [edx]
- .itext:0066100F call sub_409454
- .itext:00661014 jnz loc_66121E
- .itext:0066101A lea eax, [ebp-1Ch]
- .itext:0066101D call sub_649D08
- .itext:00661022 mov eax, [ebp-1Ch]
- .itext:00661025 mov edx, off_66B434
- .itext:0066102B mov edx, [edx]
- .itext:0066102D call sub_409454
- .itext:00661032 jnz loc_66121E
- .itext:00661038 push offset dword_6612DC
- .itext:0066103D lea edx, [ebp-28h]
- .itext:00661040 xor eax, eax
- .itext:00661042 call sub_405AB0
- .itext:00661047 mov eax, [ebp-28h]
- .itext:0066104A lea edx, [ebp-24h]
- .itext:0066104D call sub_423AAC
- ; Запустить внешнюю проверку регистрации
- .itext:00661052 push dword ptr [ebp-24h]
- .itext:00661055 push offset aAsprlib_exe4_0
- ; "asprlib.exe\" 4"
- .itext:0066105A lea eax, [ebp-20h]
- .itext:0066105D mov edx, 3
- .itext:00661062 call sub_4093A4
- .itext:00661067 mov eax, [ebp-20h]
- .itext:0066106A mov edx, off_66B408
- .itext:00661070 mov edx, [edx]
- .itext:00661072 add edx, 638h
- .itext:00661078 call sub_649E0C
- .itext:0066107D mov eax, off_66B408
- .itext:00661082 mov eax, [eax]
- .itext:00661084 mov eax, [eax+638h]
- .itext:0066108A xor edx, edx
- .itext:0066108C push edx
- .itext:0066108D push eax
- .itext:0066108E lea eax, [ebp-30h]
- .itext:00661091 call sub_422CB8
- .itext:00661096 mov eax, [ebp-30h]
- .itext:00661099 mov dx, [eax+6]
- .itext:0066109D lea eax, [ebp-2Ch]
- .itext:006610A0 call sub_4090D8
- .itext:006610A5 mov eax, [ebp-2Ch]
- .itext:006610A8 call sub_423028
- ; Проверить значение кода возврата
- .itext:006610AD sub eax, 2
- .itext:006610B0 jz short loc_6610B7
- .itext:006610B2 sub eax, 2
- .itext:006610B5 jnz short loc_6610D5
- .itext:006610B7 loc_6610B7:
- .itext:006610B7 mov eax, off_66B408
- .itext:006610BC mov eax, [eax]
- .itext:006610BE add eax, 634h
- .itext:006610C3 mov edx, off_66B040
- .itext:006610C9 mov edx, [edx]
Но это только для оболочки, каждую другую компоненту приложения придется доводить до ума точно таким же образом, оба фрагмента кода там аналогичные. Да, процесс займет какое-то время, но результат гарантирован.
Просмотров: 428 | Комментариев: 0
Метки: исследование защиты, мультимедиа
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Комментариeв нет
Добавить комментарий
Заполните форму для добавления комментария