Blog. Just Blog

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

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Темная сторона Силы | Автор: ManHunter
Скриншот программы 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" находится что-то похожее:

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

На нее ссылается следующий код:
  1. .text:00504963                 mov     edx, off_534538
  2. .text:00504969                 mov     edx, [edx+4]
  3. .text:0050496C                 mov     eax, off_534538
  4. .text:00504971                 mov     eax, [eax]
  5. ; Вызвать какую-то функцию проверки
  6. .text:00504973                 call    sub_528688
  7. ; Если она вернула в AL не ноль, то программа считается зарегистрированной
  8. .text:00504978                 test    al, al
  9. .text:0050497A                 jz      short loc_5049D3
  10. .text:0050497C                 mov     edx, off_534538
  11. .text:00504982                 mov     edx, [edx]
  12. .text:00504984                 mov     eax, [ebx+380h]
  13. .text:0050498A                 call    sub_45F530
  14. .text:0050498F                 mov     edx, offset aRegisteredVe_1
  15. ; Строка "Registered Version&