
Исследование защиты программы 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&