Ломаем Bitcoin

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

Уязвимый центр

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


Принцип блок-чума от Елкина

Для того чтобы блокчейн работал, нужно сделать так чтобы каждый пользователь скачивал последнюю копию базы данных блокчейна, и работал с ней по определенным правилам. К таким правилам относится реализация принципа майнинга биткоина, получение процента от каждой транзакции при подтверждении (transaction fee) передачи средств с одного кошелька на другой. Пользователь не может нарисовать себе 1000000 биткоинов и купить на них что-то, т.к. у других пользователей количество денег на его счету будет неизменным. Также исключен вариант со снятием средств с чужого кошелька только внутри своей базы данных т.к. это изменение не будет отражено у других пользователей биткоина, и будет проигнорировано.
Уязвимость текущей реализации заключается в том что биткоин кошелек находится на сервере github что полностью перекрывает рекламные лозунги о децентрализации. Без загрузки кошелька из единого центра – сайта разработчика, невозможно работать с биткоином, тоесть в любой момент разработчики имеют полный контроль над сетью. Таким образом, сама технология блокчейн является децентрализованной, но клиент для работы с сетью загружается из единого центра.
Сценарий атаки  – допустим в кошелек добавлен код для снятия всех средств и обналичивания на счет третьих лиц, после этого любой пользователь последней версии кошелька потеряет все биткоины автоматически (без возможности восстановления). Сомневаюсь что многие владельцы кошелька проверяют и собирают его из исходного кода, поэтому последствия такой атаки затронут большинство пользователей.

Решает большинство

Блокчейн является децентрализованной p2p сетью, подтверждением всех операций занимаются сами пользователи в автоматическом режиме. Сценарий атаки  – необходимо получить 51% сети для того чтобы игнорировать подтверждения оставшихся 49%, после этого атакующий получает полный контроль над биткоином/блокчейном. Этого можно добиться подключив вычислительные мощности перекрывающие остальных. Этот сценарий атаки известен как 51% attack.

Угадай меня если сможешь

При первом запуске кошелька, компьютер генерирует пару – приватный и публичный ключ для обеспечения своей корректной работы. Уникальность данных ключей крайне высока, однако есть вариант сгенерировать ключи с помощью кодового слова – так называемый “brain wallet“. Человек хранит ключи у себя в голове, ему не нужно делать бекап файла wallet.dat, т.к. в любой момент ключи можно будет перегенерить с помощью данного кодового слова. Сценарий атаки – злоумышленник подбирает или узнает кодовое слово, генерирует пару приватный-публичный ключ и получает контроль над кошельком.

Просто скопируй

Пара приватный-публичный ключ содержится в файле wallet.dat. Любое программное обеспечение имеющее доступ к данному файлу – имеет доступ к кошельку биткоин. Защитой от такого нападения служит добавление кодового слова, которое должен будет помнить и вводить пользователь, для всех операций с кошельком. После добавления кодового слова, злоумышленнику нужно будет иметь wallet.dat и кодовое слово для получения полного контроля.
Также стоит добавить что при вводе кодового слова оно попадает в память компьютера, таким образом любые уязвимости аппаратные и/или программые позволяющие читать *чужую* память позволят прочитать и это кодовое слово вирусному программному обеспечению.

Ошибка системы

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

Прототип Death Mask для Windows

Видео:

Версия для Windows:
http://demensdeum.com/games/deathMask/prototype/DeathMaskPrototype.exe

Пользователи Linux и OS X могут собрать игру из исходников:
https://github.com/demensdeum/Death-Mask

Дальше я буду добавлять геймплейные элементы, освещение, анимацию.

Зачем делать игровой движок в 2017 году?

Много людей меня спрашивают, зачем делать игровой движок в 2017? Ведь на рынке уже столько готовых решений забесплатно.

Я подготовил отдельную статью с обзором текущего рынка геймдева, описал причины сподвигнувшие меня на создание Flame Steel Engine:

Зачем делать игровой движок в 2017 году?

Будущее уже здесь – WebAssembly

Несколько лет назад я прочитал о начале проекта WebAssembly (wasm), идея разработчиков звучала примерно так – разработать байт-код для запуска приложений на разных платформах, архитектурах, акцент делается на запуске приложений в браузере.

Желание выкинуть медленный и непредсказуемый javascript, у меня созрело давно. Уже вчера я собрал и запустил свою тестовую игрушку на WebAssembly.

Здесь я опишу как мне это удалось.

Компиляция WebAssembly с помощью Emscripten

Установка Emscripten описана в прошлой заметке. Допустим у вас уже есть проект который корректно собирается из C++ в javascript, для сборки в wasm вам нужно добавить ключи:

-s WASM=1 -s ""BINARYEN_METHOD='native-wasm'""

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

Включение WebAssembly

На данный момент идет процесс активной разработки, поэтому в стабильных версиях браузеров поддержки последней версии wasm нет. Для запуска wasm кода я использовал браузер Firefox Nightly для Ubuntu. Для включения wasm, нужно зайти в about:config и включить его:

Также заявлена поддержка в других браузерах (Chrome).

WebAssembly в действии

Проверить как работает WebAssembly вы можете открыв страницу игры Tanks движка Unity. Есть подозрение что там используется fallback на javascript, т.к. работает даже в обычном браузере.

Также можете попробовать запустить тестовую версию моей игры Bad Robots для wasm.

Если ваш браузер показывает черный экран и ошибку “Exception thrown, see JavaScript console” и в отладочной консоли текст “uncaught exception: no binaryen method succeeded. consider enabling more options, like interpreting, if you want that: https://github.com/kripken/emscripten/wiki/WebAssembly#binaryen-methods“, тогда устанавливайте лучший браузер Firefox Nightly и включайте WebAssembly по инструкции выше.

Всем удачной компиляции.

Flame Steel: Курьер Шустрые Глазки

Имя его Ревил, а прозвище было Шустрые Глазки. Знакомые кореша звали его Шустряк. Вырощенный улицей проворный пацан, он всегда знает что интересное и у кого можно достать. За это его он заработал уважение криминальной  среды Альтерры – 14.
Сейчас он находился внутри складского помещения Нейтив -Фарм-Юнитед. Вокруг стояли огромные контейнеры, запах фармацевтики.
– Че встал? Забирай и иди.
Огрызаясь сказал клерк, он выглядел взвинченным, переступал с ноги на ногу, было ясно что он очень боится. Рубашенка намокла от пота.
– Я из службы безопасности.
Лицо клерка побледнело, он зашатался еще сильнее.
– И что теперь?
– На пол – руки за голову!
Клерк нахмурился, сделав глубокий вдох, потянул руку вниз. Шустрые Глазки учуяли неладное – похоже он потянулся за пистолетом. Ревил оглушил его ударом в наглую морду, тельце с хлопком упало перед ним.
– Просил же по хорошему…
Обыскав клерка, Ревил обнаружил на месте пистолета обычный ингалятор, которым пользуются астматики. Также он нашел карту доступа к лабораторным секторам компании. Это была очень удачная находка.
Банда Токсичных Братьев направила его забрать партию запрещенного вещества – эндофомила. Но Ревилу было плевать на Братьев, и на их токсичность, здесь он был по другой причине – намеревался вытянуть свой счастливый билет.
Двери лифта распахнулись, Шустряк выбрал этаж указанный на карте – сорок второй. Лифт потихоньку поехал. Ревил обдумывал что будет делать в лабораторном секторе. Он был осведомлен об изощренных системах безопасности, интеллектуальных системах проверки личности, анализе мозговых волн и подобном.

Revil by Inc
Revil by Inc

Здесь он был не один, сотрудник компании Лориан согласился помочь ему вызвать сбой в работе систем, в результате чего у Ревила появится десять минут для осуществления намеченного.
На тридцать третьем этаже лифт остановился, над головой Ревила раздался громкий удар – что-то с грохотом приземлилось на крышу лифта.
Шустряк потянулся за пистолетом, но в этот момент через крышу лифта пробились металически шупальца. Они опутали его, раздался скрежет и крышу лифта вывернуло наружу. Сквозь дыру на него смотрело лицо девушки, – холодные пустые глаза, на пол лица металическая пластина с мигающими красными индикаторами, специально не скрытая под кожей.
– Перед смертью ответь, зачем ты пришел сюда?
Шустряк не мог пошевелиться, стальные шупальца сжимали его все сильнее, скоро он и вдохнуть не сможет.
– Я пришел за тем что по праву принадлежит мне!
На лице девушки появлился довольный оскал. Индикаторы мигали попеременно зеленым и красным…

Теряя себя

“Нельзя стать мастером всего” – меня всегда смешили подобные фразы. В эту ловушку специализации попадают все – пользователи, программисты, начальники, заказчики. “Хочу как у Microsoft/Apple/Google”, “Почему нам просто не сделать русский айфон?”, “Почему здесь не как в ворде/убере/фотошопе?” – эти фразы слышал любой, причастный хоть как-то к ИТ. Эти фразы, повторенные из уст разных людей, звучат еще смешнее.

Я спрошу тебя читатель – зачем тебе еще один Ворд? Зачем тебе еще один убер? Зачем тебе еще один фотошоп? Зачем тебе нужно чтобы “было как в айфоне”?
Почему ты привязываешь себя к интерфейсам и подходу только одной компании? Почему ты навешиваешь на себя ярлык любителя только продуктов Apple/Google/Microsoft? Почему ты не можешь открыть свой разум альтернативным подходам к решению задач, почему не хочешь быть более продуктивным?

Очень многим пользователям Microsoft не понравилось как компания решила что всем необходимо обновиться до Windows 10. Люди ругают неудобные интерфейсы айфона, крэши системы при обновлении, изменения в дизайне которые им не нужны, но все равно продолжают пользоваться ими, потому что так привыкли, и иметь “айфон” это статусно в современном обществе.

Иногда создается впечатление, что если Microsoft/Apple/Google попросят отдать собственных детей в обмен на продолжение работы с их продуктами, то из-за высокой привязанности к этим продуктам, люди запросто отдадут своих чад.

Не будь ими, не привязывайся к одному продукту, посмотри альтернативные варианты. Однажды мне предложили разработать систему для риелторов, с интерфейсом на Microsoft Excel, также были предложения разработать систему “интерактивной доски на Microsoft PowerPoint”. На вопрос почему именно Microsoft мне ответили что “так привыкли”, на вопрос есть ли лицензионное ПО от Microsoft в данных компаниях мне ответили уклончиво, что мол если нужно будет – то купят.

Читатель, я призываю тебя изучить грани ИТ мира, хотя-бы обзорно. Если ты пользуешься всю жизнь только Microsoft Windows, попробуй Apple OS X, или Linux. Если ты пользуешься только iPhone, попробуй хотя-бы неделю попользоваться Android последней версии. В момент когда ты переходишь на сторону только одной компании, закрываясь от продуктов других, в этот момент ты теряешь себя. Себя, как человека который может сам решать чего хочет, как человека который может выбирать наиболее удобный и продуктивный инструмент для решения конкретной задачи.

Программисты только одной платформы – еще одна головная боль лично для меня, как я считаю, для ИТ-индустрии в целом. Разработчики которые делают приложения с экспортом только в *.doc или только в *.pdf, разработчики которые привязываются к только одной устаревшей коммерческой БД (например IBM Informix, или боже упаси Firebird), только к одному типу железа (все эти нерабочие программы для x86 на андроид), я конечно понимаю что вы “привыкли”, но ребята пора меняться.

В своей работе очень часто пользуюсь не популярными, но очень удобными инструментами. Один из примеров – необходимо было уменьшить разрешение и сжать около 100 фотографий, для быстрой загрузки по 3G и выводе на iPad. В тот день я услышал одну из наиболее типичных фраз  – “Нам придется все фотографии вручную в *фотошопе* переводить к нужному виду”. Смешной она мне показалась т.к. я представил себе человека который будет вручную, как раб божий, все эти 100 фотографий переделывать в фотошопе, или пытаться автоматизировать через встроенный механизм. Дело здесь именно в том что человек настолько привязан к фотошопу, что даже не подозревал о наличии бесплатного, открытого набора инструментов как ImageMagick. ImageMagick позволяет делать с векторными и растровыми изображениями очень много вещей, в том числе идеально подошел для 5-минутного решения задачи со 100 картинками.

Будьте мастером всего, изучайте, пробуйте, не становитесь рабом конкретной корпорации.

Как мы делали Mad Racer

Привет дорогой читатель. В этой заметке я опишу свой опыт создания первой игры для мобильников Андроид. Многим людям нравится эта история, я считаю ее необходимо опубликовать. Это не история успеха, но думаю многим начинающим разработчикам даст понимание с чего начинать и что нужно делать для создания простенькой игры. Обязательно опишу свои ошибки, и что можно было сделать лучше.

Hewl-Tanky

Да простят меня Jamie Hewlett и Alan Martin, публикую отличный арт Tank Girl без их разрешения

Иногда впадаешь в такое состояние, в котором хочется создать что-то эдакое, чтобы все ахнули и разинув рты говорили “Ну ты крут“. Такая история случилась со мной в 2011 году, когда я посмотрев отрывок фильма “Tank Girl” загорелся идеей создать аркадную игру в комиксном стиле.
Почему для Андроид, а не iOS? Причина проста – у меня не было макинтоша и айфона, зато было огромное желание поддержать Линукс на мобильниках. В то время мне нравилась идеология FSF, а Ричард Метью Столлман был моим божеством.


Песня линукс хакеров. Прежде чем петь – поверь в мир во всем мире

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

Я сразу поставил временные рамки для реализации данного проекта – один месяц. За это время предстояло подтянуть знания по Java, изучить Android SDK, Eclipse, встретиться с монстром в лице OpenGL ES и положить его на обе лопатки. Со стороны графики предстояло создать около шести 3d моделей, оптимизированных для мобильников. Также необходимо было выпустить проект на золото в Android Market, в то время Google Play назывался так)

jpct_logo
jPCT-AE бесплатный 3д движок для Андроида

Так как времени было мало, необходимо было выбрать готовый 3d движок. Создать свой движок с нуля можно, но не очень продуктивно, так как на тестирование и совместимость со всеми устройствами уйдет большая часть времени. До прихода Unreal Engine, Unity, ThreeJS (HTML5), лидирующим движком был JPCT-AE. Движок поставлялся в виде готовой java библиотеки, поддерживал старые версии андроида. Также его создатель EgonOlsen оперативно занимается поддержкой и исправлением ошибок по запросу разработчиков.

antonHooligan

Кадры решают все – хулиган Антон согласился написать музыку для игры. Я всегда восхищался его творчеством, его работа послужила локомотивом движущим весь геймплей, заставляющим пользователя играть до последнего сбитого вертолета.

Столько всего, с чего же начать? Начать надо с установки Android SDK. Сейчас она поставляется со встроенным IDE – Android Studio. Но на тот момент IDE и SDK поставлялись отдельно. По документации на сайте Google произвел установку Android SDK, Eclipse. Также были установлены необходимые пакеты для Eclipse обеспечивающие сборку и запуск эмулятора Андроид. Через час я собрал тестовый проект jpct-AE:

Это было ухты! Но в эмуляторе телефона все тормозило очень сильно. Поэтому было принято решение купить телефон на платформе Андроид. Для этих целей был приобретен LG Optimus One P500. С тех пор я не пользуюсь отличными кнопочными телефонами нокиа на платформе Симбиан) Были проблемы с подключением телефона к Линуксу, если кто-то с ними встречается до сих пор, то проверьте настройки udev.


Джобс цитирует Пабло Пикассо

Посмотрев на Alien Runner, я понял что инопланетянина можно заменить на мотоцикл и двух панков с базукой, поляну вокруг превратить в мегаполис, а туман заменить на ночь из баллад Iron Maiden.

Как делать 3д модели? Да очень просто, открываешь урок по созданию low-poly моделей на Youtube и делаешь. Весь процесс заключался в обводке проекций в 3д редакторе. Мною были найдены чертежи вертолета Apache, и была сделана модель вертолета. Текстуры были взяты из открытых источников армии сша.

McDONNELL_DOUGLAS_AH-64_APACHE

Зачем нужен вертолет в игре с двумя панками и базукой? Когда я играл в прототип, то заметил что игрок может просто стоять на месте и набивать очки. Идеальным решением оказался вертолет, который прилетает и закидывает игрока субмаринными торпедами, не давая ему останавливаться.

В мобильных приложениях и играх того времени остро выражена проблема нехватки памяти, как на самом телефоне, так и в оперативной памяти. Производительность была тоже на троечку. Один ARM процессор с частотой 300-500 мгц. В результате тестирования на телефонах друзей, оказалось что у HTC в два раза меньше видеопамяти чем в LG, 8мб и 4мб со-но, из-за чего игра выбивала лимиты памяти и не запускалась. Все ресурсы были ужаты до того состояния, чтобы получить фреймрейт 30 кадров в секунду, и возможность запускаться почти на всем.


Не повторять!

В Alien Runner управление осуществлялось с помощью нажатий на экран. Такой тип управления мне показался не удобным, я реализовал управление с помощью акселерометра. Тоесть поворачиваешь телефон – поворачивается мотоцикл. Мне так понравилось что я даже добавил вид от первого лица, для самых смелых.

Поддержка со стороны разработчика движка jpct-AE мне понадобилась когда я увидел что в игре исчезает затемнение впереди. Это происходило после сворачивания и разворачивания приложения. Я создал тему на форуме jpct-AE и уже через два дня проблема была решена. Я интегрировал исправленную версию движка в игру.

Также стоял вопрос как реализовать бесконечную подачу машин. Для мобильной игры необходимо было придумать способ обеспечивающий добавление машин на игровую сцену БЫСТРО. Вариант с загрузкой из медленной памяти или sd карты был сразу отвергнут. На помощь пришел паттерн проектирования под названием объектный пул. Когда машина выходила из области видимости или уничтожалась, то она отключалась и в момент когда требовалось подать новую машину в начало сцены – то она включалась и ставилась туда.

android-market

Чтож настал день релиза. Игра была оттестирована, предварительный показ друзьям проведен, теперь предстояло выйти в золото на Android Market. Регистрация в Android Market  стоила 20$, оплачена. Добавлено описание, скриншоты. И в этот момент я понял что нужно записать видео.

Как записать видео для мобильного  проекта? Неужели снимать мобильный телефон на камеру, а потом выкладывать? Решение было интересным, я использовал Андроид эмулятор, отыграл в игру с фреймрейтом  два кадра в секунду, записав все происходящее на экране с помощью  программы которая называется примерно так gtkDesktopRecorder. С помощью VirtualDub скорость видео была увеличена до 30 кадров в секунду. Потом в лучшей программе для редактирования видео – Windows Movie Maker я добавил все игровые звуки и музыку.

Теперь настал момент ошибок. В раскрутку проекта не было вложено ничего, ни усилий, ни денег. Я тогда считал что проект отобьет сам себя. Игра ушла на золото, я создал тему на форуме jpct-AE о Mad Racer. Я получил 12 установок по доллару за две недели. И обнаружил игру в бесплатном доступе на куче варезных сайтов на следующий же день.

Напевая песню FSF “Share the software” я решил сделать бесплатную версию, с рекламой. Игра была переведена в разряд AdWare, внизу появился рекламный баннер от сети AdMob. Интеграция с рекламной системой прошла гладко. За месяц игра была установлена на десять тысяч устройств. Из рекламной сети я получил 50$.

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

Из положительных сторон хочу отметить получение мной места iOS разработчика в одной из лучших компании нашего города. И конечно же бесценный опыт.

madracerLogoСсылка на Google Play

Если понравилась статья, сделай репост вконтакте, Facebook)