Скачать презентацию Игры с виртуализацией в Java Script или как Скачать презентацию Игры с виртуализацией в Java Script или как

2014 HighLoad - Игры с виртуализацией в JavaScript, или как я переписал эмулятор.pptx

  • Количество слайдов: 51

Игры с виртуализацией в Java. Script, или как я переписал эмулятор Евгений Потапов Игры с виртуализацией в Java. Script, или как я переписал эмулятор Евгений Потапов

Евгений Потапов генеральный директор компании ITSumma более 1000 серверов на поддержке компании 120 миллионов Евгений Потапов генеральный директор компании ITSumma более 1000 серверов на поддержке компании 120 миллионов уникальных посетителей ежедневно

Содержание • • • Предыстория Существующие проекты Принципы работы Cпособы применения Пути кастомизации Заключение Содержание • • • Предыстория Существующие проекты Принципы работы Cпособы применения Пути кастомизации Заключение

Предыстория 18. 05. 2011, https: //news. ycombinator. com/item? id=2555349 “Boot a linux kernel right Предыстория 18. 05. 2011, https: //news. ycombinator. com/item? id=2555349 “Boot a linux kernel right inside your browser. ” “I'm utterly dumbfounded. Not only does it boot, it's got emacs, and a compiler. Welcome to JS/Linux ~ # emacs test. c ~ # cat test. c void main(void) { printf("Hello World!n"); } ~ # tcc test. c -o hello ~ #. /hello Hello World!”

Disclaimer • Не программист (сейчас не программист) • Вообще ничего не понимаю в эмуляторах Disclaimer • Не программист (сейчас не программист) • Вообще ничего не понимаю в эмуляторах (знаю что есть и как работают) • Могу быть не прав • Комментарии – Welcome

Доступные решения • • • JSLinux - http: //bellard. org/jslinux/ PCE. JS - http: Доступные решения • • • JSLinux - http: //bellard. org/jslinux/ PCE. JS - http: //jamesfriend. com. au/pce-js/ Virtual x 86 - http: //copy. sh/v 86/ PC. JS - http: //www. pcjs. org/ JSPCEmulator - http: //jspcemulator. sourceforge. net/ JSDos. Box - http: //jsdosbox. sourceforge. net/

JSLinux http: //bellard. org/jslinux/ JSLinux http: //bellard. org/jslinux/

JSLinux • • • Автор Fabrice Bellard (LZEXE, FFmpeg, QEMU) 32 -битный x 86 JSLinux • • • Автор Fabrice Bellard (LZEXE, FFmpeg, QEMU) 32 -битный x 86 -совместимый CPU 16 мегабайт оперативной памяти Только консольный режим Работа с буфером обмена JS-разработка

JSLinux - недостатки • Не развивается с 2012 года • Нет исходных кодов • JSLinux - недостатки • Не развивается с 2012 года • Нет исходных кодов • Только текстовая консоль

JSLinux - подробнее • • http: //bellard. org/jslinux/tech. html Technical Notes https: //news. ycombinator. JSLinux - подробнее • • http: //bellard. org/jslinux/tech. html Technical Notes https: //news. ycombinator. com/item? id=2555349 Обсуждение на Hacker News https: //github. com/levskaya/jslinux-deobfuscated Деобфусцированный и обработанный код http: //www. quora. com/Emulators-computing/How-does-bellard-orgjslinux-work Описание работы

Virtual x 86 http: //copy. sh/v 86/ Virtual x 86 http: //copy. sh/v 86/

Virtual x 86 • • x 86, 16 бит Opensource Активно развивается Полноценное взаимодействие Virtual x 86 • • x 86, 16 бит Opensource Активно развивается Полноценное взаимодействие с виртуальной машиной через COM 1

Virtual x 86 - недостатки • Неполноценная реализация Protected mode Virtual x 86 - недостатки • Неполноценная реализация Protected mode

Virtual x 86 - подробнее • http: //copy. sh/v 86/ сайт проекта • https: Virtual x 86 - подробнее • http: //copy. sh/v 86/ сайт проекта • https: //github. com/copy/v 86/ репозиторий

PCE. JS • Эмулятор PCE скомпилированный в LLVM • LLVM транслированный в Java. Script PCE. JS • Эмулятор PCE скомпилированный в LLVM • LLVM транслированный в Java. Script с помощью Emscripten • Наиболее полноценная реализация виртуальной машины

PCE. JS PCE. JS

Недостатки PCE. JS • Не совсем “true” Java. Script-решение • Не очень активно развивается Недостатки PCE. JS • Не совсем “true” Java. Script-решение • Не очень активно развивается

PCE. JS подробнее • http: //jamesfriend. com. au/pce-js/ сайт проекта (там есть даже Mac. PCE. JS подробнее • http: //jamesfriend. com. au/pce-js/ сайт проекта (там есть даже Mac. OSX) • https: //github. com/jsdf/pce github-репозиторий

 «Вот же круто, а зачем? » Front-End-разработка: конвенциональное знание: - Не защитить данные «Вот же круто, а зачем? » Front-End-разработка: конвенциональное знание: - Не защитить данные - Не защитить алгоритмы

Защита данных. Доступные методы - Обфускация/минификация работы с данными - Шифрование/стеганография самих данных проблема: Защита данных. Доступные методы - Обфускация/минификация работы с данными - Шифрование/стеганография самих данных проблема: место обработки все равно будет доступно, console. log

Защита алгоритмов. Доступные методы - обфускация кода – js-beautifier-ы достигли большого прогресса (см. слайды Защита алгоритмов. Доступные методы - обфускация кода – js-beautifier-ы достигли большого прогресса (см. слайды про реверс JSLinux) - использование Action. Script/Java итп. декомпиляция

Защита алгоритмов Интерпретатор собственного байткода Основная задача защиты – не сделать анализ невозможным, но Защита алгоритмов Интерпретатор собственного байткода Основная задача защиты – не сделать анализ невозможным, но сделать его дорогим

Защита алгоритмов Интерпретатор собственного байткода Для понимания алгоритма требуется понимание всего байткода, а фактически Защита алгоритмов Интерпретатор собственного байткода Для понимания алгоритма требуется понимание всего байткода, а фактически – анализ эмулятора

Защита алгоритмов Интерпретатор собственного байткода - необходима реализация эмулятора - необходима реализация байткода - Защита алгоритмов Интерпретатор собственного байткода - необходима реализация эмулятора - необходима реализация байткода - необходим транслятор в байткод

Защита алгоритмов - LLVM + Emscripten? В конце концов - это опять же Java. Защита алгоритмов - LLVM + Emscripten? В конце концов - это опять же Java. Script

Защита алгоритмов Интерпретатор собственного байткода - необходима реализация эмулятора Виртуальная машина - необходима реализация Защита алгоритмов Интерпретатор собственного байткода - необходима реализация эмулятора Виртуальная машина - необходима реализация байткода Машинный код IBM PC - необходим транслятор в байткод ASM/Знакомые языки высокого уровня

Что использовать? • Посмотрим на JSLinux • Оценим Virtual x 86 • Оценим PCE. Что использовать? • Посмотрим на JSLinux • Оценим Virtual x 86 • Оценим PCE. JS

Как это работает? - JSLinux • Кодовая база: https: //github. com/levskaya/jslinuxdeobfuscated • Core functionality Как это работает? - JSLinux • Кодовая база: https: //github. com/levskaya/jslinuxdeobfuscated • Core functionality cpux 86 -ta. js (9719 LOC)

Как это работает – JSLinux Регистры Как это работает – JSLinux Регистры

Как это работает - JSLinux Организация памяти Как это работает - JSLinux Организация памяти

Как это работает - JSLinux Execution Loop строки 530 -9664 (9134 строк кода) OUTER Как это работает - JSLinux Execution Loop строки 530 -9664 (9134 строк кода) OUTER LOOP – считать OPCode EXECUTION LOOP – распарсить и исполнить

Как это работает - JSLinux Как это работает - JSLinux

Как это работает - JSLinux Как это работает - JSLinux

Как это работает - JSLinux Exec Loop Как это работает - JSLinux Exec Loop

Как это работает - JSLinux http: //pdos. csail. mit. edu/6. 828/2010/readings/i 386/MOV. htm Opcode: Как это работает - JSLinux http: //pdos. csail. mit. edu/6. 828/2010/readings/i 386/MOV. htm Opcode: 40 Instruction: INC r 16 Description: Increment word register by 1 grep 0 x 40

Как это работает - JSLinux Как это работает - JSLinux

Как это работает - JSLinux • Работа с портами Как это работает - JSLinux • Работа с портами

Мучаем JSLinux • Интерфейс терминала как API между DOMмоделью и виртуальной машиной • В Мучаем JSLinux • Интерфейс терминала как API между DOMмоделью и виртуальной машиной • В самой машине есть TCC/GCC/C++

Мучаем JSLinux Мучаем JSLinux

Мучаем JSLinux Мучаем JSLinux

Мучаем JSLinux Мучаем JSLinux

Мучаем JSLinux Мучаем JSLinux

Мучаем JSLinux Мучаем JSLinux

Мучаем JSLinux Мучаем JSLinux

JSLinux - проблемы • Лицензия • Код не публичен JSLinux - проблемы • Лицензия • Код не публичен

Virtual x 86 • Наиболее перспективный с точки зрения использования в наших целях проект Virtual x 86 • Наиболее перспективный с точки зрения использования в наших целях проект • Уже готово взаимодействие с DOM-моделью через COM 1 • Внутри Linux Busybox-а нет cc* (есть Lua) • Внутри DOS-а есть NASM

Virtual x 86 - проблемы • Неполноценная реализация x 86 Virtual x 86 - проблемы • Неполноценная реализация x 86

PCE. JS • Внутри – полноценный x 86 • Эмулятор не работает напрямую с PCE. JS • Внутри – полноценный x 86 • Эмулятор не работает напрямую с DOM-ом, фактически сверху еще один эмулятор с API C/C++, и модифицировать надо и его

PCE. JS Я пробовал перехват изменений в памяти – круто (можно написать и на PCE. JS Я пробовал перехват изменений в памяти – круто (можно написать и на Turbo Pascal-е), но большой overhead.

Заключение • Есть ли смысл? С Virtual x 86 есть практический смысл (при наличии Заключение • Есть ли смысл? С Virtual x 86 есть практический смысл (при наличии настоящих задач). • Куда двигаться? Создание VM и инфраструктуры непосредственно для разработки • Да здравствуют безумства!

Игры с виртуализацией в Java. Script, или как я переписал эмулятор Евгений Потапов http: Игры с виртуализацией в Java. Script, или как я переписал эмулятор Евгений Потапов http: //itsumma. ru eapotapov@itsumma. ru http: //facebook. com/eapotapov