Исследование защиты программы TopStyle 4
Скриншот программы TopStyle 4
TopStyle - лучшая программа для работы с каскадными таблицами стилей CSS. Предоставляет разработчику такие мощные инструменты, как автодополнение, предпросмотр стилей во встроенном браузере, валидацию стилей, поддержку юникода, позволяет обновлять стили прямо на сервере и совместима со всеми современными браузерами. Но раз программа появилась в этом разделе, значит у нее все-таки есть недостатки. Она требует регистрацию, естественно, за некоторую сумму денег.
Для работы нам потребуется дистрибутив последней версии 4.0.0.62 и дизассемблер. Устанавливаем, запускаем. Налицо все признаки триальности: надпись "Trial" в заголовке программы, триальные надписи и ссылка на покупку в окне About, сообщения об ограничениях в редакторе и еще целая куча подобных прелестей.
Триальные надписи в окне "О программе"
Смотрим исполняемый файл. По характерным названиям секций визуально определяем, что он накрыт ASPack. Анализаторы исполняемых файлов это подтверждают.
Файл упакован ASPack
Распаковываем его или вручную, или с помощью инструментов типа QuickUnpack или Abstersiver, проверяем работоспособность после распаковки и загоняем в дизассемблер. Файл достаточно большой, так что времени на его полную обработку тоже уйдет немало. Когда дизассемблер закончит работу, начнем поиски "нехороших строк" и ссылающегося на них кода.
"Нехорошая строка"
Ссылающийся на строчку код:
Code (Assembler) : Убрать нумерацию
- ...
- .text:008F0E77 loc_8F0E77:
- ; Вызов функции проверки регистрации
- .text:008F0E77 call sub_8F0C3C
- .text:008F0E7C test al, al
- ; Если она вернула 1, то программа зарегистрирована
- .text:008F0E7E jnz short loc_8F0E8D
- .text:008F0E80 lea eax, [ebp+var_4]
- ; Ссылка на строку "trial mode (unregistered)"
- .text:008F0E83 mov edx, offset aTrialModeUnreg
- .text:008F0E88 call sub_405A00
- .text:008F0E8D
- .text:008F0E8D loc_8F0E8D:
- .text:008F0E8D cmp [ebp+var_4], 0
- ...
Code (Assembler) : Убрать нумерацию
- ...
- ; Вызов функции проверки регистрации
- .text:0096FB17 call sub_96F968
- .text:0096FB1C test al, al
- .text:0096FB1E jnz short loc_96FB2D
- .text:0096FB20 lea eax, [ebp+var_4]
- ; Ссылка на строку "Trial"
- .text:0096FB23 mov edx, offset aTrial ; " Trial"
- .text:0096FB28 call sub_405C60
- .text:0096FB2D loc_96FB2D:
- .text:0096FB2D mov eax, ebx
- .text:0096FB2F call sub_9749F0
- .text:0096FB34 test eax, eax
- ...
Code (Assembler) : Убрать нумерацию
- .text:00581E70 off_581E70 dd offset hInstance
- .text:00581E74 dd 0FCEFh ; <-- наш индекс
Code (Assembler) : Убрать нумерацию
- .data:009E8764 off_9E8764 dd offset off_581E70
Code (Assembler) : Убрать нумерацию
- .text:00972E44 push ebp
- .text:00972E45 mov ebp, esp
- .text:00972E47 xor ecx, ecx
- .text:00972E49 push ecx
- .text:00972E4A push ecx
- .text:00972E4B push ecx
- .text:00972E4C push ecx
- .text:00972E4D push ecx
- .text:00972E4E push ecx
- .text:00972E4F push ebx
- .text:00972E50 mov ebx, eax
- .text:00972E52 xor eax, eax
- .text:00972E54 push ebp
- .text:00972E55 push offset loc_972EFD
- .text:00972E5A push dword ptr fs:[eax]
- .text:00972E5D mov fs:[eax], esp
- .text:00972E60 push ebx
- .text:00972E61 lea edx, [ebp+var_4]
- ; Здесь выводится окно с сообщением о нарушении целостности, после этого
- ; программа закрывается
- .text:00972E64 mov eax, off_9E8764
- .text:00972E69 call sub_408254
- .text:00972E6E mov eax, [ebp+var_4]
- .text:00972E71 push eax
- .text:00972E72 lea eax, [ebp+var_10]
- .text:00972E75 call sub_9AF3E0
- .text:00972E7A mov eax, [ebp+var_10]
- .text:00972E7D mov [ebp+var_C], eax
- .text:00972E80 mov [ebp+var_8], 0Bh
- .text:00972E84 lea edx, [ebp+var_C]
- .text:00972E87 xor ecx, ecx
- .text:00972E89 pop eax
- .text:00972E8A call sub_40F35C
- .text:00972E8F push 10h
- .text:00972E91 lea eax, [ebp+var_18]
- .text:00972E94 call sub_9AF390
- .text:00972E99 mov eax, [ebp+var_18]
- .text:00972E9C lea edx, [ebp+var_14]
- .text:00972E9F call sub_40E3A4
- .text:00972EA4 mov eax, [ebp+var_14]
- .text:00972EA7 call sub_405E24
- .text:00972EAC push eax
- .text:00972EAD mov eax, [ebx]
- .text:00972EAF call sub_405E24
- .text:00972EB4 mov edx, eax
- .text:00972EB6 mov eax, off_9E8518
- .text:00972EBB mov eax, [eax]
- .text:00972EBD pop ecx
- .text:00972EBE call sub_4E86E0
- .text:00972EC3 mov eax, off_9E70DC
- .text:00972EC8 mov dword ptr [eax], 17h
- .text:00972ECE mov eax, off_9E8518
- .text:00972ED3 mov eax, [eax]
- .text:00972ED5 call sub_4E85E0
- .text:00972EDA xor eax, eax
- .text:00972EDC pop edx
- .text:00972EDD pop ecx
- .text:00972EDE pop ecx
- .text:00972EDF mov fs:[eax], edx
- .text:00972EE2 push offset loc_972F04
- .text:00972EE7 loc_972EE7:
- .text:00972EE7 lea eax, [ebp+var_18]
- .text:00972EEA mov edx, 3
- .text:00972EEF call sub_40598C
- .text:00972EF4 lea eax, [ebp+var_4]
- .text:00972EF7 call sub_405968
- .text:00972EFC retn
- .text:00972EFD loc_972EFD:
- .text:00972EFD jmp loc_4050F8
- .text:00972F02 jmp short loc_972EE7
- .text:00972F04 loc_972F04:
- .text:00972F04 pop ebx
- .text:00972F05 mov esp, ebp
- .text:00972F07 pop ebp
- .text:00972F08 retn
Code (Assembler) : Убрать нумерацию
- ...
- ; Тут какая-то движуха с вычислениями с плавающей запятой
- .text:00972FB2 call sub_48AEE8
- .text:00972FB7 fstp [ebp+var_10]
- .text:00972FBA wait
- .text:00972FBB push dword ptr [ebp+var_10+4]
- .text:00972FBE push dword ptr [ebp+var_10] ; double
- .text:00972FC1 call sub_410F28
- .text:00972FC6 add esp, 0FFFFFFF8h
- .text:00972FC9 fstp [esp+74h+var_74]
- .text:00972FCC wait
- ; Какая-то функция проверки
- .text:00972FCD call sub_8856EC
- .text:00972FD2 cmp eax, 3
- ; Этот условный переход надо пропатчить на безусловный
- .text:00972FD5 jl short loc_97300B
- ; Этот код выполняется, когда проверка целостности не пройдена
- .text:00972FD7 mov [ebp+var_1], 1
- .text:00972FDB lea eax, [ebp+var_18]
- ; Вызвать окно с сообщением об ошибке
- .text:00972FDE call sub_972E44
- .text:00972FE3 lea eax, [ebp+var_28]
- .text:00972FE6 mov dl, 1
- .text:00972FE8 call sub_41B710
- .text:00972FED lea edx, [ebp+var_28]
- ...
Просмотров: 6429 | Комментариев: 13
Метки: исследование защиты, CSS
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(15.07.2013 в 08:20):
В плане защиты 5-я линейка ничем не отличается от 4-й. Точно так же патчится больше десятка одинаковых функций проверки и на этом все. Я даже нарисовал для себя универсальный патч, который работал на 4-й и продолжает работать на 5-й версии.
brute
(15.07.2013 в 07:06):
Отладка новых версий осложняется тем, что нет сообщения о неправильном ключе. Пропатчил переходы в трех местах, убрал наг-скрин (ввод пароля) и триальный функционал. Осталасть строка о триальности в строке состояния - удалил её из ресурсов. Вроде работает, но "осадочек" остался - в about пишет о триале и не удалось отлавить проверку правильного ключа..
ManHunter
(22.11.2010 в 18:46):
Новые версии ничем не запакованы и в них нет проверки целостности, оставлена только регистрация. К чему бы это?
ManHunter
(13.05.2010 в 07:56):
На руборде посмотри, там версия не самая последняя, но точно рабочая.
Артем
(13.05.2010 в 07:40):
ManHunter, можно ли получить работающий пропатченый файл? Я бы и официальный купил, рублей за 300 :) Яндекс.деньги есть, могу скинуть на телефон. artem_собака_kulikov.ru
Буду очень признателен.
Буду очень признателен.
ManHunter
(24.07.2009 в 23:20):
Варезная IDA 5.2, более новые на паблик не утекали. А как патчить, так я тут даже не знаю что объяснять. У hiew очень подробная документация на русском языке, основные доступные клавиши подсвечены в меню.
Gunter
(24.07.2009 в 21:15):
ManHunter
А какая версия у вас ИДЫ?
И можно было бы пару статей именно по патчингу чтоб от нахождения до патча, так сказать весь цыкл производства ))
А какая версия у вас ИДЫ?
И можно было бы пару статей именно по патчингу чтоб от нахождения до патча, так сказать весь цыкл производства ))
ManHunter
(23.07.2009 в 14:43):
Gunter, я в HIEW обычно патчу, там удобнее.
Gunter
(23.07.2009 в 01:05):
Уважаемый ManHunter, супер статьи, читаю все с большим интересом.
Но могли бы вы написать хотя бы в одной, как нужно патчить, а то увы в этом не силен, это делается прямо в IDA или другими способами?
Но могли бы вы написать хотя бы в одной, как нужно патчить, а то увы в этом не силен, это делается прямо в IDA или другими способами?
ManHunter
(21.07.2009 в 14:30):
hexbear, это распаковщик ASPack от PE_Kill. Прицепил в аттаче.
SAY, поправил, спасибо.
SAY, поправил, спасибо.
hexbear
(21.07.2009 в 11:46):
Abstersiver - это что такое и где его найти?
SAY
(20.07.2009 в 12:26):
P.S. "ссылающийся код в сделан виде такой конструкции:"
Может: ссылающийся код сделан в виде такой конструкции:?
Может: ссылающийся код сделан в виде такой конструкции:?
SAY
(20.07.2009 в 12:25):
ManHunter, а есть ли такая проверка целостности в природе, которую НУ ОЧЕНЬ трудно обойти?
Добавить комментарий
Заполните форму для добавления комментария