Blog. Just Blog

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

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Темная сторона Силы | Автор: ManHunter
Скриншот программы TaskmgrPro
Скриншот программы TaskmgrPro

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

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

Окно незарегистрированной программы
Окно незарегистрированной программы

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

Строка сообщения в ресурсах
Строка сообщения в ресурсах

Отправляем файл на дизассемблирование, когда анализ завершится, поищем в листинге упоминания о строке "9CC7h". Обнаружится вот такой код:
  1. .text:5BD25A24                 call    sub_5BD26BF0
  2. .text:5BD25A29                 mov     byte ptr [ebp+var_4], 1
  3. ; Проверить статус регистрации
  4. .text:5BD25A2D                 cmp     dword_5C01DAF0, 0
  5. ; Программа зарегистрирована
  6. .text:5BD25A34                 jnz     loc_5BD25B3C
  7. ; Загрузить строку из ресурсов
  8. .text:5BD25A3A                 push    9CC7h           ; ArgList
  9. .text:5BD25A3F                 lea     ecx, [ebp+var_4D4]
  10. .text:5BD25A45                 push    ecx             ; int
  11. .text:5BD25A46                 call    sub_5BF2A4C0
  12. .text:5BD25A4B                 add     esp, 8
  13. .text:5BD25A4E                 mov     [ebp+var_6DC], eax
  14. .text:5BD25A54                 mov     edx, [ebp+var_6DC]
  15. .text:5BD25A5A                 mov     [ebp+var_614], edx
  16. .text:5BD25A60                 mov     byte ptr [ebp+var_4], 2
  17. .text:5BD25A64                 mov     eax, [ebp+var_614]
  18. .text:5BD25A6A                 cmp     dword ptr [eax+18h], 8
Проверяется значение DWORD по адресу 5C01DAF0, если оно нулевое, то на форму выводится строка о незарегистрированной программе. Надо найти место в программе, где эта переменная иницализируется правильным значением.

Перекрестные ссылки на переменную
Перекрестные ссылки на переменную

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

Патч
Патч

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

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

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

Поделиться ссылкой ВКонтакте
Просмотров: 1626 | Комментариев: 1

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

Комментарии

Отзывы посетителей сайта о статье
xussr (04.02.2020 в 16:44):
На счет других прог этого (CaptureSaver) вот кусок
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

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0052 сек.) / Память: 4.5 Mb
Наверх