
Исследование защиты программы TaskmgrPro

Скриншот программы TaskmgrPro
TaskmgrPro - плагин для стандартного Диспетчера задач Windows, значительно расширяющий его возможности. К списку стандартных вкладок Диспетчера добавляются функции работы с автозагрузкой, расшаренными ресурсами, соединениями TCP/IP, а также групповой запуск и остановка процессов и служб по заранее сформированным спискам. За самую минимальную лицензию требуется выложить почти тридцатку баксов. Делать мы этого, конечно, не будем, а сделаем что-нибудь другое, менее затратное по финансам.
Забираем с офсайта дистрибутив, устанавливаем, смотрим что получилось. При запуске Диспетчера задач в его окне появляются вкладки, а в строке меню дополнительный раздел, через который можно посмотреть информацию "О программе". Там красуется надпись о том, что программа не зарегистрирована.

Окно незарегистрированной программы
Весь остальной интерфейс мультиязычный, строки хранятся в языковых файлах, но этой строки там нет. Значит надо поискать в других местах, например, в ресурсах. Строка обнаруживается в файле TaskmgrProDll.dll, индекс этой строки 40135 или 9CC7h в шестнадцатеричной системе счисления.

Строка сообщения в ресурсах
Отправляем файл на дизассемблирование, когда анализ завершится, поищем в листинге упоминания о строке "9CC7h". Обнаружится вот такой код:
Code (Assembler) : Убрать нумерацию
- .text:5BD25A24 call sub_5BD26BF0
- .text:5BD25A29 mov byte ptr [ebp+var_4], 1
- ; Проверить статус регистрации
- .text:5BD25A2D cmp dword_5C01DAF0, 0
- ; Программа зарегистрирована
- .text:5BD25A34 jnz loc_5BD25B3C
- ; Загрузить строку из ресурсов
- .text:5BD25A3A push 9CC7h ; ArgList
- .text:5BD25A3F lea ecx, [ebp+var_4D4]
- .text:5BD25A45 push ecx ; int
- .text:5BD25A46 call sub_5BF2A4C0
- .text:5BD25A4B add esp, 8
- .text:5BD25A4E mov [ebp+var_6DC], eax
- .text:5BD25A54 mov edx, [ebp+var_6DC]
- .text:5BD25A5A mov [ebp+var_614], edx
- .text:5BD25A60 mov byte ptr [ebp+var_4], 2
- .text:5BD25A64 mov eax, [ebp+var_614]
- .text:5BD25A6A cmp dword ptr [eax+18h], 8

Перекрестные ссылки на переменную
Такой код есть, где в переменную записывается значение из EAX, но перед этим кодом еще выполняется множество проверок, и по факту дело до него даже не доходит. Патчить все эти проверки слишком хлопотно, да и неизвестно, на что они еще повлияют. Например, сперва может быть попытка получить строку серийника из реестра, затем какая-то обработка этой строки, ну и подобное. Надо искать другой вариант. Если еще раз внимательно посмотреть на список перекрестных ссылок на переменную со статусом регистрации, то можно заметить проверку, которая выполняется практически сразу после инициализации библиотеки. На скриншоте она выделена курсором.
Code (Assembler) : Убрать нумерацию
- .text:5BD43B29 cmp dword_5C01DAF0, 0
- .text:5BD43B30 jnz short loc_5BD43B3C
- .text:5BD43B32 call sub_5BD43A90
- .text:5BD43B37 call sub_5BF32D90
- .text:5BD43B3C loc_5BD43B3C:

Патч
Таким образом, сразу при старте программы она принимает статус зарегистрированной. Переменная инициализируется ненулевым значением, до других инициализаций, как я уже говорил, дело не доходит, а все дальнейшие проверки уже работают с правильным значением статуса.

Программа успешно "зарегистрирована"
Сохраняем изменения, пробуем запустить Диспетчер задач. В окне "О программе" указывается постоянная двухгодичная лицензия, в окне ввода серийника тоже, при переводе системного времени на пару месяцев вперед ничего не ломается. Цель достигнута. Таким же способом нейтрализуется защита и на других программах этого разработчика.
Просмотров: 1767 | Комментариев: 1
Метки: исследование защиты, процессы

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

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

CPU Disasm
Address Hex dump Command Comments
00426301 |. 8B42 0C MOV EAX,DWORD PTR DS:[EDX+0C]
00426304 |. FFD0 CALL EAX
00426306 |. 83C0 10 ADD EAX,10
00426309 |. 894424 14 MOV DWORD PTR SS:[ESP+14],EAX
0042630D |. 392D 90258C00 CMP DWORD PTR DS:[8C2590],EBP
00426313 |. 89AC24 840100 MOV DWORD PTR SS:[ESP+184],EBP
0042631A |. 0F85 A7000000 JNE 004263C7
00426320 |. 8D4C24 20 LEA ECX,[ESP+20]
00426324 |. 68 475E0000 PUSH 5E47 ; /Arg2 = 5E47
00426329 |. 51 PUSH ECX ; |Arg1
0042632A |. E8 61142800 CALL 006A7790 ; \CaptureSaver.006A7790
0042632F |. 83C4 08 ADD ESP,8
00426332 |. BB 08000000 MOV EBX,8
00426337 |. 3958 18 CMP DWORD PTR DS:[EAX+18],EBX
0042633A |. C68424 840100 MOV BYTE PTR SS:[ESP+184],1
00426342 |. 72 05 JB SHORT 00426349
00426344 |. 8B50 04 MOV EDX,DWORD PTR DS:[EAX+4]
00426347 |. EB 03 JMP SHORT 0042634C
Также и PresentationMarker