Защита сайтов


PERL2EXE - часть 3


Очевидно, что в этом случае применять шифрование может быть не очень удачным решением. Однако, в качестве расшифровывающего модуля можно использовать своего рода плагин, подлючаемую библиотеку, написанную на любом другом языке и откомпилированную как разделяемый модуль (shared library). Используя специальный набор функций Perl API, данный модуль расшифрует исходный текст гораздо быстрее, чем если бы он сам был написан на языке Perl. Кроме того, такой подход позволяет на полную мощность использовать средства усложнения анализа программного кода, включая такие известные приемы как применение самомодифицирующегося кода, шифрование/расшифрование "на лету", во время исполнения процедур модуля. Встроенные средства Perl API позволяют также определить запущен ли скрипт под отладчиком в целях исследования его кода, а также наличие и количество других фильтров исходных текстов.

Подобный механизм был реализован авторами этой статьи с использованием поточного шифра RC4 с длиной ключа 32 байта. Механизм его работы довольно прост и может быть адаптирован в зависимости от предложенной задачи. После зашифрования исходного сценария специальной утилитой с помощью RC4, он выглядит приблизительно так:

    Исходный текст сценария в открытом виде:

    #!/bin/perl print "Hello, world"; die immediately;

    И в зашифрованном виде (после обработки специальной утилитой):

    #!/bin/perl use scripher; f;9Q/^A^@~Ро$#9Ёфsdjаs2fk58f_!@.?s!(f;9Q/^A^@~

Модуль scripher.pm загружает заранее откомпилированную разделямую библиотеку scripher.so с помощью стандартного модуля интерпретатора DynaLoader.

    Scripher.pm

    package scripher; require DynaLoader; @ISA = qw(DynaLoader); $VERSION = "0.0.1"; bootstrap scripher $VERSION; 1;

Семикилобайтный модуль с реализованным алгоритмом RC4 и необходимыми средствами обработки исходного текста размещается в том же каталоге, что и зашифрованный файл сценария. Таким образом, для передачи сценария необходимо передать два дополнительных файла (которые являются общими для всех зашифрованных сценариев этого типа), а именно scripher.pm и scripher.so.




- Начало -  - Назад -  - Вперед -