Исследование защиты программы CoinManage Deluxe
Скриншот программы CoinManage Deluxe
Программа CoinManage Deluxe - каталогизатор монет с готовой базой, в основном по монетам США, Канады и Великобритании. На ознакомление дается 30 дней, после чего требуется оплата. Лично я считаю, что лучше держать в запасе вариант программы, которая эту оплату не требует. А то мало ли что, как говорил один политический деятель: "Ночью наши ученые чуть-чуть изменят гравитационное поле Земли..."
Забираем с офсайта дистрибутив. Размер файла внушительный, но это из-за большого объема каталогов с картинками. Устанавливаем, смотрим. Главный исполняемый файл ничем не упакован, отправляем его в дизассемблер. При запуске программы первым делом появляется триальное окно:
Триальное окно
А в окне "О программе" наблюдается надпись, что программа не зарегистрирована.
Окно "О программе"
Строка обнаруживается в ресурсах под индексом 543 или 21Fh в шестнадцатеричной системе. Рядышком строка, которая должна появляться у зарегистрированной программы. У нее, соответственно, будет индекс 542 или 21Eh.
Строки в ресурсах
Поищем в листинге дизассемблера код, где каким-то образом используются эти индексы. Обнаружится следующее:
Code (Assembler) : Убрать нумерацию
- .text:00402690 mov [ebp-224h], ebx
- .text:00402696 mov ecx, offset dword_AD5DD0
- ; Вызвать функцию проверки
- .text:0040269B call sub_43E3A0
- .text:004026A0 lea ecx, [ebx+578h]
- ; Если EAX=0, то вывести надпись о незарегистрированной версии
- .text:004026A6 test eax, eax
- .text:004026A8 jnz short loc_4026B9
- ; Индекс строки в ресурсах
- .text:004026AA push 21Fh
- .text:004026AF call loc_403F50
- .text:004026B4 jmp loc_402761
- .text:004026B9 ; ---------------------------------------------
- .text:004026B9 loc_4026B9:
- ; Индекс строки в ресурсах
- .text:004026B9 push 21Eh
- .text:004026BE call loc_403F50
- .text:004026C3 call sub_72BC5E
- .text:004026C8 mov ecx, eax
- .text:004026CA test ecx, ecx
- .text:004026CC jz loc_402C0C
- .text:004026D2 mov eax, [ecx]
- .text:004026D4 call dword ptr [eax+0Ch]
- .text:004026D7 lea esi, [eax+10h]
- .text:004026DA mov [ebp-228h], esi
- .text:004026E0 xor eax, eax
- .text:004026E2 mov dword ptr [ebp-4], 0
Code (Assembler) : Убрать нумерацию
- .text:0043E3A0 sub_43E3A0 proc near
- .text:0043E3A0 push ebp
- .text:0043E3A1 mov ebp, esp
- .text:0043E3A3 sub esp, 14h
- .text:0043E3A6 mov eax, dword_AC4080
- .text:0043E3AB xor eax, ebp
- .text:0043E3AD mov [ebp+var_4], eax
- .text:0043E3B0 push esi
- ; Какой-то идентификатор приложения
- .text:0043E3B1 push offset aC6hiocca7xljmb
- ; "c6hiocca7xljmbpq2gnzayzbttjnu3a"
- .text:0043E3B6 mov esi, ecx
- .text:0043E3B8 mov [ebp+var_14], 10h
- .text:0043E3BF mov [ebp+var_C], 5Ah
- .text:0043E3C6 mov [ebp+var_8], 0Eh
- .text:0043E3CD mov [ebp+var_10], 1
- .text:0043E3D4 call ds:TA_GetHandle
- .text:0043E3DA lea ecx, [ebp+var_14]
- .text:0043E3DD push ecx
- .text:0043E3DE push eax
- ; Проверить подлинность
- .text:0043E3DF call ds:TA_IsGenuineEx
- .text:0043E3E5 add esp, 0Ch
- .text:0043E3E8 test eax, eax
- ; Регистрация имеется
- .text:0043E3EA jz short loc_43E416
- ; ... и еще три варианта развития событий с положительным результатом
- .text:0043E3EC cmp eax, 16h
- .text:0043E3EF jz short loc_43E416
- .text:0043E3F1 cmp eax, 4
- .text:0043E3F4 jz short loc_43E416
- .text:0043E3F6 cmp eax, 15h
- .text:0043E3F9 jz short loc_43E416
- ; Регистрации нет
- .text:0043E3FB mov dword ptr [esi+58Ch], 0
- .text:0043E405 xor eax, eax
- .text:0043E407 pop esi
- .text:0043E408 mov ecx, [ebp+var_4]
- .text:0043E40B xor ecx, ebp
- .text:0043E40D call sub_8A2233
- .text:0043E412 mov esp, ebp
- .text:0043E414 pop ebp
- .text:0043E415 retn
- .text:0043E416 ; ---------------------------------------
- .text:0043E416 loc_43E416:
- .text:0043E416 mov ecx, [ebp+var_4]
- ; Регистрация имеется
- .text:0043E419 mov eax, 1
- .text:0043E41E mov dword ptr [esi+58Ch], 1
- .text:0043E428 xor ecx, ebp
- .text:0043E42A pop esi
- .text:0043E42B call sub_8A2233
- .text:0043E430 mov esp, ebp
- .text:0043E432 pop ebp
- .text:0043E433 retn
- .text:0043E433 sub_43E3A0 endp
Code (Assembler) : Убрать нумерацию
- .idata:0091B7B8 ;
- .idata:0091B7B8 ; Imports from TurboActivate.dll
- .idata:0091B7B8 ;
- .idata:0091B7B8 extrn TA_GetHandle:dword
- .idata:0091B7BC extrn TA_TrialDaysRemaining:dword
- .idata:0091B7C0 extrn TA_Deactivate:dword
- .idata:0091B7C4 extrn TA_IsGenuineEx:dword
- .idata:0091B7C8 extrn TA_UseTrial:dword
- .idata:0091B7CC extrn TA_GetPKey:dword
Code (Assembler) : Убрать нумерацию
- .text:10023D28 TA_IsGenuineEx proc near
- .text:10023D28 push 70h
- .text:10023D2A mov eax, offset byte_100AE232
- .text:10023D2F call sub_1005350C
- .text:10023D34 mov esi, [ebp+0Ch]
- .text:10023D37 test esi, esi
- .text:10023D39 jz loc_10023DCF
- .text:10023D3F push 10h
- .text:10023D41 pop edi
- .text:10023D42 cmp [esi], edi
- .text:10023D44 jnz loc_10023DCF
- .text:10023D4A mov ecx, [ebp+8]
- .text:10023D4D call sub_1002379F
- .text:10023D52 mov ebx, eax
- .text:10023D54 test ebx, ebx
- .text:10023D56 jnz short loc_10023D5C
- .text:10023D58 push 1Bh
- .text:10023D5A jmp short loc_10023DD1
- .text:10023D5C ; ----------------------------------------
- .text:10023D5C loc_10023D5C:
- .text:10023D5C lea eax, [ebx+9Ch]
- .text:10023D62 mov ecx, eax
- .text:10023D64 mov [ebp-7Ch], eax
- .text:10023D67 call sub_10019DA9
- .text:10023D6C cmp dword ptr [esi+4], 3
- .text:10023D70 ja short loc_10023DBC
- .text:10023D72 push 68h
- .text:10023D74 lea eax, [ebp-78h]
- .text:10023D77 push 0
- .text:10023D79 push eax
- .text:10023D7A call sub_1007E7C0
- .text:10023D7F add esp, 0Ch
- .text:10023D82 lea ecx, [ebp-78h]
- .text:10023D85 push dword ptr [ebx+98h]
- .text:10023D8B push ebx
- .text:10023D8C call sub_10003E6C
- .text:10023D91 mov eax, [esi+4]
- .text:10023D94 shr eax, 1
- .text:10023D96 and al, 1
- .text:10023D98 movzx eax, al
- .text:10023D9B push eax
- .text:10023D9C mov al, [esi+4]
- .text:10023D9F and al, 1
- .text:10023DA1 movzx eax, al
- .text:10023DA4 push eax
- .text:10023DA5 push 0
- .text:10023DA7 push dword ptr [esi+0Ch]
- .text:10023DAA push dword ptr [esi+8]
- .text:10023DAD call sub_1000648E
- .text:10023DB2 lea ecx, [ebp-78h]
- .text:10023DB5 mov edi, eax
- .text:10023DB7 call sub_1001072A
- .text:10023DBC loc_10023DBC:
- .text:10023DBC mov ecx, [ebp-7Ch]
- .text:10023DBF mov dword ptr [ebp-4], 1
- .text:10023DC6 call sub_10002DDE
- .text:10023DCB mov eax, edi
- .text:10023DCD jmp short loc_10023DD2
- .text:10023DCF ; ------------------------------------------
- .text:10023DCF loc_10023DCF:
- .text:10023DCF push 13h
- .text:10023DD1 loc_10023DD1:
- .text:10023DD1 pop eax
- .text:10023DD2 loc_10023DD2:
- .text:10023DD2 call sub_100534B6
- .text:10023DD7 retn
- .text:10023DD7 TA_IsGenuineEx endp
Программа успешно "зарегистрирована"
Проверяем результат. Триальное окно при старте программы исчезло, в окне "О программе" красуется надпись о регистрации программы, перевод часов на пару месяцев вперед на работоспособность не влияет. Цель достигнута.
Просмотров: 854 | Комментариев: 4
Метки: исследование защиты
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Илья
(25.05.2023 в 11:46):
Это не велосипедный замок. Тут и контроль целостности распаковщика и антиотладочные приёмы.
ManHunter
(25.04.2023 в 16:31):
Я велосипедными замками не занимаюсь
Илья
(25.04.2023 в 15:41):
Здравствуйте. Был ли у вас опыт взлома программ, накрытыми CodeSafe?
voffka
(03.04.2023 в 09:36):
Довольно распространенная система лицензирования.
На оф. сайте можно много чего интересного почерпнуть
https://wyday.com/limelm/help/...ing-started/
На оф. сайте можно много чего интересного почерпнуть
https://wyday.com/limelm/help/...ing-started/
Добавить комментарий
Заполните форму для добавления комментария