SlideShare uma empresa Scribd logo
1 de 51
Игры с 
виртуализацией в 
JavaScript, или как я 
переписал эмулятор 
Евгений Потапов
Евгений Потапов 
генеральный директор 
компании ITSumma 
более 1000 серверов на 
поддержке компании 
120 миллионов уникальных 
посетителей ежедневно
Содержание 
• Предыстория 
• Существующие проекты 
• Принципы работы 
• Cпособы применения 
• Пути кастомизации 
• Заключение
Предыстория 
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 
• Не программист (сейчас не программист) 
• Вообще ничего не понимаю в эмуляторах 
(знаю что есть и как работают) 
• Могу быть не прав 
• Комментарии – Welcome 
Доступные решения 
• JSLinux - http://bellard.org/jslinux/ 
• PCE.JS - http://jamesfriend.com.au/pce-js/ 
• Virtual x86 - http://copy.sh/v86/ 
• PC.JS - http://www.pcjs.org/ 
• JSPCEmulator - http://jspcemulator.sourceforge.net/ 
• JSDosBox - http://jsdosbox.sourceforge.net/
JSLinux 
http://bellard.org/jslinux/
JSLinux 
• Автор Fabrice Bellard (LZEXE, FFmpeg, 
QEMU) 
• 32-битный x86-совместимый CPU 
• 16 мегабайт оперативной памяти 
• Только консольный режим 
• Работа с буфером обмена 
• JS-разработка
JSLinux - недостатки 
• Не развивается с 2012 года 
• Нет исходных кодов 
• Только текстовая консоль
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- 
org-jslinux-work 
Описание работы
Virtual x86 
http://copy.sh/v86/
Virtual x86 
• x86, 16 бит 
• Opensource 
• Активно развивается 
• Полноценное взаимодействие с 
виртуальной машиной через COM1
Virtual x86 - недостатки 
• Неполноценная реализация Protected 
mode
Virtual x86 - подробнее 
• http://copy.sh/v86/ 
сайт проекта 
• https://github.com/copy/v86/ 
репозиторий
PCE.JS 
• Эмулятор PCE скомпилированный в 
LLVM 
• LLVM транслированный в JavaScript 
с помощью Emscripten 
• Наиболее полноценная реализация 
виртуальной машины
PCE.JS
Недостатки PCE.JS 
• Не совсем “true” JavaScript-решение 
• Не очень активно развивается
PCE.JS подробнее 
• http://jamesfriend.com.au/pce-js/ 
сайт проекта (там есть даже MacOSX) 
• https://github.com/jsdf/pce 
github-репозиторий
«Вот же круто, а зачем?» 
Front-End-разработка: 
конвенциональное знание: 
- Не защитить данные 
- Не защитить алгоритмы
Защита данных. Доступные методы 
- Обфускация/минификация работы с 
данными 
- Шифрование/стеганография самих данных 
проблема: место обработки все равно будет 
доступно, console.log
Защита алгоритмов. Доступные методы 
- обфускация кода – js-beautifier-ы 
достигли большого прогресса (см. 
слайды про реверс JSLinux) 
- использование ActionScript/Java итп. - 
декомпиляция
Защита алгоритмов 
Интерпретатор собственного байткода 
Основная задача защиты – не сделать 
анализ невозможным, но сделать его 
дорогим
Защита алгоритмов 
Интерпретатор собственного байткода 
Для понимания алгоритма требуется 
понимание всего байткода, а 
фактически – анализ эмулятора
Защита алгоритмов 
Интерпретатор собственного байткода 
- необходима реализация эмулятора 
- необходима реализация байткода 
- необходим транслятор в байткод
Защита алгоритмов 
- LLVM + Emscripten? 
В конце концов - это опять же 
JavaScript
Защита алгоритмов 
Интерпретатор собственного байткода 
- необходима реализация эмулятора 
Виртуальная машина 
- необходима реализация байткода 
Машинный код IBM PC 
- необходим транслятор в байткод 
ASM/Знакомые языки высокого уровня
Что использовать? 
• Посмотрим на JSLinux 
• Оценим Virtual x86 
• Оценим PCE.JS
Как это работает? - JSLinux 
• Кодовая база: 
https://github.com/levskaya/jslinux-deobfuscated 
• Core functionality 
cpux86-ta.js (9719 LOC)
Как это работает – JSLinux 
Регистры
Как это работает - JSLinux 
Организация памяти
Как это работает - JSLinux 
Execution Loop 
строки 530-9664 (9134 строк кода) 
OUTER LOOP – считать OPCode 
EXECUTION LOOP – распарсить и 
исполнить
Как это работает - JSLinux
Как это работает - JSLinux
Как это работает - JSLinux 
Exec Loop
Как это работает - JSLinux 
http://pdos.csail.mit.edu/6.828/2010/readi 
ngs/i386/MOV.htm 
Opcode: 40 
Instruction: INC r16 
Description: Increment word register by 1 
grep 0x40
Как это работает - JSLinux
Как это работает - JSLinux 
• Работа с портами
Мучаем JSLinux 
• Интерфейс терминала как API между 
DOM-моделью и виртуальной 
машиной 
• В самой машине есть TCC/GCC/C++
Мучаем JSLinux
Мучаем JSLinux
Мучаем JSLinux
Мучаем JSLinux
Мучаем JSLinux
Мучаем JSLinux
JSLinux - проблемы 
• Лицензия 
• Код не публичен
Virtual x86 
• Наиболее перспективный с точки зрения 
использования в наших целях проект 
• Уже готово взаимодействие с DOM-моделью 
через COM1 
• Внутри Linux Busybox-а нет cc* (есть Lua) 
• Внутри DOS-а есть NASM
Virtual x86 - проблемы 
• Неполноценная реализация x86
PCE.JS 
• Внутри – полноценный x86 
• Эмулятор не работает напрямую с 
DOM-ом, фактически сверху еще один 
эмулятор с API C/C++, и 
модифицировать надо и его
PCE.JS 
Я пробовал перехват изменений в 
памяти – круто (можно написать и на 
Turbo Pascal-е), но большой overhead.
Заключение 
• Есть ли смысл? 
С Virtual x86 есть практический смысл 
(при наличии настоящих задач). 
• Куда двигаться? 
Создание VM и инфраструктуры 
непосредственно для разработки 
• Да здравствуют безумства!
Игры с виртуализацией в JavaScript, или как я 
переписал эмулятор 
Евгений Потапов 
http://itsumma.ru 
eapotapov@itsumma.ru 
http://facebook.com/eapotapov

Mais conteúdo relacionado

Mais procurados

Кэширование в веб-приложениях: что? где? когда?
Кэширование в веб-приложениях: что? где? когда?Кэширование в веб-приложениях: что? где? когда?
Кэширование в веб-приложениях: что? где? когда?CUSTIS
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Pavel Chertorogov
 
Демонизированный PHP - before it was cool
Демонизированный PHP - before it was coolДемонизированный PHP - before it was cool
Демонизированный PHP - before it was coolAndrey Tokarchuk
 
Сборка проектов с помощью ENB
Сборка проектов с помощью ENBСборка проектов с помощью ENB
Сборка проектов с помощью ENBAleksandr Boichenko
 
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"IT Event
 
«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр КолесеньIT Share
 
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "IT Event
 
dont badmouth mojo
dont badmouth mojodont badmouth mojo
dont badmouth mojoAnton Ukolov
 
Current State of Server Side JavaScript
Current State of Server Side JavaScriptCurrent State of Server Side JavaScript
Current State of Server Side JavaScriptOleg Podsechin
 
Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без болиAnton Piskunov
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинSergey Xek
 
Вредные советы для разработчиков
Вредные советы для разработчиковВредные советы для разработчиков
Вредные советы для разработчиковITCrowd Almaty
 
Обучение фронтенд разработке
Обучение фронтенд разработкеОбучение фронтенд разработке
Обучение фронтенд разработкеITCrowd Almaty
 
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...Ontico
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаendeveit
 
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил ТюринPG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюринpgdayrussia
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаITCrowd Almaty
 
Mihail Zachepilo - WebAssembly powered Machine Learning
Mihail Zachepilo - WebAssembly powered Machine LearningMihail Zachepilo - WebAssembly powered Machine Learning
Mihail Zachepilo - WebAssembly powered Machine LearningMaria Kuneva
 
Обзор интернет браузеров
Обзор интернет браузеровОбзор интернет браузеров
Обзор интернет браузеровAlina Kolosova
 

Mais procurados (19)

Кэширование в веб-приложениях: что? где? когда?
Кэширование в веб-приложениях: что? где? когда?Кэширование в веб-приложениях: что? где? когда?
Кэширование в веб-приложениях: что? где? когда?
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)
 
Демонизированный PHP - before it was cool
Демонизированный PHP - before it was coolДемонизированный PHP - before it was cool
Демонизированный PHP - before it was cool
 
Сборка проектов с помощью ENB
Сборка проектов с помощью ENBСборка проектов с помощью ENB
Сборка проектов с помощью ENB
 
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
 
«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень
 
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "
 
dont badmouth mojo
dont badmouth mojodont badmouth mojo
dont badmouth mojo
 
Current State of Server Side JavaScript
Current State of Server Side JavaScriptCurrent State of Server Side JavaScript
Current State of Server Side JavaScript
 
Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без боли
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 
Вредные советы для разработчиков
Вредные советы для разработчиковВредные советы для разработчиков
Вредные советы для разработчиков
 
Обучение фронтенд разработке
Обучение фронтенд разработкеОбучение фронтенд разработке
Обучение фронтенд разработке
 
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
 
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил ТюринPG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
 
Mihail Zachepilo - WebAssembly powered Machine Learning
Mihail Zachepilo - WebAssembly powered Machine LearningMihail Zachepilo - WebAssembly powered Machine Learning
Mihail Zachepilo - WebAssembly powered Machine Learning
 
Обзор интернет браузеров
Обзор интернет браузеровОбзор интернет браузеров
Обзор интернет браузеров
 

Semelhante a Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Потапов (ITsumma)

Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoFDmitry Buzdin
 
Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!Roman Dvornov
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только одинHappyDev
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON
 
еще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийеще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийsnowytoxa
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Ontico
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Yandex
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"Dev2Dev
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5Provectus
 
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...Ontico
 
развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)guest40e031
 
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Serversrit2010
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned Alexander Syrotenko
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013Alex Chistyakov
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Serguei Gitinsky
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 
webpack: 7 бед - один ответ
webpack: 7 бед - один ответwebpack: 7 бед - один ответ
webpack: 7 бед - один ответDenis Izmaylov
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 

Semelhante a Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Потапов (ITsumma) (20)

Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
 
Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
 
еще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийеще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложений
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
 
Async Python
Async PythonAsync Python
Async Python
 
развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)
 
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Servers
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
webpack: 7 бед - один ответ
webpack: 7 бед - один ответwebpack: 7 бед - один ответ
webpack: 7 бед - один ответ
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 

Mais de Ontico

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Ontico
 

Mais de Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Потапов (ITsumma)

  • 1. Игры с виртуализацией в JavaScript, или как я переписал эмулятор Евгений Потапов
  • 2. Евгений Потапов генеральный директор компании ITSumma более 1000 серверов на поддержке компании 120 миллионов уникальных посетителей ежедневно
  • 3. Содержание • Предыстория • Существующие проекты • Принципы работы • Cпособы применения • Пути кастомизации • Заключение
  • 4. Предыстория 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!”
  • 5. Disclaimer • Не программист (сейчас не программист) • Вообще ничего не понимаю в эмуляторах (знаю что есть и как работают) • Могу быть не прав • Комментарии – Welcome 
  • 6. Доступные решения • JSLinux - http://bellard.org/jslinux/ • PCE.JS - http://jamesfriend.com.au/pce-js/ • Virtual x86 - http://copy.sh/v86/ • PC.JS - http://www.pcjs.org/ • JSPCEmulator - http://jspcemulator.sourceforge.net/ • JSDosBox - http://jsdosbox.sourceforge.net/
  • 8. JSLinux • Автор Fabrice Bellard (LZEXE, FFmpeg, QEMU) • 32-битный x86-совместимый CPU • 16 мегабайт оперативной памяти • Только консольный режим • Работа с буфером обмена • JS-разработка
  • 9. JSLinux - недостатки • Не развивается с 2012 года • Нет исходных кодов • Только текстовая консоль
  • 10. 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- org-jslinux-work Описание работы
  • 12. Virtual x86 • x86, 16 бит • Opensource • Активно развивается • Полноценное взаимодействие с виртуальной машиной через COM1
  • 13. Virtual x86 - недостатки • Неполноценная реализация Protected mode
  • 14. Virtual x86 - подробнее • http://copy.sh/v86/ сайт проекта • https://github.com/copy/v86/ репозиторий
  • 15. PCE.JS • Эмулятор PCE скомпилированный в LLVM • LLVM транслированный в JavaScript с помощью Emscripten • Наиболее полноценная реализация виртуальной машины
  • 17. Недостатки PCE.JS • Не совсем “true” JavaScript-решение • Не очень активно развивается
  • 18. PCE.JS подробнее • http://jamesfriend.com.au/pce-js/ сайт проекта (там есть даже MacOSX) • https://github.com/jsdf/pce github-репозиторий
  • 19. «Вот же круто, а зачем?» Front-End-разработка: конвенциональное знание: - Не защитить данные - Не защитить алгоритмы
  • 20. Защита данных. Доступные методы - Обфускация/минификация работы с данными - Шифрование/стеганография самих данных проблема: место обработки все равно будет доступно, console.log
  • 21. Защита алгоритмов. Доступные методы - обфускация кода – js-beautifier-ы достигли большого прогресса (см. слайды про реверс JSLinux) - использование ActionScript/Java итп. - декомпиляция
  • 22. Защита алгоритмов Интерпретатор собственного байткода Основная задача защиты – не сделать анализ невозможным, но сделать его дорогим
  • 23. Защита алгоритмов Интерпретатор собственного байткода Для понимания алгоритма требуется понимание всего байткода, а фактически – анализ эмулятора
  • 24. Защита алгоритмов Интерпретатор собственного байткода - необходима реализация эмулятора - необходима реализация байткода - необходим транслятор в байткод
  • 25. Защита алгоритмов - LLVM + Emscripten? В конце концов - это опять же JavaScript
  • 26. Защита алгоритмов Интерпретатор собственного байткода - необходима реализация эмулятора Виртуальная машина - необходима реализация байткода Машинный код IBM PC - необходим транслятор в байткод ASM/Знакомые языки высокого уровня
  • 27. Что использовать? • Посмотрим на JSLinux • Оценим Virtual x86 • Оценим PCE.JS
  • 28. Как это работает? - JSLinux • Кодовая база: https://github.com/levskaya/jslinux-deobfuscated • Core functionality cpux86-ta.js (9719 LOC)
  • 29. Как это работает – JSLinux Регистры
  • 30. Как это работает - JSLinux Организация памяти
  • 31. Как это работает - JSLinux Execution Loop строки 530-9664 (9134 строк кода) OUTER LOOP – считать OPCode EXECUTION LOOP – распарсить и исполнить
  • 34. Как это работает - JSLinux Exec Loop
  • 35. Как это работает - JSLinux http://pdos.csail.mit.edu/6.828/2010/readi ngs/i386/MOV.htm Opcode: 40 Instruction: INC r16 Description: Increment word register by 1 grep 0x40
  • 37. Как это работает - JSLinux • Работа с портами
  • 38. Мучаем JSLinux • Интерфейс терминала как API между DOM-моделью и виртуальной машиной • В самой машине есть TCC/GCC/C++
  • 45. JSLinux - проблемы • Лицензия • Код не публичен
  • 46. Virtual x86 • Наиболее перспективный с точки зрения использования в наших целях проект • Уже готово взаимодействие с DOM-моделью через COM1 • Внутри Linux Busybox-а нет cc* (есть Lua) • Внутри DOS-а есть NASM
  • 47. Virtual x86 - проблемы • Неполноценная реализация x86
  • 48. PCE.JS • Внутри – полноценный x86 • Эмулятор не работает напрямую с DOM-ом, фактически сверху еще один эмулятор с API C/C++, и модифицировать надо и его
  • 49. PCE.JS Я пробовал перехват изменений в памяти – круто (можно написать и на Turbo Pascal-е), но большой overhead.
  • 50. Заключение • Есть ли смысл? С Virtual x86 есть практический смысл (при наличии настоящих задач). • Куда двигаться? Создание VM и инфраструктуры непосредственно для разработки • Да здравствуют безумства!
  • 51. Игры с виртуализацией в JavaScript, или как я переписал эмулятор Евгений Потапов http://itsumma.ru eapotapov@itsumma.ru http://facebook.com/eapotapov