Комплекс защиты ПО с помощью флешки

Автор: Joseph L.Shrago

Дата: 07.2015

Скачать статью в формате Word.

Скачать библиотеку.

Примечание редакции:

Данная работы была представленная на заочном конкурсе работ по OS/2 «Зазеркалье 2015». И хотя она не имеет прямого отношения к языку Rexx, я решил опубликовать её на сайте. Затронутая в статье тема защиты программ актуальна для людей пишущих на языке программирования Rexx, так как программы могут быть упакованы в .exe файлы. А проекты могут потребовать дополнительную защиту, и данный материал может оказаться весьма полезным.

 

1. Принципы работы

  • Связывает код и флешку информацией построенной на уникальном описании флешки.
  • Позволяет записывать информацию на флешке и использовать ее во время исполнения задачи.

2. Программирование

Файлы secobj.obj и secobj.h позволяют встраивать в код элементы защиты:

         decript(char *src, char *dest, int length , int num_of_flash);

         - дешифрование c usb флешкой.

         encript(char *src, char *dest, int length , int num_of_flash);

         - шифрование c usb флешкой.

         test_guard0()      - проверка наличия защиты, отсутствия отладчика и неизменности кода возвращает 0 если все в порядке.

         test_guard()        - то же что и test_guard0 плюс проверяет факт наличия защиты и соответствующей флешки.

         add_key_object(char *object, int length_of_object, char *name_of_object);

                            - добавляет на флешку информационный объект и возвращает его номер или -1.

         update_key_object(int number_of_object, char *object, int length_of_object);

                            - обновляет информационный объект  и возвращает 0 или -1, если все плохо.

         *get_key_object_by_num(int number_of_object);

                            - помещает в память заданный номером объект и возвращает указатель на него.

         *get_key_object_by_name(char *name);

                            - помещает в память заданный именем объект и возвращает указатель на него.

         int get_object_len(); - вызывается после get_key_object_by_name или get_key_object_by_name для получения длины объекта.

Примечание:

  1. Вы сами ответственны за освобождение памяти, возвращаемой функциями get_key_object_by_ххх
  2. Постарайтесь организовать код таким образом, чтобы вызовы этих функций не пересекались во времени, поскольку они используют одну и ту же внутреннюю память.

 

3. Связывание с флешкой

Связывание программы и флешки производится задачей m_uguard.exe c помощью команды:

m_uguard task.exe file_object_0 file_object_1 .. file_object_n

где:

task.exe      - защищаемая задача.

file_object_х       - файлы записываемые на флешку. Всего можно записать 29 файлов общим размером в 32 мегабайта.

Если вы хотите использовать эту флешку традиционным путем - отредактируйте таблицу разделов сдвинув начало раздела подальше от нулевого сектора.

Примечание: утилита lxlite должна вызываться без указания полного пути.

 

4. для чтения и обновления информационных объектов на флешке можно использовать задачу fmguard.exe.

 

5. Я и сам знаю, что все можно реинженерить и пропатчить. Я попытался усложнить этот процесс.

И попытаюсь еще более.

 

6. Вы сами должны понимать, что однократное использование в коде вызова функции проверки защиты удаляется самым простым способом, поэтому при использовании этого кода проявите фантазию.

 

Свои предложения присылайте по адресу joseph@ecomstation.ru