Java Virtual Machine(Obfuscation and Java)

Содержание

Слайд 2

What it is all about?

Идеология Java
Classfile
Константный пул
Структура и идеология машины
Идеология системы команд

What it is all about? Идеология Java Classfile Константный пул Структура и
байт-кода
Обфускация и Java
Q&A

Слайд 3

Java Technology (Введение)

Java предложена фирмой SUN Microsystems
1991 г. James Gosling – язык Oak
1995

Java Technology (Введение) Java предложена фирмой SUN Microsystems 1991 г. James Gosling
г. Изменение названия на JAVA и выпуск первой реализации - JDK 1.0
1998 г. Платформа Java 2 ( SE, EE, ME)
Java код:
Переносим
Динамичен
Предсказуем
Объектно-ориентированан

Слайд 4

What is this all for?

H.JAR

DESKTOP

iPAQ

PALM

SMARTPHONE

CELLPHONE

EMBEDDED
MEDICAL SYSTEM

WEB SERVER

SMART HOUSE

VM

What is this all for? H.JAR DESKTOP iPAQ PALM SMARTPHONE CELLPHONE EMBEDDED

Слайд 5

Путь кода в JAVA

b.java

b.java

a.java

JAR
(jar)
ZIP

b. class

b. class

a.class

Compiler
(other)

e.other

e.class

f.png

g.txt

Manifest.mf

Compiler
(javac)

H.JAR

External
Verifier

Obfuscator

Путь кода в JAVA b.java b.java a.java JAR (jar) ZIP b. class

Слайд 6

OOP (JIC)

Moveable

SetPosition()

ValidatePos()

ValidatePos()

Figure

Draw()

SetColor()

ValidatePos()

2DPoint Pos

OOP (JIC) Moveable SetPosition() ValidatePos() ValidatePos() Figure Draw() SetColor() ValidatePos() 2DPoint Pos

Слайд 7

CLASS FILE

CLASS FILE

Слайд 8

Classfile structure (идеалогия)

Программные компоненты Java распространяются в виде набора classfile-ов (или их архивов

Classfile structure (идеалогия) Программные компоненты Java распространяются в виде набора classfile-ов (или
JAR)
Наследование структуры JAVA
Инкапсуляция
Полная платформонезависимость
Позднее связывание
Динамическая загрузка программных компонентов

Слайд 9

Classfile structure (метафора)

Каждый classfile – представляет данные одного класса или интерфейса
Он не обязан

Classfile structure (метафора) Каждый classfile – представляет данные одного класса или интерфейса
содержать никаких данных о символическом представлении своего класса или интерфейса
Classfile – это полностью стандартизированный поток байт (big-endian)
До критического момента classfile – это просто данные

Classfile

JAVA

Слайд 10

Classfile structure (что содержит)

Пул констант
Тип класса (доступ, наследование итп)
Ссылку на класс-предок (суперкласс)
Набор поддерживаемых

Classfile structure (что содержит) Пул констант Тип класса (доступ, наследование итп) Ссылку
интерфейсов
Описания полей
Атрибуты полей
Описания методов
Атрибуты методов
Описания атрибутов

Слайд 11

Classfile structure (константный пул)

Набор записей позволяющих разрешать ссылки при связывании и выносить констнты

Classfile structure (константный пул) Набор записей позволяющих разрешать ссылки при связывании и
из кода
Экономит место объединяя одинаковые константы
Хранит
Константы (int, float, long, double, строки UTF8)
Ссылки на символические названия внешних объектов (методов, функций, классов)
Максимальный размер констпула 2^16
Константный пул разрешают в процессе исполнения

Слайд 12

Пример

CONSTANT_Methodref_info

CONSTANT_Class_info

COCONSTANT_NameAndType_info

CONSTANT_Utf8_info

Пример CONSTANT_Methodref_info CONSTANT_Class_info COCONSTANT_NameAndType_info CONSTANT_Utf8_info

Слайд 13

Attributes

SourceFile - описание исходника
ConstantValue – описание константы
Code –описание кода
Exceptions – список исключений

Attributes SourceFile - описание исходника ConstantValue – описание константы Code –описание кода
кидаемых методом
InnerClasses – список внутрених классов из других пакетов
Synthetic – отметка о том что член класса отсутствовал в исходнике
LineNumberTable – список ссылок на номера строк
LocalVariableTable – список имен локальных переменных
Deprecated – отметка о том что член или класс вытеснен (перегружен)

Слайд 14

Methods and attributes

method_info
{  
u2 access_flags;     
u2 name_index;
u2 descriptor_index;
u2 attributes_count;

Methods and attributes method_info { u2 access_flags; u2 name_index; u2 descriptor_index; u2

attribute_info attributes[attributes_count];     
}

attribute_info
{
u2 attribute_name_index;
u4 attribute_length;
u1 info[attribute_length];     
}

Code_attribute
{
u2 attribute_name_index;
u4 attribute_length;
u2 max_stack;
u2 max_locals;
u4 code_length;
u1 code[code_length];
u2 exception_table_length;
{
u2 start_pc;
u2 end_pc;
u2 handler_pc;
u2 catch_type;
} exception_table[exception_table_length];
u2 attributes_count;
attribute_info attributes[attributes_count];     
}

Слайд 16

Спецификация JVM

В всей полноте описывает «что?»
Не описывает «как?»

Спецификация JVM В всей полноте описывает «что?» Не описывает «как?»

Слайд 17

JVM Subsystems

Исполняет

Собирает мусор

Ищет узкие места

Ведет статическую предпроверку

JVM Subsystems Исполняет Собирает мусор Ищет узкие места Ведет статическую предпроверку

Слайд 18

JVM (структура JAVA машины)

Многопоточность
Поддержка исключений
Модель абстрактной памяти построенной на ссылках на объекты
Автоматическая

JVM (структура JAVA машины) Многопоточность Поддержка исключений Модель абстрактной памяти построенной на
сборка мусора
Строгая типизированость предполагается

Слайд 19

JVM (структура JAVA машины)

JVM – абстактная стековая машина с локальными переменными
Каждый поток

JVM (структура JAVA машины) JVM – абстактная стековая машина с локальными переменными
в JVM имеет свой стек «вызов» заполняемый фреймами
JVM оперирует с:
Стеком операндов (текушие подсчеты)
Локальными переменными + параметрами
Статическими переменными

Слайд 20

JVM

Thread 1

Thread 2

JVM Op Stack

Local Variables

Parameters

Frame3

Runtime constpool

JVM Thread 1 Thread 2 JVM Op Stack Local Variables Parameters Frame3 Runtime constpool

Слайд 21

MEMORY

HEAP

Thread 1

JVM

Thread 2

FRAME2

ALU

FRAME2

FRAME1

FRAME1

FRAME STACK (call stack)

JVM Op Stack

FRAME1

MEMORY HEAP Thread 1 JVM Thread 2 FRAME2 ALU FRAME2 FRAME1 FRAME1

Слайд 22

BYTE code (Концепции)

Байткоды имеют опкод в 8 бит и расширяются байтово
Байткоды имеют структуру

BYTE code (Концепции) Байткоды имеют опкод в 8 бит и расширяются байтово
кеширующю пространство
Есть свободные байткоды
Есть сложные и простые байткоды (IS неоднороден)
Со всеми вытекающими
Машина работает с данными размером 8, 32, 64 бита

Слайд 23

BYTE code (Типы данных)

byte - 8-bit знаковое целое
short - 16-bit знаковое целое

BYTE code (Типы данных) byte - 8-bit знаковое целое short - 16-bit

int - 32-bit знаковое целое
long - 64-bit знаковое целое
char - 16-bit без знаковое для представления UNICODE
float
double

Слайд 24

BYTE code (типы)

Работа с константами
Push байт-коды
Сохранение и загрузка локальных переменных
Pop байт-коды и работа

BYTE code (типы) Работа с константами Push байт-коды Сохранение и загрузка локальных
со стеком
Арифметические операции
Операции сравнения и условных переходов, операции вызовов, операции перехода по таблице
Операция безусловного перехода
Операции загрузки статических и динамических полей
Создания новых объектов, массивов, проверка приведения типов
Броски исключений
Захват и освобождение мониторов
Быстрая проверка на ноль
Длинные переходы и длинные загрузки

Слайд 25

Size reduction

iconst_m1

iconst_n

n = if (x < 9 && x > 3) then

Size reduction iconst_m1 iconst_n n = if (x 3) then x –
x – 3 else OTHER_OPCODE
push (byte)n

push (byte)-1

bipush

sipush

push x

push x

ldc

ldc_w

push CONST_POOL[x]

push CONST_POOL[x]

Слайд 26

Vierifier

invoke virtual
Метод ДОЛЖЕН БЫТЬ этого класса или класса предка.
А кто проверит?
verifier
В

Vierifier invoke virtual Метод ДОЛЖЕН БЫТЬ этого класса или класса предка. А
runtime

Слайд 27

JIT

Pros vs Cons
Time – 2x-40x faster
Memory Overhead – 5x-10x
Compilation
JIT Just-In-Time
AOT Ahead-Of-Time
HI Hotspot

JIT Pros vs Cons Time – 2x-40x faster Memory Overhead – 5x-10x
Implementations

Слайд 28

Garbage collection (общие мысли)

Мусор в Америке – федеральная собственность
А некоторые считают – это

Garbage collection (общие мысли) Мусор в Америке – федеральная собственность А некоторые
для склеротиков
Нет нужды явно освобождать память... машина сделает это сама
Представьте себе сервер и утечку памяти в нем...
Если воспринимать исключения как необходимость, надо как необходимость воспринимать и сборку мусора

Слайд 29

Obfuscation

Obfuscation

Слайд 30

Obfuscation and Java

Pros
Она на самом деле необходима
Java машина очень распростанена
Обфускация экономит место
Cons

Obfuscation and Java Pros Она на самом деле необходима Java машина очень

Reflection может работать неверно
Идеалогия Java против обфускации

Слайд 31

Decompilers

Goto
Бывает класс «for» и «synchronized» в байт-коде но не бывает таких классов

Decompilers Goto Бывает класс «for» и «synchronized» в байт-коде но не бывает
в Java
Что навсегда потеряно, того уж не вернешь. Старые имена и связи не восстановить, если они уничтожены

Слайд 32

Decompilers

int tmp;
tmp = a;
a = b;
b = tmp;

iload_0
istore_2
iload_1
istore_0
iload_2
istore_1

iload_0
iload_1
istore_0
istore_1

b = a
a = b

Оптимизатор

А

Decompilers int tmp; tmp = a; a = b; b = tmp;
бывает они даже разваливаются….

Слайд 33

Obfuscation - Names and profiles (Retroguard)

GNU GPL
Скриптовый

Obfuscation - Names and profiles (Retroguard) GNU GPL Скриптовый

Слайд 34

Names and profiles (JODE)

GNU GPL
Переименование классов, методов и полей
Удаление отладочной информации
Удаление

Names and profiles (JODE) GNU GPL Переименование классов, методов и полей Удаление
«мертвого» кода (классов, методов, полей)
Оптимизация выделения локальных переменных
Есть декомпилятор

Слайд 35

Names and profiles (SandMark)

Работа Аризонского университета – выполняет watermarking, tamper-proofing и code

Names and profiles (SandMark) Работа Аризонского университета – выполняет watermarking, tamper-proofing и
obfuscation
Основан на алгоритмах by Venkatesan, Collberg, Stern, and others

Слайд 36

Names and profiles (DashO)

Commercial
Sun’s choice
Features
Package/Class/Method/Field renaming using our patented Overload-Induction(tm) renaming system

Names and profiles (DashO) Commercial Sun’s choice Features Package/Class/Method/Field renaming using our

Unused Class/Method/Field and constant pool entry removal
Advanced Control Flow Obfuscation
String Encryption
Class and method level optimization to improve JIT performance

Слайд 37

Names and profiles

Names and profiles

Слайд 38

Where is more information available?

Исчерпывающая информация о Java машине содержится в спецификации

Where is more information available? Исчерпывающая информация о Java машине содержится в
SUN и больше мало где:
http://sunsite.nstu.ru/java-stuff/vmspec/
Информация о статистике и classfile
ftp://ftp.cs.arizona.edu/reports/2004/TR04-11.pdf
Различные обфускаторы
http://www.retrologic.com/retroguard-docs.html
http://sandmark.cs.arizona.edu/publications.html
http://www.preemptive.com/products/dasho/Features.html

Слайд 39

THE END

Спасибо за внимание

THE END Спасибо за внимание