Исследование защиты программы ScriptCryptor Compiler
Скриншот программы ScriptCryptor Compiler
Программа ScriptCryptor Compiler от Abyssmedia предназначена для компиляции скриптов VBScript и JavaScript в самостоятельные EXE-файлы, при этом их исходные тексты шифруются. Откомпилированные скрипты могут работать без вспомогательных системных файлов cscript.exe и wscript.exe, при выполнении не создается никаких временных файлов, все данные берутся из памяти. Об остальных функциях, если интересно, можете почитать на сайте. Ну а поскольку программа ScriptCryptor Compiler появилась в этом разделе блога, значит что-то с ней не так.
Качаем дистрибутив, устанавливаем, запускаем. Незарегистрированная версия компилятора создает EXE-файлы с напоминалкой, что они сделаны триальной версией. Не смертельно, конечно, но напрягает. Открываем окно регистрации, вводим левые данные. Здесь разработчики не наступили на традиционные грабли, программа молча принимает любое имя и серийник без всяких сообщений, даже куда-то их добросовестно сохраняет. Теперь посмотрим исполняемый файл. Он упакован UPX без всяких модификаций, распаковывается обычным "upx -d". Переходим к внутренностям файла. Единственная видимая зацепка для исследования - триальная надпись "UNREGISTERED COPY" в строке статуса программы, но она находится не в коде, а в ресурсах, причем не просто в ресурсах, а в формах Delphi. Можно потратить некоторое время, гоняя программу в DeDe, а можно наудачу предположить, что где-то есть строка типа "REGISTERED COPY" или типа того. И действительно, по паттерну "registered" находится что-то похожее:
Строка о зарегистрированности программы
На нее ссылается следующий код:
Code (Assembler) : Убрать нумерацию
- .text:00504963 mov edx, off_534538
- .text:00504969 mov edx, [edx+4]
- .text:0050496C mov eax, off_534538
- .text:00504971 mov eax, [eax]
- ; Вызвать какую-то функцию проверки
- .text:00504973 call sub_528688
- ; Если она вернула в AL не ноль, то программа считается зарегистрированной
- .text:00504978 test al, al
- .text:0050497A jz short loc_5049D3
- .text:0050497C mov edx, off_534538
- .text:00504982 mov edx, [edx]
- .text:00504984 mov eax, [ebx+380h]
- .text:0050498A call sub_45F530
- .text:0050498F mov edx, offset aRegisteredVe_1
- ; Строка "Registered Version"
- .text:00504994 mov eax, [ebx+388h]
- .text:0050499A call sub_45F530
- .text:0050499F xor edx, edx
- .text:005049A1 mov eax, [ebx+370h]
- .text:005049A7 call sub_45F420
- .text:005049AC xor edx, edx
- .text:005049AE mov eax, [ebx+360h]
- .text:005049B4 mov ecx, [eax]
Code (Assembler) : Убрать нумерацию
- .text:00528688 push ebp
- .text:00528689 mov ebp, esp
- .text:0052868B xor ecx, ecx
- .text:0052868D push ecx
- .text:0052868E push ecx
- .text:0052868F push ecx
- .text:00528690 push ecx
- .text:00528691 push ebx
- .text:00528692 push esi
- .text:00528693 push edi
- .text:00528694 mov [ebp+var_4], edx
- .text:00528697 mov eax, [ebp+var_4]
- .text:0052869A call sub_40541C
- .text:0052869F xor eax, eax
- .text:005286A1 push ebp
- .text:005286A2 push offset loc_528714
- .text:005286A7 push dword ptr fs:[eax]
- .text:005286AA mov fs:[eax], esp
- .text:005286AD xor ebx, ebx
- ; Вот здесь ссылка на интересный блок данных. Он представляет собой большое
- ; количество шестнадцатеричных цифр.
- .text:005286AF mov esi, offset aE9210182c802b9
- ; "e9210182c802b90244f6d8b9c2f56036ca39a17"...
- .text:005286B4 lea eax, [ebp+var_8]
- .text:005286B7 call sub_404F9C
- .text:005286BC lea ecx, [ebp+var_C]
- .text:005286BF mov edx, [ebp+var_4]
- .text:005286C2 mov eax, 103h
- ; Если дошагать сюда под отладчиком, то видно, что берется введенный
- ; серийный номер, и из него вычисляется 64-битное число. Его видно в
- ; стеке. Анализаторы криптоалгоритмов показывают наличие в коде функции
- ; расчета MD5, и этот расчет выполняется в следующей функции.
- .text:005286C7 call sub_481870
- ; Проверим нашу догадку, рассчитав MD5 от введенного "левого" серийника
- ; при помощи любой сторонней программы, строка будет в точности равна
- ; вычисленной в предыдущей функции. Значит для проверки берется хэш MD5
- ; от введенного серийного номера.
- .text:005286CC xor edi, edi
- .text:005286CE loc_5286CE:
- .text:005286CE lea eax, [ebp+var_10]
- .text:005286D1 mov edx, edi
- .text:005286D3 add edx, edx
- .text:005286D5 add edx, edx
- .text:005286D7 lea edx, [esi+edx*8]
- .text:005286DA mov ecx, 20h
- ; Взять от блока данных 32 символа
- .text:005286DF call sub_40520C
- .text:005286E4 mov eax, [ebp+var_10]
- .text:005286E7 mov edx, [ebp+var_C]
- ; Сравнить блок с рассчитанным хэшем от серийного номера
- .text:005286EA call sub_4053C4
- ; Если не совпадает, то взять сделующие 32 символа и т.д. до окончания
- ; блока данных
- .text:005286EF jnz short loc_5286F3
- ; Найдено совпадение
- .text:005286F1 mov bl, 1
- .text:005286F3 loc_5286F3:
- .text:005286F3 inc edi
- .text:005286F4 cmp edi, 65h
- ; Проверено 65h блоков по 32 байта?
- .text:005286F7 jnz short loc_5286CE
- ; Совпадений не найдено, EAX=0 и на выход
- .text:005286F9 xor eax, eax
- .text:005286FB pop edx
- .text:005286FC pop ecx
- .text:005286FD pop ecx
- .text:005286FE mov fs:[eax], edx
- .text:00528701 push offset loc_52871B
- .text:00528706 loc_528706:
- .text:00528706 lea eax, [ebp+var_10]
- .text:00528709 mov edx, 4
- .text:0052870E call sub_404FC0
- .text:00528713 retn
- .text:00528714 ; --------------------------------------------------
- .text:00528714 loc_528714:
- .text:00528714 jmp loc_404830
- .text:00528719 ; --------------------------------------------------
- .text:00528719 jmp short loc_528706
- .text:0052871B ; --------------------------------------------------
- .text:0052871B loc_52871B:
- .text:0052871B mov eax, ebx
- .text:0052871D pop edi
- .text:0052871E pop esi
- .text:0052871F pop ebx
- .text:00528720 mov esp, ebp
- .text:00528722 pop ebp
- .text:00528723 retn
Заменяем первый хэш в блоке
Сохраним изменения, запустим файл, и попытаемся его зарегистрировать с нашим красивым серийным номером. Получаем радостное сообщение "Registration Successful!", а текст в строке состояния меняется на "Registered Version". Что, собственно, нам и надо было получить.
Регистрация программы
При повторном запуске кнопка регистрации уже неактивна.
Программа успешно зарегистрирована
Для очистки совести создадим какой-нибудь простой скрипт, откомпилируем его и запустим. Никаких сообщений о триальности больше нет. По такой же схеме с заменой хэша обходится защита и других программ компании Abyssmedia.
Просмотров: 8338 | Комментариев: 14
Метки: исследование защиты
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(11.10.2021 в 07:52):
Аффтар и в гугл настучал, страницу удалили из поиска. Красавчик.
Petya
(10.11.2020 в 18:14):
Надо отметить - исправились, UPX убрали. И даже не заменили на краденый аспр. Логика прежняя.
А вопрос изучения скомпилённых скриптов не ставился?
А вопрос изучения скомпилённых скриптов не ставился?
Ламер
(25.02.2013 в 19:38):
Вы - мой герой!..
Danila
(31.03.2012 в 18:45):
Кстати, вот пример, как разработчик пытается защитить свои творения:
Ghost Installer Studio PRO 4.8
http://www.ethalone.com/downlo...tudioPro.exe
В Интернете доступны только демо-версии данного продукта, якобы "крякнутые" для создания видимости его полной функциональности. А валидного ключа, до сих пор, никто не видел. Разрабы! Учитесь, а не рыдайте!
Ghost Installer Studio PRO 4.8
http://www.ethalone.com/downlo...tudioPro.exe
В Интернете доступны только демо-версии данного продукта, якобы "крякнутые" для создания видимости его полной функциональности. А валидного ключа, до сих пор, никто не видел. Разрабы! Учитесь, а не рыдайте!
Danila
(31.03.2012 в 18:23):
IMXO! Чтобы потребитель покупал лицензионный софт, необходимо чтобы разработчик и, только разработчик позаботился о защите и сохранности своего творения. А то разбрасывают свои разработки, где попало, а затем кричат на каждом углу: - " Украаали!!!!". Работать надо качественно и народ к Вам возможно потянется! ManHunter оказывает Вам (разрабам) бесплатную услугу, за которую Вы должны ему платить, так как сами не позаботились о защите своих творений.
ManHunter
(21.12.2009 в 17:17):
Abyssmedia, я предложил свою помощь в совершенствовании защиты, но видимо не надо. Дело хозяйское.
Abyssmedia
(21.12.2009 в 17:12):
NightFlame,
То что вам не понятно - мне очевидно. Я не знаю идиотов, которые будут покупать компайлер для создания троянов.
Про антивирусы вы видимо вообще ничего не знаете, раз так говорите. Я с ними переписываюсь регулярно. Так, для информации, некоторые антивирусы ругаются и на Делфи и на довольно известный Innosetup и на UPX.
Про кардеров вы не поняли. Я могу запаковать код, но любая защита будет отломана после того как у крякера будет валидный ключик.
ManHunter,
С UPX не угадали. Лицензии надо внимательнее читать. Использование GPL софта для упаковки не обязывает раскрывать свой код. Если я их исходники не использую и не линкуюсь с их кодом, то все в порядке. Только если я буду распространять их бинарник и вызывать его из своей программы, то буду обязан раскрыть код.
То что вам не понятно - мне очевидно. Я не знаю идиотов, которые будут покупать компайлер для создания троянов.
Про антивирусы вы видимо вообще ничего не знаете, раз так говорите. Я с ними переписываюсь регулярно. Так, для информации, некоторые антивирусы ругаются и на Делфи и на довольно известный Innosetup и на UPX.
Про кардеров вы не поняли. Я могу запаковать код, но любая защита будет отломана после того как у крякера будет валидный ключик.
ManHunter,
С UPX не угадали. Лицензии надо внимательнее читать. Использование GPL софта для упаковки не обязывает раскрывать свой код. Если я их исходники не использую и не линкуюсь с их кодом, то все в порядке. Только если я буду распространять их бинарник и вызывать его из своей программы, то буду обязан раскрыть код.
NightFlame
(21.12.2009 в 15:43):
>Я поясню к чему это приводит:
Пояснили - нихрена не понятно!
>- программу ломают
И?
>- ломанную версию используют для компиляции троянов
А лицензионную не могут использовать для той же цели?
>- антивирусы заносят ее в свои базы
Пьяный бред, какой-то! GCC, MS VS, BCPPB, BDelphi [и файлы ими скомпилированные] почему-то не заносят "в свои базы" [что за базы такие ещё б знать - может базы подозрительного ПО?], а вирей на них написано - ScriptCryptor не настолько популярен, чтоб с его помощью что-либо компилировать. Кстати, как вы думаете, на каком принципе основано антивирусное ПО и их так называемые базы?
>- страдают легальные пользователи
Пользователи страдают от того, что изначально разработчик не позаботился о защите своего продукта, а не от того, что продукт сломали. Не можете сами - множество банков предоставляют кредиты - берите и нанимайте "спецов", после этого можете спать спокойно, если сломают - виноваты не вы ;)!
>Любая защита не устоит перед кардерами :-(
С каких пор кардеры занимаются взломом ПО? [может крэкеры - "crackers"?]
>По такой же схеме с заменой хэша обходится защита и других программ компании Abyssmedia.
Какой вывод следует из вышенаписанной статьи - пора дорабатывать защиту [хотя скорее - переписывать с нуля]! А не плакаться о ненавистных "кардерах".
Пояснили - нихрена не понятно!
>- программу ломают
И?
>- ломанную версию используют для компиляции троянов
А лицензионную не могут использовать для той же цели?
>- антивирусы заносят ее в свои базы
Пьяный бред, какой-то! GCC, MS VS, BCPPB, BDelphi [и файлы ими скомпилированные] почему-то не заносят "в свои базы" [что за базы такие ещё б знать - может базы подозрительного ПО?], а вирей на них написано - ScriptCryptor не настолько популярен, чтоб с его помощью что-либо компилировать. Кстати, как вы думаете, на каком принципе основано антивирусное ПО и их так называемые базы?
>- страдают легальные пользователи
Пользователи страдают от того, что изначально разработчик не позаботился о защите своего продукта, а не от того, что продукт сломали. Не можете сами - множество банков предоставляют кредиты - берите и нанимайте "спецов", после этого можете спать спокойно, если сломают - виноваты не вы ;)!
>Любая защита не устоит перед кардерами :-(
С каких пор кардеры занимаются взломом ПО? [может крэкеры - "crackers"?]
>По такой же схеме с заменой хэша обходится защита и других программ компании Abyssmedia.
Какой вывод следует из вышенаписанной статьи - пора дорабатывать защиту [хотя скорее - переписывать с нуля]! А не плакаться о ненавистных "кардерах".
ManHunter
(18.12.2009 в 02:01):
Кстати, если уж совсем заниматься буквоедством, то используемый для упаковки пакер UPX, распространяется по лицензии GNU GPL. А GNU GPL требует распространения с двоичными файлами (в том числе неизменными) исходного кода или письменного обязательства его предоставить (своего или чужого; способы зависят от версии лицензии). Так что продукты, которые им накрываются, должны распространяться с открытым кодом.
Но это так, лирика :)
Но это так, лирика :)
ramirez
(11.12.2009 в 10:53):
Abyssmedia,
если вещь ломкая, то испытатель не виноват в этом.
грех отказываться от помощи многоопытного спеца.
если вещь ломкая, то испытатель не виноват в этом.
грех отказываться от помощи многоопытного спеца.
ManHunter
(11.12.2009 в 07:56):
Я не первый год занимаюсь варезом, и за все это время в природе был замечен только 1 (один!) релиз с ключом к одному продукту Abyssmedia. Остальное только "cracked exe". И раз я говорю, что мне есть что подсказать на этот счет, то я это не просто так говорю.
Abyssmedia
(11.12.2009 в 02:55):
Я поясню к чему это приводит:
- программу ломают
- ломанную версию используют для компиляции троянов
- антивирусы заносят ее в свои базы
- страдают легальные пользователи
Любая защита не устоит перед кардерами :-(
- программу ломают
- ломанную версию используют для компиляции троянов
- антивирусы заносят ее в свои базы
- страдают легальные пользователи
Любая защита не устоит перед кардерами :-(
ManHunter
(10.12.2009 в 00:16):
Нет, просто указываю на слабые места в вашей защите, и как их можно обойти. Соответственно, на основе этой статьи вы вполне можете их учесть и устранить. Ничего личного.
Ну а если интересно, то могу даже подсказать пару приемов.
Ну а если интересно, то могу даже подсказать пару приемов.
Abyssmedia
(10.12.2009 в 00:15):
И что, считаете себя народным героем?
Добавить комментарий
Заполните форму для добавления комментария