java virtual machine ( obfuscation and java )

40
1 Java Virtual Java Virtual Machine Machine ( ( Obfuscation and Java Obfuscation and Java ) ) Пименов Александр Пименов Александр 2004 2004

Upload: saskia

Post on 14-Jan-2016

87 views

Category:

Documents


0 download

DESCRIPTION

Java Virtual Machine ( Obfuscation and Java ). Пименов Александр 2004. What it is all about?. Идеология Java Classfile Константный пул Структура и идеология машины Идеология системы команд байт-кода Обфускация и Java Q&A. Java Technology ( Введение ). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Java Virtual Machine ( Obfuscation and Java )

11

Java Virtual Java Virtual MachineMachine

((Obfuscation and JavaObfuscation and Java))

Пименов АлександрПименов Александр

20042004

Page 2: Java Virtual Machine ( Obfuscation and Java )

22

What it is all about?What it is all about?

• Идеология Идеология JavaJava

• ClassfileClassfile– Константный пулКонстантный пул

• Структура и идеология машиныСтруктура и идеология машины

• Идеология системы команд байт-Идеология системы команд байт-кодакода

• Обфускация и Обфускация и JavaJava

• Q&AQ&A

Page 3: Java Virtual Machine ( Obfuscation and Java )

33

Java TechnologyJava Technology((ВведениеВведение))• Java Java предложена фирмой предложена фирмой SUN MicrosystemsSUN Microsystems

– 1991 1991 г. г. James Gosling – James Gosling – язык язык OakOak– 1995 1995 г. Изменение названия на г. Изменение названия на JAVA JAVA и и

выпуск первой реализации - выпуск первой реализации - JDK 1.0JDK 1.0– 1998 1998 г. Платформа г. Платформа Java 2 ( SE, EE, ME)Java 2 ( SE, EE, ME)

• JavaJava код код::– ПереносимПереносим– Динамичен Динамичен – ПредсказуемПредсказуем– Объектно-ориентировананОбъектно-ориентированан

Page 4: Java Virtual Machine ( Obfuscation and Java )

44

What is this all for?What is this all for?

H.JARDESKTOPDESKTOP

iPAQiPAQ

PALMPALM

SMARTPHONESMARTPHONE

CELLPHONECELLPHONE

EMBEDDED EMBEDDED MEDICAL SYSTEMMEDICAL SYSTEMWEB SERVERWEB SERVER

SMART HOUSESMART HOUSE

VMVM

Page 5: Java Virtual Machine ( Obfuscation and Java )

55

Путь кодаПуть кода в в JAVAJAVA

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

ExternalExternalVerifierVerifier

Ob

fusca

tor

Ob

fusca

tor

Page 6: Java Virtual Machine ( Obfuscation and Java )

66

OOP (JIC)OOP (JIC)DrawableDrawable

Draw()Draw()

SetColor()SetColor()

ChessBoardChessBoard

Draw()Draw()

SetColor()SetColor()

PawnPawn

Draw()Draw()

SetColor()SetColor()

MoveableMoveable

SetPosition()SetPosition()

ValidatePos()ValidatePos()

ValidatePos()ValidatePos()

FigureFigure

Draw()Draw()

SetColor()SetColor()

ValidatePos()ValidatePos()

2DPoint Pos2DPoint Pos

Page 7: Java Virtual Machine ( Obfuscation and Java )

77

CLASS FILECLASS FILE

Page 8: Java Virtual Machine ( Obfuscation and Java )

88

Classfile structureClassfile structure((идеалогияидеалогия))• Программные компоненты Программные компоненты Java Java

распространяются в виде набора распространяются в виде набора classfileclassfile-ов (или их архивов -ов (или их архивов JARJAR))– Наследование структуры Наследование структуры JAVAJAVA

•ИнкапсуляцияИнкапсуляция

– Полная платформонезависимостьПолная платформонезависимость– Позднее связываниеПозднее связывание– Динамическая загрузка программных Динамическая загрузка программных

компонентовкомпонентов

Page 9: Java Virtual Machine ( Obfuscation and Java )

99

Classfile structureClassfile structure((метафораметафора))• Каждый Каждый classfile – classfile – представляет данные представляет данные

одного класса или интерфейсаодного класса или интерфейса• Он не обязан содержать никаких данных о Он не обязан содержать никаких данных о

символическом представлении своего класса символическом представлении своего класса или интерфейсаили интерфейса

• Classfile – Classfile – это полностью это полностью стандартизированный поток байт (big-endian)стандартизированный поток байт (big-endian)

• До критического момента До критического момента classfile – classfile – это это просто данныепросто данные

Classfile Classfile

JAVA JAVA

Page 10: Java Virtual Machine ( Obfuscation and Java )

1010

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

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

– Атрибуты полейАтрибуты полей

• Описания методовОписания методов– Атрибуты методовАтрибуты методов

• Описания атрибутовОписания атрибутов

Page 11: Java Virtual Machine ( Obfuscation and Java )

1111

Classfile structureClassfile structure((константный пулконстантный пул))• Набор записей позволяющих разрешать ссылки Набор записей позволяющих разрешать ссылки

при связывании и выносить констнты из кодапри связывании и выносить констнты из кода• Экономит место объединяя одинаковые Экономит место объединяя одинаковые

константыконстанты• ХранитХранит

– Константы (Константы (int, float, long, double, int, float, long, double, строки строки UTF8UTF8))– Ссылки на символические названия внешних объектов Ссылки на символические названия внешних объектов

(методов, функций, классов)(методов, функций, классов)

• Максимальный размер констпула 2Максимальный размер констпула 2^16^16• Константный пул разрешают в процессе Константный пул разрешают в процессе

исполненияисполнения

Page 12: Java Virtual Machine ( Obfuscation and Java )

1212

ПримерПримерTYPE

class_index

name_and_type_index

10

12

18

TYPE

name_index

7

14

TYPE

length

1

9

bytes test/test1TYPE

name_index

12

22

descriptor_index 26TYPE

length

1

7

bytes callIfFailed

TYPE

length

1

9

bytes (IDLtest/test2;)Ljava/lang/Object

CONSTANT_Methodref_info

CONSTANT_Class_info

COCONSTANT_NameAndType_info

CONSTANT_Utf8_info

Page 13: Java Virtual Machine ( Obfuscation and Java )

1313

AttributesAttributes

• SourceFileSourceFile - - описание исходникаописание исходника• ConstantValue – описание константыConstantValue – описание константы• Code –описание кодаCode –описание кода• Exceptions – список исключений кидаемых методомExceptions – список исключений кидаемых методом• InnerClasses – список внутрених классов из других InnerClasses – список внутрених классов из других

пакетовпакетов• Synthetic – отметка о том что член класса отсутствовал Synthetic – отметка о том что член класса отсутствовал

в исходникев исходнике• LineNumberTable – список ссылок на номера строкLineNumberTable – список ссылок на номера строк• LocalVariableTable – список имен локальных переменныхLocalVariableTable – список имен локальных переменных• Deprecated – отметка о том что член или класс Deprecated – отметка о том что член или класс

вытеснен (перегружен)вытеснен (перегружен)

Page 14: Java Virtual Machine ( Obfuscation and Java )

1414

Methods and attributesMethods and attributes

method_info {  u2 access_flags;     u2 name_index;      u2 descriptor_index;      u2 attributes_count;      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];     }

Page 15: Java Virtual Machine ( Obfuscation and Java )

1515

JVMJVM

Page 16: Java Virtual Machine ( Obfuscation and Java )

1616

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

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

• Не описывает «как?» Не описывает «как?»

Page 17: Java Virtual Machine ( Obfuscation and Java )

1717

JVM SubsystemsJVM Subsystems

GC

Verifier

Interpeter/JITC

Profiler?

ИсполняетИсполняетСобирает Собирает мусормусор

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

Ведет Ведет статическую статическую

предпроверкупредпроверку

Page 18: Java Virtual Machine ( Obfuscation and Java )

1818

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

• МногопоточностьМногопоточность

• Поддержка исключенийПоддержка исключений

• Модель абстрактной памяти Модель абстрактной памяти построенной на ссылках на объектыпостроенной на ссылках на объекты

• Автоматическая сборка мусораАвтоматическая сборка мусора

• Строгая типизированость Строгая типизированость предполагаетсяпредполагается

Page 19: Java Virtual Machine ( Obfuscation and Java )

1919

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

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

• Каждый поток в Каждый поток в JVM JVM имеет свой имеет свой стек стек «вызов»«вызов» заполняемый фреймами заполняемый фреймами

• JVM JVM оперирует соперирует с::– Стеком операндов (текушие подсчеты)Стеком операндов (текушие подсчеты)– Локальными переменными + Локальными переменными +

параметрамипараметрами– Статическими переменнымиСтатическими переменными

Page 20: Java Virtual Machine ( Obfuscation and Java )

2020

JVMJVM

Thread 1Thread 1

Thread 2Thread 2

JVM

Op S

tack

Loca

l Varia

ble

s

Para

mete

rs

Frame1Frame1JV

M O

p S

tack

Loca

l Varia

ble

s

Para

mete

rs

Frame2Frame2

JVM

Op S

tack

Loca

l Varia

ble

s

Para

mete

rs

Frame1Frame1

JVM

Op S

tack

Loca

l Varia

ble

s

Para

mete

rs

Frame3Frame3

JVM

Op S

tack

Loca

l Varia

ble

s

Para

mete

rs

Frame2Frame2

Runtime constpoolRuntime constpool

Page 21: Java Virtual Machine ( Obfuscation and Java )

2121

MEMORY

HEAP

Thread 1

JVMJVMThread 2

FRAME2

ALU

FRAME2

FRAME1FRAME1

FRAME STACK (call stack)

FRAME3JVM Op Stack

JVM Op Stack

FRAME1

Page 22: Java Virtual Machine ( Obfuscation and Java )

2222

BYTE codeBYTE code((КонцепцииКонцепции))• Байткоды имеют опкод в 8 бит и Байткоды имеют опкод в 8 бит и

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

пространствопространство• Есть свободные байткодыЕсть свободные байткоды• Есть сложные и простые байткоды (Есть сложные и простые байткоды (IS IS

неоднороден)неоднороден)– Со всеми вытекающимиСо всеми вытекающими

• Машина работает с данными размером Машина работает с данными размером 8, 32, 64 бита8, 32, 64 бита

Page 23: Java Virtual Machine ( Obfuscation and Java )

2323

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

• byte - 8-bit знаковое целое byte - 8-bit знаковое целое • sshort - 16-bithort - 16-bit знаковое целое знаковое целое • iint nt - - 32-bit32-bit знаковое целое знаковое целое • long long -- 64-bit знаковое целое 64-bit знаковое целое • char char -- 16-bit без 16-bit без знаковое для представления знаковое для представления

UNICODEUNICODE • floatfloat• doubledouble

Page 24: Java Virtual Machine ( Obfuscation and Java )

2424

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

вызовов, операции перехода по таблицевызовов, операции перехода по таблице• Операция безусловного переходаОперация безусловного перехода• Операции загрузки статических и динамических полейОперации загрузки статических и динамических полей• Создания новых объектов, массивов, проверка приведения Создания новых объектов, массивов, проверка приведения

типовтипов• Броски исключенийБроски исключений• Захват и освобождение мониторовЗахват и освобождение мониторов• Быстрая проверка на нольБыстрая проверка на ноль• Длинные переходы и длинные загрузкиДлинные переходы и длинные загрузки

Page 25: Java Virtual Machine ( Obfuscation and Java )

2525

Size reductionSize reduction00 00 00 00 00 00 11 00iconst_m1iconst_m1

iconst_niconst_nn = if (x < 9 && x > 3) then x – 3 else n = if (x < 9 && x > 3) then x – 3 else OTHER_OPCODEOTHER_OPCODE

push (byte)npush (byte)n

push (byte)-1push (byte)-1

bipushbipush

00 00 00 00 xx xx xx xx

xx xx xx xx xx xx xx xx00 00 00 11 00 00 00 00

sipushsipush

xx xx xx xx xx xx xx xx00 00 00 11 00 00 00 11 xx xx xx xx xx xx xx xx

push xpush x

push xpush x

ldcldc

xx xx xx xx xx xx xx xx00 00 00 11 00 00 11 00

ldc_wldc_w

xx xx xx xx xx xx xx xx00 00 00 11 00 00 11 11 xx xx xx xx xx xx xx xx

push CONST_POOL[x]push CONST_POOL[x]

push CONST_POOL[x]push CONST_POOL[x]

Page 26: Java Virtual Machine ( Obfuscation and Java )

2626

VierifierVierifier

• invoke virtualinvoke virtual– Метод ДОЛЖЕН БЫТЬ этого класса Метод ДОЛЖЕН БЫТЬ этого класса

или класса предка. или класса предка.

• А кто проверит?А кто проверит?– verifierverifier– В В runtimeruntime

Page 27: Java Virtual Machine ( Obfuscation and Java )

2727

JITJIT

• Pros vs ConsPros vs Cons– Time – 2x-40x fasterTime – 2x-40x faster– Memory Overhead – 5x-10xMemory Overhead – 5x-10x

• CompilationCompilation– JIT Just-In-TimeJIT Just-In-Time– AOT Ahead-Of-TimeAOT Ahead-Of-Time– HI Hotspot ImplementationsHI Hotspot Implementations

Page 28: Java Virtual Machine ( Obfuscation and Java )

2828

Garbage collectionGarbage collection((общие мыслиобщие мысли))• Мусор в Америке – федеральная собственностьМусор в Америке – федеральная собственность• А некоторые считают – это для склеротиковА некоторые считают – это для склеротиков

• Нет нужды явно освобождать Нет нужды явно освобождать память... машина сделает это самапамять... машина сделает это сама

• Представьте себе сервер и утечку Представьте себе сервер и утечку памяти в нем...памяти в нем...

• Если воспринимать исключения как Если воспринимать исключения как необходимость, надо как необходимость, надо как необходимость воспринимать и необходимость воспринимать и сборку мусора сборку мусора

Page 29: Java Virtual Machine ( Obfuscation and Java )

2929

ObfuscationObfuscation

Page 30: Java Virtual Machine ( Obfuscation and Java )

3030

Obfuscation and JavaObfuscation and Java

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

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

Page 31: Java Virtual Machine ( Obfuscation and Java )

3131

DecompilersDecompilers

• GotoGoto

• Бывает класс «Бывает класс «forfor»» и и ««synchronizedsynchronized»» в байт-кодев байт-коде но не но не бывает таких классов в бывает таких классов в JavaJava

• Что навсегда потеряно, того уж не Что навсегда потеряно, того уж не вернешь. Старые имена и связи не вернешь. Старые имена и связи не восстановить, если они восстановить, если они уничтоженыуничтожены

Page 32: Java Virtual Machine ( Obfuscation and Java )

3232

DecompilersDecompilers

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

iload_0iload_0istore_2istore_2iload_1iload_1istore_0istore_0iload_2iload_2istore_1istore_1

iload_0iload_0iload_1iload_1istore_0istore_0istore_1istore_1

b = ab = aa = ba = b

ОптимизаторОптимизатор

А бывает они даже А бывает они даже разваливаются….разваливаются….

Page 33: Java Virtual Machine ( Obfuscation and Java )

3333

Obfuscation - Names and Obfuscation - Names and profiles profiles (Retroguard)(Retroguard)• GNU GPLGNU GPL

• СкриптовыйСкриптовый

Page 34: Java Virtual Machine ( Obfuscation and Java )

3434

Names and profiles Names and profiles (JODE)(JODE)

• GNU GPLGNU GPL

• Переименование классов, методов и Переименование классов, методов и полейполей

• Удаление отладочной информации Удаление отладочной информации

• Удаление «мертвого» кода (классов, Удаление «мертвого» кода (классов, методов, полей)методов, полей)

• Оптимизация выделения локальных Оптимизация выделения локальных переменныхпеременных

• Есть декомпиляторЕсть декомпилятор

Page 35: Java Virtual Machine ( Obfuscation and Java )

3535

Names and profiles Names and profiles (SandMark)(SandMark)

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

• Основан на алгоритмах Основан на алгоритмах by by Venkatesan, Collberg, Stern, and Venkatesan, Collberg, Stern, and othersothers

Page 36: Java Virtual Machine ( Obfuscation and Java )

3636

Names and profiles Names and profiles ((DashODashO))• CommercialCommercial• Sun’s choiceSun’s choice• FeaturesFeatures

– Package/Class/Method/Field renaming using our Package/Class/Method/Field renaming using our patented Overload-Induction(tm) renaming patented Overload-Induction(tm) renaming system system

– Unused Class/Method/Field and constant pool Unused Class/Method/Field and constant pool entry removal entry removal

– Advanced Control Flow Obfuscation Advanced Control Flow Obfuscation – String Encryption String Encryption – Class and method level optimization to improve Class and method level optimization to improve

JIT performance JIT performance

Page 37: Java Virtual Machine ( Obfuscation and Java )

3737

Сокрытие Сокрытие именимен

((name name manglingmangling))

Изменение Изменение потока потока исполенияисполения

(code mangling)(code mangling)

Кодирование Кодирование строк (строк (strings strings enscriptionenscription))

RetroguarRetroguardd

??

SandMarkSandMark ?? ??

DashO DashO

JODEJODE ??

Names and profilesNames and profiles

Page 38: Java Virtual Machine ( Obfuscation and Java )

3838

Where is more information Where is more information available?available?• Исчерпывающая информация о Исчерпывающая информация о Java Java машине содержится в машине содержится в

спецификации спецификации SUN SUN и больше мало гдеи больше мало где: : – httphttp://sunsite.nstu.ru/java-stuff/vmspec/://sunsite.nstu.ru/java-stuff/vmspec/

• Информация о статистике и Информация о статистике и classfile classfile – ftpftp://://ftp.cs.arizona.eduftp.cs.arizona.edu//reportsreports/2004/TR04-11.pdf/2004/TR04-11.pdf

• Различные обфускаторыРазличные обфускаторы– http://www.retrologic.com/retroguard-docs.htmlhttp://www.retrologic.com/retroguard-docs.html– http://sandmark.cs.arizona.edu/publications.htmlhttp://sandmark.cs.arizona.edu/publications.html– httphttp://://www.preemptive.comwww.preemptive.com//productsproducts//dashodasho//Features.htmlFeatures.html

Page 39: Java Virtual Machine ( Obfuscation and Java )

3939

THE ENDTHE END

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

Page 40: Java Virtual Machine ( Obfuscation and Java )

4040

Q & AQ & AТеперь совсем конецТеперь совсем конец