Исследование возможностей методики скрытого вложения цифрового водяного знака в class-файлы на виртуализированных платформах с отличающейся архитектурой

исследование возможностей методики скрытого вложения цифрового водяного знака в class-файлы на виртуализированных

платформах с отличающейся архитектурой А.В. Иванов;

А.В. Красов, кандидат технических наук; П.И. Шариков.

Санкт-Петербургский государственный университет телекоммуникаций им. проф. М.А. Бонч-Бруевича

В данной работе авторы поднимают вопрос проверки работоспособности методики скрытого вложения цифрового водяного знака в байт-код java-класса при запуске на разных платформах с различной архитектурой. Производится вложение цифрового водяного знака без перекомпиляции class-файла и проверяется его работоспособность на виртуальных средах.

Ключевые слова: java, цифровой водяной знак, байт-код, виртуализация

RESEARCH OF OPPORTUNITIES OF THE TECHNIQUE OF THE HIDDEN INVESTMENT OF THE DIGITAL WATERMARK IN CLASS-FAYLY ON THE VIRTUALIZED PLATFORMS WITH DIFFERENT ARCHITECTURE

A.V. Ivanov; A.V. Krasov; P.I. Sharikov.

The Bonch-Bruevich Saint-Petersburg state university of telecommunications

In this article, the authors raise the issue of testing the efficiency of the hidden digital watermarking technique in the java-class bytecode when launched on different platforms with different architectures. An embedding of a digital watermark without recompiling a class file is performed and its operability is checked in virtual environments. Keywords: java, digital watermark, byte code, virtualization

В данный момент технологии развиваются стремительно быстро. Сейчас самый популярный язык программирования - Java. Разработчики языка Java всегда ставили кроссплатформенность своего языка в приоритет. Под разные системы и процессоры, виртуальные машины Java пишутся на разных языках, главное правило - одинаковая работоспособность.

Новизна данного исследования заключается в том, что на данный момент в открытом доступе практически нет научного материала, в котором проводится исследование столь узконаправленного вопроса. А именно, возможность запуска java-файла со скрытым вложением цифрового водяного знака на разных операционных системах [1]. К моменту написания данной статьи авторы не нашли в открытых источниках научного материала, отвечающего условиям актуальности, на данную тему.

Также, была поставлена задача для исследования того, что вложенное сообщение или цифровой водяной знак не видоизменится и его опкоды в java-файле не перезапишутся с другими опкодами байт-кода Java из-за различий в конфигурациях устройств, на которых будет запущено приложение. Также, class-файл, задействованный в исследовании, должен отработать без ошибок в обоих случаях.

Для проведения данного исследования необходимо произвести вложение сообщения в байт-код Java-файла и проверить файл на работоспособность. Далее следует перенести class-файл на другую платформу, проверить, что изменение байт-кода не помешало работе приложения, а также остался неизменным цифровой водяной знак.

В ходе работы будет установлен гипервизор KVM, на котором будет создана виртуальная машина с отличной операционной системой. Будет произведена эмуляция процессора, отличающейся архитектуры от используемой для вложения цифрового водяного знака в class-файл. Для решения данной задачи необходима настройка и установка всех необходимых для виртуализации компонентов, установка гостевой виртуальной машины, настройка сети для виртуальной машины.

Релевантные работы

Идентичных работ, в которых исследуется вопрос, поднимаемый в данной статье, в открытом доступе найти не удалось. Научная деятельность, связанная именно с проверкой работоспособности исполняемого java-файла с вложением цифрового водяного знака на разных аппаратных средах при разных условиях и конфигурациях, являет собой исследование динамического характера. В связи с тем, что развитие языка Java, как и виртуальной машины Java, не стоит на месте, а активно улучшается и дорабатывается, можно заявить, что на момент выхода JVM версии 9, статья актуальна, и вероятно, единственная в таком узкоспециализированном типе исследований среди находящихся в открытом доступе.

Есть несколько отечественных работ, связанных с проверкой быстродействия JVM на различных платформах или с различными операционными системами (ОС). По мнению авторов статьи, главный минус нижеприведенных исследований заключается в их неактуальности на данный момент, потому что даже с 2015 г. виртуальная машина Java претерпела изменения в механизме работы и анализаторе безопасности. Также разрыв версий Java слишком велик на данный момент времени, чтобы использовать данные исследования.

Первая подобная работа за авторством В.В. Хашковского, В.Н. Лутай, В.В. Юрченко «Сравнительная оценка времени выполнения программ на различных платформах» [2] была проведена в 2009 г. В ней авторы сравнивают скорость выполнения программы в Windows XP и Linux Open SUSE при использовании одинаковых аппаратных платформ. Исследователи используют возможности JVM по подсчету времени исполнения программы. Полученные результаты показали, что среда Linux показывает чуть большее быстродействие. Работа схожа с данной тем, что в ней также проводились замеры времени выполнения программы.

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

Вторая работа украинских коллег А.И. Дидух, В.В. Тищенко «Сравнение быстродействия Java на микрокомпьютере Raspberry Pi» [3] проведена уже в 2015 г. и сравнивает быстродействие программ на Java при изменении частоты процессора.

Эта работа не подходит для сравнения с текущей статьей, так как в ней используется одна операционная система и одно и то же аппаратное обеспечение, в котором меняется частота процессора. Следовательно, она близка к данному исследованию только по одному из нескольких пунктов, которые покрывает текущее исследование.

Виртуальная машина. Настройка

Заранее была подготовлена операционная система CentOS 6.3 для установки гостевой 32-битной виртуальной машины и физический сервер с 64-битной операционной системой, на котором будет произведена установка KVM вместе с виртуальной машиной (хост-сервер).

Все действия выполнялись из-под пользователя root на конфигурации Intel Xeon Quad Core E3-1230 3.20 GHz / 16GB / 2x 1TB.

Листинг 1. Установка KVM и библиотек виртуализации:

# yum install kJsm libvirt

# service libvirtd start

# Ismod I grep kJsm kvm_intel 52890 16

kvm 314739 1 kvm_intel

# virsh sysinfo <sysinfo type='smbios'> <bios>

<entry name='vendor'>HP</entry> <entry name='version'>J01</entry>

Листинг 2. Настройка хранилища:

# fdisk /dev/sdb Command (m for help): n Command action

e extended

p primary partition (1-4) P

Partition number (1-4): 1 Command (m for help): w

# mkfs.ex.t4 /dev/sdbl

# mkdir /guest_images

# chmod 700 /guest_images

# Is -la /guest_images total 8 ~

drwx------. 2 root root 4096 May 28 13:57 .

dr-xr-xr-x. 26 root root 4096 May 28 13:57 ..

# mount -t ext4 /dev/sdb1 /guest_images

# vi /etc/fstab

/dev/sdb1 /guest_images ext4

# virsh pool-define-as guest_images_dir dir - -

# virsh pool-start guest_images_dir

# virsh pool-list --all

# virsh pool-autostart guest_images_dir

# virsh pool-list -all

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

Листинг 3. Проверка на наличие установленного пакета и установка OS:

# rpm -qa | grep bridge-utils

virt-install -n VMName_2 —ram 1024 —arch=x86_64 \ --vcpus=1 --cpu host --check-cpu \

--extra-args="vnc sshd=1 sshpw=secret ip=static reboot=b selinux=0" \ --os-type linux --os-variant=rhel6 --boot cdrom,hd,menu=on \ --disk pool=guest_images_dirrsize=50rbus=virtio \ --network=bridge:br0, model=virtio \

--graphics vnc,listen=0.0.0.0rkeymap=ru,password=some.password.here \ --noautoconsole --watchdog default,action=reset --virt-type=kvm \ --autostart --location

defaults 1 1

- - "/guest_images"

После выполнения команды установки новой виртуальной машины следует подключиться по VNC к хост-серверу. После окончания установки CentOs на гостевую виртуальную машину подключаемся к хост-серверу. Далее процесс настройки и подключения завершен и можно использовать данную виртуальную машину для запуска на ней class-файла, содержащего в себе цифровой водяной знак, вложенный в него на машине с другими конфигурациями и разрядностью.

Скрытое вложение цифрового водяного знака в class-файл java

Исследование заключается в возможности запуска class-файла с вложенным цифровым водяным знаком и проверке неизменности вложения на процессорах другой архитектуры и разрядности. В связи с этим была выбрана методика создания и скрытого вложения цифрового водяного знака в class-файлы java приложения, предложенная ранее [4].

Для осуществления вложения информации в class-файл была выбрана многофункциональная программа Java Bytecode Editor, позволяющая контролировать процесс замены команд байт-кода на эквивалентные и уведомляющая о возможных ошибках при новом запуске файла.

В качестве class-файла, используемого для вложения информации в байт-код, был выбран один из модулей развлекательного приложения, предназначенного для знакомства учеников младших классов с языком программирования Java. Class-файл представляет собой отдельно работающую часть приложения, которая предлагает пользователю ввести некоторое число от 1 до 100, а далее производит попытки привести число, загаданное самой программой к числу, введенному пользователем. Код приложения приведен в Листинге 4.

Таким образом, при проверке файла на виртуальной машине будет обращено внимание не только на его исполнение, содержание цифрового водяного знака, но и на время выполнения.

Листинг 4. Приложение, вычисляющее число, введенное пользователем:

public class IfNoMain {

static long startTime = System.currentTimeMillis(); public static void main(String[] args) { int secretNumber = 0;

Scanner scanner = new Scanner(System.in); if (scanner.hasNextInt()) {

secretNumber = scanner.nextInt();

}

int numberInClass = new Random().nextInt(10); if (secretNumber > 50 || secretNumber < 1) {

System.out.println("you're not playing by the rules");

}

if (secretNumber > numberInClass) {

numberInClass += 10; } else {

numberInClass -= 10;

}

if (secretNumber > numberInClass) {

numberInClass += 10; } else {

numberInClass -= 10;

}

if (secretNumber > numberInClass) {

numberInClass += 10; } else {

numberInClass -= 10;

}

System.out.println("secretNumber= " + secretNumber); System.out.println("numberInClass= " + numberInClass);

double timeSpent = (double) (System.currentTimeMillis() - startTime)/1000; System.out.println("Programm run " + timeSpent + " seconds");

}

}

Как можно увидеть из Листинга 4, в коде class-файла достаточно большое количество операций условных переходов if-else. Сделано это намерено, так как методика, которая используется в этом исследовании наилучшим образом позволяет вложить информацию в байт-код java-файла посредством замены операторов условных переходов [5]. В байт-коде Java у всех операторов условных переходов существует несколько эквивалентов [6], которые используются виртуальной машиной в различных ситуациях [7]. Данные опкоды совершают одни и те же операции в приложении, но используют разное количество памяти.

В связи с этим, если в байт-коде жестко указать смену одного опкода на эквивалентный и не совершать перекомпиляцию файла, объем файла либо растет, либо уменьшается, в зависимости от ваших действий. Именно с помощью этого недокументированного свойства виртуальной машины java произведем вложение некоторого цифрового водяного знака в class-файл [8].

На рис. 1 представлен байт-код данного класса без изменений. Были проанализированы опкоды, которые можно заменить для получения цифрового водяного знака. Данный class-файл, разумеется, не может претендовать на полноценную java-программу, именно поэтому вложение в данный файл будет сравнительно небольшим, по сравнению с вложениями, которые можно осуществить в реальные проекты.

I Администратор: C:\Windows\system32\cmd.exe

Code :

0: iconst_0 1: istore_l 2 : new

5 : dup

6 : getstatic o/InputStream;

9: inuokespecial : <Ljava/io/InputStream; > 12: astore_2 13: aload_2 14: invokeuirtual

nt : OZ

17: ifeq

20: aload_2

21: invokevirtual

OI

24: istore_l 25: new 28: dup

29: inuokespecial

OU

32: bipush

34: invokeuirtual

I>I

37: istore_3 38: iload_l 39: bipush 41 : if _icmpgt 44: iload_l 45: iconst_l 46 : if_icmpge 49: getstatic io/PrintStream; 52: ldc

rules

54: inuokeuirtual n:<Ljava/lang/String;>U

57 iload_l

58 iload_3

59 if _ic ripie 68

62 iinc 3, 10

65 goto 71

68 iinc 3, -10

71 iload_l

72 iload_3

73 if _ic ripie 82

76 iinc 3, 10

79 goto 85

82 iinc 3. -10

85 iload_l

86 iload_3

87 if_icnple 96

9Ш iinc 3. 10

93 goto 99

96 iinc 3, -10

99 getstatic «10

// class jaua/util/Scanner

// Field java/lang/System.in:Ljaua/i

// Method jaua/util/Scanner."<init>"

// Method jaua/util/Scanner.hasNextI

// Method jaua/util/Scanner.nextInt:

// class jaua/util/Random

// Method jaua/util/Random."<init>":

// Method jaua/util/Random.nextInt:<

// Field java/lang/System.out:Ljaua/ // String you're not playing by the // Method jaua/io/PrintStream.print1

// Field java/lang/System.out:Ljava/

Рис. 1. Байт-код неизмененного class-файла

В представленном байт-коде наглядно видно четыре опкода, отвечающих за условные переходы в коде приложения. Рассмотрим данные опкоды подробнее:

- if_icmpgt: Выполнить условие, если Значение 1 больше, чем Значение 2;

- if_icmpge: Выполнить условие, если Значение 1 больше или равно, чем Значение 2;

- if_icmple: Выполнить условие, если Значение 1 меньше или равно, чем Значение 2.

Также для полноценного списка стоит упомянуть, что существуют другие эквивалентные опкоды условных переходов, которые не были использованы в этом приложении, но могут быть использованы в процессе редактирования байт-кода class-файла: - if_icmplt: Выполнить условие, если Значение 1 меньше Значения 2. Рассмотрим коды этих операций в двоичном и шестнадцатеричном формате в виртуальной машине Java, которые представлены в таблице.

Таблица. Двоичное и шестнадцатиричное представление опкодов в JVM

Операционный код в JVM Двоичное представление Шестнадцатеричное представление

if_icmpgt 1010 0011 A3

if_icmpge 1010 0010 A2

if icmple 1010 0100 A4

if_icmplt 1010 0001 A1

При переводе данных представлений в буквенное представление по таблице ASCII (например, кодовая таблица 866 - MS-DOS) получим «г»(163), «в»(162), «д»(164) и «б»(161) соответственно.

В данный момент, используя описанную ранее методику [9], можно предположить, что в class-файле уже есть некоторый цифровой водяной знак, который нас не устраивает. Сейчас это: «гвдд».

Принимая во внимание, что эквивалентные опкоды меняют ветки (значения) булева выражения местами, необходимо также редактировать и этот момент в байт-коде. Таким образом, если первый условный переход if_icmpgt, содержащий в себе булево выражение (x>y), то менее воздействия на байт-код принесет замена данного опкода на if_icmplt, содержащий в себе булево выражение (x<y).

Производится замена в целях минимальной редакции байт-кода. При редактировании байт-кода данного class-файла изменения были такими:

- опкод if_icmpgt заменен на if_icmplt, также произведена перестановка значений булева выражения;

- опкод if_icmpge заменен на if_icmple, также произведена перестановка значений булева выражения;

- опкоды if_icmple заменены на if_icmpge, также произведена перестановка значений их булевых выражений.

Таким образом, по завершении всех перестановок, при проверке получившегося цифрового водяного знака по методике и выбранной кодовой таблице должна получиться буквенная последовательность: «бдвв».

Произведем необходимые замены в class-файле посредством редактора Java ByteCode Editor для ускорения замены и исключения ошибок памяти.

После замены всех необходимых опкодов, производится проверка на локальной машине, что замена удалась и файл работает. На рис. 2 видно, что замена байт-кода прошла успешно и если производить сверку кодовых представлений опкодов в измененном файле с выбранной кодовой таблицей, то будет получена необходимая символьная последовательность.

Данная методика незаменима при скрытом вложении цифрового водяного знака в исполняемые java-файлы по нескольким причинам:

- производится выбор способа перевода представлений опкодов в виртуальной машине Java в удобочитаемый вид;

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

Таким образом, злоумышленнику мало знать методику вложения, ему необходимо знать способ конвертации данных опкодов и какая из десятков кодовых таблиц ASCII была выбрана для проверки правильности вложенного цифрового водяного знака.

ои

Code:

0: aload_0 1: invokespecial #1

4: return

// Method java/lang/Object."<init>":|

public static void main<java.lang.String[]>; Code:

0: iconst_0 1: istore_l 2: new 5: dup 6: getstatic o/InputStrean;

9: invokespecial tt4 : <Ljava/io/InputStream; >U

«50 »3

12 astore_2

13 aload_2

14 invokevirtual «5 //

nt:OZ

17 if eq 25

2G aload.^2

21 invokevirtual «6 //

«I 24 istorej.

25 new «7 //

28 dup

29 invokespecial «8 //

<>U 32 bipush 10

34 invokevirtual «9 //

1)1 37 39 40 bipush istore_3 iload_l 5(0 Л

41 if _icmplt 49

44 iconst_l

45 iloadj. л

46 if _icmple 57

^J4

49 getstatic «10 ч //

io/PrintStream;

52 ldc «11 //

rules

54 invokevirtual «12 //

n:<Ljava/lang/String;>U

57 iload_3

58 iload_l jA

59 if_icmpge 68

62 iinc 3, 10 ~

65 goto 74

68 iinc_w 3, 246

74 iload_3

75 76 iload_l if_icmpge 85

79 iinc 3, 10

82 goto 91

85 iinc_w 3, 246

class java/util/Scanner

FieId java/lang/System.in:Ljava/i

Method java/util/Scanner."<init>"

Me t ho d j av a/ut i 1/S c an n e r. has Ne xt I

Method java/util/Scanner.nextlnt:

class java/util/Random

Method java/util/Random."<init>":

Method java/ut il/Random.nextI nt: <

Field java/lang/System.out:Ljava/ String you're not playing by the Method java/io/PrintStream.print1

Рис. 2. Class-файл с отредактированным байт-кодом

Проверка работы файла с измененным байт-кодом на виртуальной машине

Из статьи «Comparison productivity Java in Windows and Red Hat Linux» [10], в которой авторы сравнивают работу виртуальной машины java на операционных системах Linux и Windows, были получены данные о том, что java runtime environment может работать по-разному, на разных операционных системах, без изменения аппартатных средств. Имея данные о том, что существует вероятность некорректной работы приложений java на unix-подобных системах и о частом использовании открытого проекта OpenJDK вместо стандартного, предоставляемого компанией Oracle, был произведен перенос class-файла, выбранного для исследования, на другую операционную систему.

Как видно из рис. 3, байт-код class-файла при запуске на виртуальной машине с операционной системой CentOS, не изменился. Операционные коды, используемые в цифровом водяном знаке, остались прежними:

- if_icmplt;

- if_icmple;

- ¡Г_ютр§е.

Работоспособность программы также осталось неизменной, что подтверждает рис. 4, демонстрирующий запуск class-файла.

После произведенной проверки наличия в байт-коде цифрового водяного знака, производится запуск приложения.

Рис. 3. Изменённый байт код в среде *nix

Ш Mike@localhost:- -/Рабочий стол/Ехес _  к

Файл Правка Вид Поиск Терминал Справка

[Mike@localhost Ехес]$ java IfNoHain

12

secretNumber= 12

numberInClass= 17

Programm run 1.008 seconds

[Mike@localhost Exec]$ | =

Рис. 4. Выполнение программы на ОС CentOS

Как видно из рис. 4, программа выполняется так же, как и в среде Microsoft Windows. Для сравнения, ниже представлен рис. 5. Таким образом, изменение разрядности и семейства операционной системы не изменяет работу программы.

Администратор: C:\Windows\system32\cmd.exe

Microsoft Hindous [Uersion 6.1.7601]

(с) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

C:SUsers4Pauel>cd C:SUsers4Pauel\Desktop\CTaTbn4classes4Exec

C:\Users4Pauel\Desl<top4CTaTbfl\classes4Exec>java —classpath . IfNoMain 12

secretNumber= 12 numberInClass= 15 Programm run 0.42 seconds

C:\UsersЧРаи el\De s kt о рЧСт ат ь я\сlas s e s\Exe с >_

Рис. 5. Выполнение программы на ОС Windows 7

Во время проведения данного исследования было выяснено, что изменение операционной системы не влияет на выполнение программы.

Также было выяснено, что выполнение class-файла с вложенным цифровым водяным знаком на другой операционной системе и конфигурации никак не влияет на работу программы.

Было доказано, что цифровой водяной знак не перезаписывается, что означает полную сохранность внутренней структуры файла и правильную компиляцию кода class-файла в байт-код java.

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

Литература

1. Хомяков И.Н., Красов А.В. Возможность скрытого вложения информации в байт-код java // Информационные технологии моделирования и управления. 2014. № 2 (86). С. 185-191.

2. Хашковский В.В., Лутай В.Н., Юрченко В.В. Сравнительная оценка времени выполнения программ на различных платформах // Известия ЮФУ. Технические науки. 2009. № 12. С. 176-181.

3. Дидух А.И., Тищенко В.В. Сравнение быстродействия Java на микрокомпьютере Raspberry Pi // Вюник НТУУ «КП1». Сер.: Радютехшка, Радюапаратобудування. 2015. № 60. С. 107-113.

4. Шариков П.И., Красов А.В., Штеренберг С.И. Методика создания и вложения цифрового водяного знака в исполняемые java-файлы на основе замен опкодов // T-Comm: Телекоммуникации и транспорт. 2017. Т. 11. № 3. С. 66-70.

5. Цифровая стеганография и цифровые водяные знаки / В.И. Коржик [и др.]. СПб., 2016. Ч. 1: Цифровая стеганография.

6. Shterenberg S.I., Krasov A.V., Ushakov I.A. Analysis of using equivalent instructions at the hidden embedding of information into the executable files // Journal of Theoretical and Applied Information Technology. 2017. Т. 80. № 1. pp. 28-34.

7. Шариков П.И. Методика нахождение величины наиболее выгодного контейнера в форматах исполняемых файлов // Наукоемкие технологии в космических исследованиях Земли. 2015. Т. 7. № 5. С. 58-62.

8. Шариков П.И., Красов А.В. Исследование уязвимости сериализации и десериализации данных в Java // Региональная информатика и информационная безопасность: сб. науч. трудов. СПб.: С.-Петерб. Общество информатики, вычислительной техники, систем связи и управления.

9. Красов А.В., Шариков П.И. Методика защиты байт-кода java-программы от декомпиляции и хищения исходного кода злоумышленником // ВЕСТНИК СПГУТД. 2017. № 1. С. 47-51.

10. URL:http://www.javaportal.ru/articles/comparison_productivity_Java_in_and_Red_Hat _Linux.html (дата обращения: 10.03.2018).

References

1. Homyakov I.N., Krasov A.V. Vozmozhnost' skrytogo vlozheniya informacii v bajt-kod java // Informacionnye tekhnologii modelirovaniya i upravleniya. 2014. № 2 (86). S. 185-191.

2. Hashkovskij V.V., Lutaj V.N., Yurchenko V.V. Sravnitel'naya ocenka vremeni vypolneniya programm na razlichnyh platformah // Izvestiya YUFU. Tekhnicheskie nauki. 2009. № 12. S. 176-181.

3. Diduh A.I., Tishchenko V.V. Sravnenie bystrodejstviya Java na mikrokomp'yutere Raspberry Pi // Visnik NTUU «KPI». Ser.: Radiotekhnika, Radioaparatobuduvannya. 2015. № 60. S.107-113.

4. SHarikov P.I., Krasov A.V., SHterenberg S.I. Metodika sozdaniya i vlozheniya cifrovogo vodyanogo znaka v ispolnyaemye java-fajly na osnove zamen opkodov // T-Comm: Telekommunikacii i transport. 2017. T. 11. № 3. S. 66-70.

5. Cifrovaya steganografiya i cifrovye vodyanye znaki / V.I. Korzhik [i dr.]. SPb., 2016. CH. 1: Cifrovaya steganografiya.

6. Shterenberg S.I., Krasov A.V., Ushakov I.A. Analysis of using equivalent instructions at the hidden embedding of information into the executable files // Journal of Theoretical and Applied Information Technology. 2017. T. 80. № 1. pp. 28-34.

7. Sharikov P.I. Metodika nahozhdenie velichiny naibolee vygodnogo kontejnera v formatah ispolnyaemyh fajlov // Naukoemkie tekhnologii v kosmicheskih issledovaniyah Zemli. 2015. T. 7. № 5. S. 58-62.

8. Sharikov P.I., Krasov A.V. Issledovanie uyazvimosti serializacii i deserializacii dannyh v Java // Regional'naya informatika i informacionnaya bezopasnost': sb. nauch. trudov. SPb.: S.-Peterb. Obshchestvo informatiki, vychislitel'noj tekhniki, sistem svyazi i upravleniya.

9. Krasov A.V., SHarikov P.I. Metodika zashchity bajt-koda java-programmy ot dekompilyacii i hishcheniya iskhodnogo koda zloumyshlennikom // VESTNIK SPGUTD. 2017. № 1. S. 47-51.

10. URL:http://www.javaportal.ru/articles/comparison_productivity_Java_in_and_Red _Hat_ Linux.html (data obrashcheniya: 10.03.2018).