...

суббота, 22 августа 2015 г.

М-м-м-м… Маршмэллоу: что нового в Android 6 и Android SDK

Всем привет! Как вы все уже, наверное, знаете, шестая версия нашей ОС Android наконец получила официальное название: Android 6.0 Marshmallow. Предположений о том, как именно будет называться новая версия было много: и Milkshake, и Merengue, и M&M’s с MilkyWay. Кроме того, вышла финальная версия Android SDK, поддерживающая все новые возможности OS Android. О названии, инструментах для разработчиков, самых важных улучшениях и о том, что нас ждёт с приходом Android 6.0, сегодня и поговорим.



Android с первых версий получает названия в алфавитном порядке, привязанные к каким-либо вкусным десертам.

Ранние версии 1.0 и 1.1 изначально назывались Astroboy и Bender. Но из-за возможных проблем с авторскими правами на названия других роботов и андроидов, чтобы соответствовать остальной линейке, были переименованы. Текущий список версий Android выглядит так:

Скрытый текст
  • Android 1.0 Apple Pie
  • Android 1.1 Banana Bread
  • Android 1.5 Cupcake
  • Android 1.6 Donut
  • Android 2.0 / 2.1 Eclair
  • Android 2.2 FroYo
  • Android 2.3.x Gingerbread
  • Android 3.x Honeycomb
  • Android 4.0 Ice Cream Sandwich
  • Android 4.1 / 4.2 / 4.3 JellyBean
  • Android 4.4 KitKat
  • Android 5.0 / 5.1 Lollipop
  • Android 6.0 Marshmallow



Маршмэллоу не имеет конкретного аналога в европейской или русской культуре. Сегодня это типично американский продукт (не смотря на то, что изначально его придумали во Франции), который вы чаще всего видите по телевизору в виде непонятных-белых-штучек-которые-жарят-на-палках-над-костром.

Для их приготовления используется кукурузный сироп, желатин, горячая вода и декстроза (т.н.«Виноградный сахар»).

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


Ладно, мы здесь не вкусняшки обсуждать собрались. Если кто успел забыть (а с момента анонса Android 6.0 на Хабре прошло немало времени), то основными направлениями работы после 5.0 и 5.1 стали безопасность, приватность и продление времени автономной работы устройств.
С распространением различных биометрических датчиков производители были вынуждены самостоятельно внедрять алгоритмы работы с ними в OS Android. С версии 6.0 подобные «костыли» уйдут в прошлое. Работу с биометрией возьмёт на себя набор системных API. Разблокировка экрана, работа с датчиком для сторонних приложений вне зависимости от модели смартфона, покупки внутри магазина Google Play и авторизация на сайтах одним касанием станут реальностью.

Производителям больше не придётся изобретать велосипеды и открывать свои API, а разработчикам адаптировать код под каждый новый смартфон с датчиком отпечатков пальцев, сканером радужной оболочки глаза или даже ДНК-анализатором, если такой кто-нибудь решат выпустить.


Сейчас (в Android 4.х / 5.х) разрешения для приложений выглядят следующим образом. При установке той или иной программы вам выдаётся список того, что приложение будет уметь делать. Например, вылезать в сеть, смотреть список контактов, отправлять / принимать SMS. На основе этого списка вы могли решать, стоит ли пользоваться «Самыми смешными котятами 2015», если они хотят иметь доступ к истории звонков, списку контактов и отправке SMS, или здесь что-то не так.

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

Внедрение в OS Android системы управления разрешениями (App Ops) началось ещё в версии 4.4.2, но на момент первых тестов были проблемы с работой приложений, не получивших доступ к запрашиваемым функциям. Тем не менее, функция была и остаётся востребованной. Мы совершенствовали её до тех пор, пока она не была готова к работе на консьюмерских устройствах. Мы научили систему обрабатывать подобные исключения и предоставили общие API, благодаря которым разработчики смогут научить приложения правильно реагировать на отказ в дополнительных привилегиях. Кроме того, теперь приложения будут выдавать запросы на работу с пользовательскими данными не в момент установки, а в процессе работы, чтобы пользователь не забыл или не пропустил момент, когда очередные «Котята» захотят отправить миллион SMS на какой-нибудь короткий номер.


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

Встроенная система мобильных платежей Andoid Pay позволит создавать виртуальные кредитные карты, привязывать имеющиеся карточки и расплачиваться в магазинах (через NFC и систему Paypass / payWave) и онлайн быстро, безопасно, с биометрической авторизацией. Сервис во многом похож на уже имеющийся NFC-ассистент и концентратор карточек Google Wallet, но ориентирован на работу с вендорами и магазинами, а не на P2P платежи. Сейчас эта система тестируется на территории США.


Сегодня время автономной работы от аккумулятора в большей степени зависит от железа и сценария использования, чем от операционной системы. Законы физики и КПД отдельных элементов смартфонов обмануть не выйдет, так что наравне с эволюционным развитием железа, создатели смартфонов трудятся и над софтом. Не важно, Android у вас, iOS или Windows Phone, под нагрузкой в виде трёхмерной графики с яркими спецэффектами современных игр аппараты сдаются примерно через одинаковое количество часов.

Если же ваш сценарий использования вписывается в некоторый «среднестатистический» юзкейс (десяток-другой минут звонков, несколько часов работы экрана и передачи данных, пара-тройка часов воспроизведения музыки через гарнитуру), то аппарат проживёт день-полтора.

К сожалению, порой смартфон оставляет нас без столь важных процентов зарядки в самый ненужный момент. Для увеличения работы на одном заряде АКБ в Android M будет применяться новый алгоритм Doze, который снижает энергопотребление и «притормаживает» фоновые сервисы, если ваш девайс долгое время находится без движения.

В ранних билдах Android Marshmallow экономия заряда достигала 5-8% в сутки и почти 15% за двое суток. Сейчас эти показатели ещё немного выросли, но порядок величин остался примерно тот же. Мы надеемся, что введение Doze поможет вам оставаться на связи в самые важные моменты.


Помимо этих крупных и важных изменений в Android 6.0 вас ждут десятки менее заметных улучшений (например, возможность выбрать между светлой и тёмной темой оформления системы), большая часть из которых останется «под капотом», совершенно незаметной для большей части пользователей. Тем не менее, есть ещё одна штука, которая не изменит экосистему устройств, не перевернёт представление об автономности, безопасности или удобных платежах, но точно будет востребованной. Речь идёт о мультиоконном режиме.

Мы уже видели реализацию подобных возможностей на фаблетах LG и Samsung. Теперь же такая технология будет доступна «из коробки». Хотите одновременно читать комментарии и смотреть видео на YouTube? Открыть браузер и чат, подсматривать в Wikipedia и аргументированно доказывать свою точку зрения? Ждать обновления ленты Twitter’а и смотреть он-лайн трансляцию Google I/O? Проще простого.


Мы обновили Android SDK, включив в него полный набор актуальных Android API, для того чтобы вы могли привести свои приложения в соответствие с возможностями OS Android 6.0: научить их работать с биометрией, если это требуется; обеспечить правильную обработку нового механизма разрешений; внедрить поддержку оформления в светлых или тёмных тонах.

API версии 23 содержат множество изменений, какие-то практически незаметны и не потребуют серьёзных исправлений в приложениях, другие — чувствительнее, но все обновления направлены только на улучшение пользовательского опыта. Вместе с тем, мы рекомендуем вам обновить инструментарий и проверить ваше приложение на совместимость с новыми API до того, как состоится массовый переход на них.

Финальная сборка инструментов доступна для загрузки через SDK Studio.


Для тестирования приложений на совместимость с новыми API помимо SDK (который сейчас получил статус «финальной» версии) вам понадобятся, образы эмулятора или developer preview-сборок Android Marshmallow для Nexus-устройств.

Данные образы позволяют протестировать любое приложение на реальном железе девайсов линейки Nexus, но пока не рекомендованы к повседневному использованию.

Запуск финальной версии Android 6.0 начнётся чуть позже (осенью), и для дальнейшего получения OTA-обновлений вам потребуется перепрошить девайсы на заводскую прошивку / финальную сборку Android 6.0, так как поддержка developer preview прекратится.


Наше новое крупное обновление позволит Android-устройствам работать дольше, успешно защищать пользовательские данные, проводить безопасные платежи и просто станет ещё удобнее, и мы вместе с вами ждём выхода готовых прошивок для линейки устройств Nexus и девайсов наших партнёров.

Уже сейчас Google Play готов принимать через консоль разработчика ваши приложения, созданные с использованием API 23-й версии в любой из каналов (Alpha, Beta или Production). Как только пользовательские устройства обновятся до Android 6.0, они автоматически обновят и ваше приложение до актуальной версии. Если вы уже сейчас хотите убедиться в том, что ваше обновлённое приложение нормально работает не только на Android 6.0, но и на более старых версиях OS Android, мы рекомендуем воспользоваться обновлённым сервисом Бета-тестирования. Энтузиасты со всего Google Play смогут протестировать новые возможности вашего приложения с помощью открытого Бета-теста, а вы — получить ценные отзывы, сообщения об ошибках и возможность внести все необходимые изменения до релиза Android 6.0, который выйдет этой осенью. К слову, до неё осталось всего ничего.

Изучайте новые API, обновляйте и тестируйте свои приложения, чтобы встретить новый Android во всеоружии. Хороших выходных! :)

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.

Разработка HTML5 игры под Android с нуля и до релиза

Вместо вступления


Потратив несколько суток подряд (без перерыва на сон) на изучение поддержки HTML5 всеми любимыми Android-гаджетами, решил, что данной теме стоит уделить внимание. В статье постараюсь раскрыть по шагам все этапы (конечно же базовые/ключевые/основные) создания HTML5 Игрового приложения для Android от идеи до релиза самого APK файла. Возможно, ничего нового я и не открою маститым разработчикам, но для новичков постараюсь описать все как можно проще, со скриншотами и пояснениями.

image

Желающих узнать подробнее приглашаю под кат.

Идея


Вообще много можно говорить о потенциале Android, о развитии HTML5 и об их взаимодействии. Я этого делать не буду. Так что, сразу к делу.

Идея создания игры под Android наверняка заседает в разумах десятков сотен разработчиков, и тех, кто себя таковыми считает. Я не исключение.

Почему HTML5? — JavaScript единственный язык, который я учил Нативность. Пишешь игру на JS, а затем для абсолютно любой ОС создаешь обертку в удобном виде и на любом Языке.

Весь процесс будет разбит на несколько шагов а итоговое приложение будет состоять из двух частей:
— Обертка (в данном случае для Android)
— Игра

Шаг 1. Написание самой игры


Еще одним плюсом написания игры на HTML5 является тот факт, что для тестирования не требуется куча запущенных программ, IDE, эмуляторов и так далее. Нужен лишь браузер (в моем случае это Chromium) и текстовый редактор (BlueFish)

Игра будет несложной: есть синий прямоугольник и есть зеленый прямоугольник. Задача игрока — перетащить синий прямоугольник на зеленый в обход красного, который перемещается по игровому полю в произвольном направлении.

Для разработки игры буду использовать J2ds (игровой движок).

Код готовой игры:

index.html
<!DOCTYPE html>
<html> 
 <head>
  <script type="text/javascript" src="j2ds/engineMath.js"></script>
  <script type="text/javascript" src="j2ds/engineKey.js"></script>   
  <script type="text/javascript" src="j2ds/engineDOM.js"></script>
  <script type="text/javascript" src="j2ds/engine2D.js"></script>
  <script type="text/javascript" src="j2ds/engineNet.js"></script>
  <script type="text/javascript" src="j2ds/engineParticles.js"></script>
  <script type="text/javascript" src="j2ds/enginePE.js"></script>  
  <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
  <meta name="viewport" content="width=device-width,user-scalable=no" />  
  <title>Demo Game on J2ds v.0</title>
 </head>

<body id="gameBody">

 <canvas id="iCanvas" width="500" height="280"></canvas>
<br>
<div id="hint"></div>

<script type="text/javascript">
// Инициализируем устройство ввода
initInput('gameBody');

// Создаем сцену
scene= createScene('iCanvas', '#aeeaae');

// Стартуем в полноэкранном режиме
scene.fullScreen(true);

post= createPost(scene);

score= 5;

// Создаем прямоугольники

blue= createRect(vec2di(100, 100), vec2di(30, 30), 'blue');

green= createRect(vec2di(300, 200), vec2di(30, 30), 'green');
green.dX= -1; green.dY= 1;

red= createRect(vec2di(16, 200), vec2di(30, 30), 'red');
red.dX= 1; red.dY= -1;

restart= createRect(vec2di(430, 10), vec2di(60, 60), '#ad21ad');


GameOver= function() {
        // Обрабатываем позицию касания / мыши
 input.upd(scene);
 // Выводим текст
 scene.drawText(vec2di(5,5), 'Score: '+score);
 // Выводим текст
 scene.drawTextOpt(vec2df(140, 100), 'Проиграл!',
    'bold 40px Courier New', '#326598');
 if (input.lClick && input.onNode(restart)) setActivEngine(Game);   
 restart.draw(scene);
}

Success= function() {
        // Обрабатываем позицию касания / мыши
 input.upd(scene);
 // Выводим текст
 scene.drawText(vec2di(5,5), 'Score: '+score);
 // Выводим текст
 scene.drawTextOpt(vec2df(140, 100), 'Победа!',
    'bold 40px Courier New', '#326598');
 if (input.lClick && input.onNode(restart)) setActivEngine(Game);   
 restart.draw(scene);
}


// Описываем игровое состояние Game
Game= function() {
 // Обрабатываем позицию касания / мыши
 input.upd(scene);

 // Выводим текст
 scene.drawText(vec2di(5,5), 'Score: '+score);

 blue.color= input.lClick?'yellow' : 'blue';

 if (input.lClick)  
 {
  red.move(vec2di(red.dX, red.dY));
  green.move(vec2di(green.dX, green.dY));  
  
  
  blue.move(
   vec2df(
    blue.getPosition().x > input.pos.x ? -1*score/2 : 1*score/2,
    blue.getPosition().y > input.pos.y ? -1*score/2 : 1*score/2    
   ) )
  ;
  
  
  if (green.collisionScene(scene).x != 0) green.dX= -green.dX;
  if (green.collisionScene(scene).y != 0) green.dY= -green.dY;
  if (red.collisionScene(scene).x != 0) red.dX= -red.dX;
  if (red.collisionScene(scene).y != 0) red.dY= -red.dY;
 
 }

 if (blue.collision(red)) {
  input.cancel(); score-= 1;
  setActivEngine(GameOver);
  red.setPosition(vec2df(200, 100));
  blue.setPosition(vec2df(50, 50));
 }

 if (blue.collision(green)) {
  input.cancel(); score+= 1;
  setActivEngine(Success);
  red.setPosition(vec2df(200, 100));
  blue.setPosition(vec2df(50, 50));
  blue.setPosition(vec2di(Random(0, 450), Random(0, 250)));
 }


 // Вращаем прямоугольники
 blue.turn(1); 
 green.turn(720/blue.getDistance(green)); 
 red.turn(Random(1, 5));
        
        
        // Отрисовываем объекты
        green.draw(scene); blue.draw(scene); red.draw(scene);

 //post.motionBlur(4);
 
}

// Стартуем игру с игровым состоянием Game и FPS 25
startGame(Game, 30);
</script>

</body>
</html>




На качество кода игры внимания можно не обращать, ибо не это цель статьи. Хотя конечно, можно оптимизировать сколько угодно, этот процесс вообще наверное бесконечен.

Шаг 2. Android Studio. Создание обертки для игры


Я не собираюсь ни с кем мериться крутостью той или иной IDE для разработки под Android, а покажу на примере Android Studio. Для работы нам потребуется:
— Java машина (под мою Linux подходит OpenJDK);
— Дистрибутив Android Studio.

Скачиваем, устанавливаем.

Как только все установите (Этих двух программ достаточно), запускайте Android Studio.

image

Откроется стартовое окно (если первый запуск), если не первый — то откроется сама IDE, но сути не меняет, пройдем в SDK Manager:

image

Тут нужно галочками отметить необходимые вам версии Android, с которыми вы будете работать, в моем случае это Android 4.4.2, вы можете выбрать хоть все сразу.

Главное — выберете обязательно «Tools» и «Extras» и нажимайте «install packages».

Как только у вас все скачалось, запустится IDE с унылым серым фоном и несколькими кнопками, жмем первую и создаем новый проект. Если IDE запустилась сразу в рабочем состоянии, то: «File->New->New Project»

image
Заполняем необходимые поля, и жмем Next

image
Выбираем нужную версию андроида и Next

image
Тут выбираем Blank Activity (пустой шаблон с Hello, World!)

В следующем окне заполняем данные для создания классов, я менять не буду для наглядности:

image

Торжественно жмем Finich и ждем, пока IDE все сконфигурирует и подготовит для работы.

image

Откроется окно с дизайнером форм. Оно не такое, как в Lazarus, Delphi, но что-то схожее все равно имеется:

image

Не спешите ничего менять или что-то щелкать, настройка еще не окончена. Открываем «Tolls->Android->AVD Manager» для настройки эмулятора.

image

Тут, если ничего нет, жмем «Cereate Virtual Device», если есть, можете не создавать новый, у меня уже был, т.к. я «натыкал» его, пока разбирался. Если же вам нужно создать новый эмулятор, то там все просто:
1. Выбираем размер экрана и модель телефона
2. Выбираем версию андроида (у меня 4.4.2)
3. Настраиваем устройство.

На третьем шаге подробнее:

image

Т.К. игра у нас вытянута по горизонтали, выбрать нужно ландшафтный режим.

Когда все настройки введены, жмем на зеленый треугольник и запускаем эмулятор. После запуска ждем, когда устройство полностью загрузится и запустится ОС:

image

Это окно не закрывайте, в нем будет происходить эмуляция. Теперь можно вернуться в редактор, и изменить ориентацию в дизайнере форм:

image

Можно запускать! Вот теперь точно можно.

Если появится запрос на выбор эмулятора — то можно поставить галочку внизу:

image

Мои поздравления! Все работает, проверено!

image

Сворачиваем наш эмулятор (Но не закрываем!) и переходим в редактор, Там все немного сложнее (чуть-чуть).
Переключиться нужно в режим «Text». У вас в activity_main описаны все элементы, которые есть на форме. Включая саму форму. Да и не форма это вовсе.

Т.к. мы делаем игру в HTML5, а тут у нас только обертка для игры, удаляем весь текст и вставляем следующее:

<RelativeLayout xmlns:android="http://ift.tt/nIICcg"
    xmlns:tools="http://ift.tt/LrGmb4" android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context=".MainActivity">

    <WebView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/webView"
        android:clickable="true"
        android:scrollbars="none" />
</RelativeLayout>

Теперь, если опять переключиться на дизайн, то выглядеть будет иначе:
image

Как видно, теперь вместо «Hello, World» во всю красуется растянутый на весь экран — WebView. Этот объект и является нашим «окном» в игровой мир.

Можете запустить даже, посмотреть, будет белый экран. Идем дальше.

А дальше нам нужно перейти в наш проект, для этого слева открываем поле «Project» и выбираем вкладку «Android», если не выбрана:

image
В этой вкладке представлена структура проекта и все его внутренние файлы и ресурсы.

Заголовок спойлера

Нам требуется найти файл «манифест» и дописать в определение «application» следующую строку:
android:hardwareAccelerated="true"

Пришло время поработать над функционалом нашего «браузера», ведь это именно он! Открываем класс «MainActivity.java» и удаляем все лишнее, оставив только основное:

Заголовок спойлера
package com.soft.skaner.demogamehtml5;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


}


Если не забыли, мы в файле activity_main добавили WebView, обратите внимание на выделенную жирным строчку:
<WebView
android:layout_width=«fill_parent»
android:layout_height=«fill_parent»
android:id="@+id/webView"
android:clickable=«true»
android:scrollbars=«none» />

Нам нужно объявить объект класса WebView.

Для этого к списку импортов дописываем:

import android.webkit.WebView;


А затем объявляем наш объект myWeb внутри класса MainActivity:
protected WebView myWeb;


Теперь, после строчки setContentView(R.layout.activity_main); вставляем следующий код:
        /* Находим наш браузер */
        myWeb= (WebView) findViewById(R.id.webView);

        /* Настраиваем наш браузер */
        myWeb.getSettings().setUseWideViewPort(true);
        myWeb.setInitialScale(1);
        myWeb.getSettings().setJavaScriptEnabled(true);
        
        /* Загружаем страничку */
        myWeb.loadUrl("file:///android_asset/index.html");

Вот что получилось у меня в редакторе:

image

А вот, что в эмуляторе:

image

Если у вас так же — мы на верном пути!

Осталось дело за небольшим:
Там, где мы подгружаем страницу нашему браузеру, путь к файлу выглядит так: «http://file/android_asset/index.html»
Следует учесть, что любые файлы мы можем хранить внутри нашей игры, имея к ним доступ.

В нашем случае ключевая папка: «android_asset», давайте ее создадим (да, по умолчанию ее нет в проекте):
«File -> New -> Folder -> Assets folder», откроется окно где достаточно просто согласиться с IDE.
Заметили? В проекте появилась новая папка:

image

Жмем по ней правой кнопкой мыши -> «Show in Files», откроется системный проводник (в моем случае Nautilus), обратите внимание на путь к папке. Имейте так же ввиду, что папка называется «assets», но доступ к ней идет через «android_asset».

image

Дальше все совсем просто — копируем нашу игру в папку assets:

image

Файл index.html — это тот самый index из начала этой статьи. Ну что, пробуем запустить!

image

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

Шаг 3. Android Studio. Сборка приложения и его подписывание


Когда игра вами полностью отлажена (в браузере или на эмуляторе), обертка полностью готова и все этапы разработки позади, можно собирать приложение. Android Studio позволяет собирать приложения и подписывать их вашими ключами.

Для создания ключей в этой IDE есть специальная утилита «KeyTool».

Переходим к созданию исполняемого файла приложения («Build -> Generate Signed APK»):

image

Если ранее ключей и алиасов вы не создавали, нажимайте «Create New». Заполнить поля можете на свое усмотрение, достоверность данных целиком лежит на вас.

image

Первое поле — это путь к папке, в которую будет сохранен ключ. Форма после нажатия Ok заполнится автоматически:

image

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

На следующем шаге IDE попросит у вас еще раз ввести пароль, а затем указать папку для сохранения APK файла.

image

Теперь можете расслабиться и попить, к примеру, кофе.Система начала компиляцию, результат в статусбаре:

image

После того, как компиляция завершится, система вам об этом сообщит.

image
image

Теперь достаточно переместить файл на телефон / планшет и установить, как обычное приложение.

Результат:

image
image

Вы можете его так же скачать и проверить на своем устройстве: J2ds Demo HTML5

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.

Полиция заставила китайского разработчика удалить код с GitHub

Разработчик из Китая под ником @clowwindy — автор таких проектов, как Shadowsocks и ShadowVPN, позволяющих обходить блокировку сайтов в интернете; и, в частности, Великого китайского фаерволла. Сегодня он написал в комментарии на Github:

Позавчера ко мне пришла полиция и попросила прекратить работу над этим. Сегодня они потребовали удалить весь код с GitHub. Мне ничего не остается, кроме как подчиниться.
Надеюсь, что когда-нибудь я буду жить в стране, где у меня будет свобода без опасений писать любой код, который мне нравится.

Уверен, парни, вы сделаете что-нибудь классное с этими Network Extensions.

Пока!


В последнее время он работал над мобильным приложением Shadowsocks для iOS и хотел задействовать новые низкоуровневые API (Network extension points), появившиеся в iOS 9.

В Китае, где интернет-цензура поставлена на государственный уровень, обычные решения для туннелирования сетевого трафика, вроде OpenVPN или ssh -D, уже давно не работают. Великий китайский фаерволл научился распознавать даже зашифрованный VPN трафик по различным косвенным признакам. Поэтому китайские хакеры стали разрабатывать решения, которые на просто шифруют, но и всеми способами маскируют его под другой вид трафика (HTTPS, например), который не подвергается блокировке.

В 2013 году весь Github был заблокирован в Китае на несколько дней.

К счастью, благодаря ранее сделанным форкам (и духу open-source сообщества), на Гитхабе сохранились клоны удаленных проектов, и уже стали появляться новые.

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.

пятница, 21 августа 2015 г.

Исследование: Уязвимости криптотранспондера позволяют заводить без ключа более 100 моделей машин

Европейские исследователи еще в 2012 году обнаружили серьезные уязвимости в криптотранспондере Megamos, который устанавлен в более 100 моделях автомобилей разных прозводителей (Audi, Ferrari, Cadillac, Volkswagen и т.п.). Найденные ими ошибки безопасности позволяли злоумышленникам заводить машины с функцией автозапуска без ключа.

Криптотранспондер Megamos в автоключе

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

Схема процедуры аутентификации

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

Список уязвимых автомобилей

При этом, как сообщает издание Net Security, исследователям удалось опубликовать свое исследование только сейчас из-за противодействия автопроизводителей. Так, в 2013 году их выступление на USENIX Security Symposium было заблокировано компанией Volkswagen, которая обратилась в Верховный суд Великобритании и добилась запрета на публикацию ключевых секций исследования. Теперь же оргкомитет USENIX получил разрешение на публикацию версии исследования, в котором опущена информация, которая могла бы позволить осуществлять атаки злоумышленникам без глубоких технических навыков.

В последнее время тема информационной безопасности автомобилей возникает довольно часто. Так в июле 2015 года автопроизводитель Land Rover объявил об отзыве более 65 000 машин, программное обеспечение которых содержало ошибку, приводящую к самопроизвольному отпиранию дверей.

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

Jeep Cherookee 2014 года выпуска был оснащен системой FCA Uconnect, соединяющейся с мобильной сетью Sprint. Исследователи использовали баг в Uconnect, который позволяет взламывать автомобили на любом расстоянии (первоначально планировалось, что захватывать управление можно будет в рамках 100 метров работы direct-WiFi).

Благодаря уязвимости в Uconnect им удалось получить GPS-координаты, идентификационный номер, модель, дату выпуск и IP-адрес автомобилей, проезжавших неподалеку.

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

В итоге компания Chrysler выпустила патч и решила отозвать более 1,4 млн автомобилей. Помимо этого, в прессу попадала информация о нескольких уязвимостях в электромобиле Tesla Model S (которые позже были устранены).

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

Угон автомобилей — не единственное, что может интересовать злоумышленников. Еще одно популярное направление деятельности заключается в разблокировке некоторых функций автомобиля, доступных только в более дорогих комплектациях. В 2013 году на форуме по информационной безопасности PHDays Кирилл Ермаков и Дмитрий Скляров рассказывали о взломе микроконтроллера управления автомобилем ECU (Electronic Control Unit) для разблокировки функций, позволяющих добиться максимальной эффективности систем машины. Слайды этой презентации можно посмотреть по ссылке.

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.

[Из песочницы] Обход авторизации через социальные сети при подключении к публичным Wi-Fi

Все началось с того что я наткнулся на статью. Вкратце, в ролике показано, как два пользователя подключаются к сети заведения и заходят в браузер, в котором открывается страница с предложение авторизоваться через «ВКонтакте»: необходимо ввести логин/пароль, вот только домен не vk.com, типичный фишинговый сайт. В итоге, при такой авторизации передаются третьей стороне учетные данные, и устанавливается приложение с неограниченными правами, которое имеет круглосуточный доступ к вашей странице.

Если погугулить можно найти большое количество компаний, готовых сделать подключение к вашему Wi-Fi через регистрацию в SMM.


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

Мне стало интересно, как реализована авторизация через SMM, так как способов масса. На сайтах тех, кто предоставляет такие услуги 1, 2, 3, предлагают собирать информацию о клиентах сразу после регистрации. Я зарегистрировался на одном из таких, как владелец кафе в Москве. Мне дали триальный период и инструкцию по настройке своего Wi-Fi роутера. Все оказалось очень просто.

Используют банальную подмену IP-адресов на уровне DNS, когда вы пытаетесь зайти на какую-нибудь страничку, вам подсовывают фишинговую страницу с авторизацией через соцсеть. Выход кажется очевидным: поставить у себя на устройстве DNS которому вы доверяете. Но решено было проверить, и прикинувшись дурачком я написал в тех подержу.

Замена DNS на доверенный решает проблемы, но сапорт предлагает заворачивать весь трафик по 53 порту, тогда NS запрос всё равно будет идти на bad DNS. Сомневаюсь, что где то в кафе так делают, ведь для этого обычный роутер не подходит, а нужен что-то наподобие MikroTik.

На заметку


  • Вы пришли в кафе, бар и т.д., подключились к Wi-Fi. Заходите в браузер, а вас перекидывает на страницу авторизации через соцсети.
  • Выйдите из браузера и проверьте: работают ли приложения Skype, Vk, viber и т.д.? Если да, то все что нужно чтоб обойти авторизацию — это заменить DNS на доверенные google public-dns 8.8.8.8 и 8.8.4.4.
  • Как это сделать: Android, iPhone, Windows
  • Если вы уже попались на удочку, в одном из кафе. Зайдите в Приложения на своей страничке, удалите все подозрительные, измените пароль.

  • Всем бобра.

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.

[Из песочницы] Организация локальной сети с одновременным подключением к двум интернет-провайдерам при помощи маршрутизатора MikroTik

Предположим, что у нас есть два интернет провайдера. Первый получает настройки по L2TP, для второго необходимо задать настройки статически, а нам требуется организовать безотказную работу интернет соединения. То есть, в случае отказа первого интернет провайдера маршрутизатор должен автоматически переключиться на второго (резервного) провайдера. А при восстановлении связи с первым провайдером маршрутизатор должен снова начать с ним работать.


Для решения задачи будем использовать маршрутизатор, настроенный на базе RouterOS. В данном примере MikroTik rb951ui (5-портовый). В порт №1 соответственно будет подключен провайдер «1» (ISP1) по L2TP. Во второй порт провайдер «2» (ISP2) со StaticIP. Порты №3, №4, №5 будут служить для подключения клиентов сети. IP-адреса в локальной сети будут раздаваться по DHCP. О работоспособности первого или второго канала будем судить по доступности IP-адреса. К примеру, возьмем DNS google.com, вероятность отказа которого очень мала.

Последовательность действий. Подключаем маршрутизатор к порту №3 и соответственно LAN интерфейсу ПК. Для конфигурации RouterOS будет использоваться утилита winbox. Заходим по MAC-адресу и авторизуемся. Видим интерфейс конфигурации маршрутизатора. (Рис. 1)

Рис. 1. Интерфейс конфигурации RouterOS

Первое, что мы делаем – настраиваем интерфейсы провайдера «1» и провайдера «2» Рис.2, а так же настраиваем LAN для портов 3, 4 и 5.

Рис. 2. Настройка провайдера «1» и провайдера «2»

В данном случае Интерфейс-1 принадлежит провайдеру «1» (ISP1 – имя для удобства) Интерфейс-2 принадлежит провайдеру «2» (ISP2). Для организации LAN переходим в пункт меню «Bridge» и добавляем интерфейс c именем LAN. (Рис.3).

Рис. 3. Организация LAN

Указывает порты, которые будут относиться к внутренней сети (Рис. 4)

Рис. 4. Добавление портов в LAN

Теперь необходимо добавить IP-адреса провайдеров, а так же указать IP-адрес шлюза нашей локальной сети (Рис. 5).

Описание: Первое, что мы делаем, добавляем шлюз локальной сети (цифры 4, 5). Интерфейс указываем LAN. Второе – добавляем статический адрес второго провайдера (цифры 6, 7)

Рис. 5. Добавление адресов для интерфейсов

Так как организация подключения с первым провайдером осуществляется по L2TP необходимо добавить L2TP-клиента (Рис. 6)

Замечание: Добавляем L2TP-client (Цифра 2). Указываем соответствующие параметры во вкладке Dial-out, а именно адрес сервера, логин и пароль которые выданы первым провайдером (цифры 4, 5 и 6).

Рис. 6. Добавление L2TP-клиента

После добавления клиента во вкладке status получим соединение. (Рис. 7)

Рис. 7. Статус L2TP-соединения

Теперь займемся организацией DHCP-сервера для раздачи адресов нашим клиентам внутренней сети. Первое что сделаем, создадим pool выдаваемых адресов (Рис. 8), а затем настроим сам DHCP-сервер. (Рис 9).

Рис. 8. Создание pool’а выдаваемых адресов

Рис. 9. Добавление и настройка DHCP-сервера

Описание DHCP-сервера: Добавляем сервер с именем (server1) к интерфейсу внутренней сети LAN c пулом адресов который создавали ранее. В network указываем, какие параметры передавать серверу клиентам.

Теперь нам необходимо добавить статические маршруты, так как всё взаимодействие между сетями осуществляется в соответствии с таблицей маршрутизации. Ее управление в RouterOS осуществляется в меню «Routes». Адресация с локальной сетью и с внутренними сетями провайдеров была добавлена динамически. Осталось добавить маршруты в интернет (на адрес 0.0.0.0/0) через шлюзы провайдеров. (Рис. 10).

Рис. 10. Добавление статических маршрутов

Далее, необходимо организовать переключение каналов в случае недоступности 1 канала. В ОС роутера есть встроенная утилита «Netwatch», которая позволяет отслеживать состояние хостов в сети посредством отправки ICMP-запросов (ping) и выполнять какие-либо действия на основе их доступности. Мы будем отслеживать IP-адрес 8.8.4.4 через первый канал, и в случае его недоступности переключать маршруты на работу по второму.

Создаем новый «Netwatch host», в графе «Host» указываем отслеживаемый IP-адрес, а в «Interval» — частоту осуществляемых проверок. (Рис. 11).

Рис. 11. Настройка переключения каналов

И в заключение, в закладке Up (цифра 5) необходимо прописать следующее правило:

#включаем маршрут с комментарием «ISP1» (основной канал)
/ip route set [find comment=«ISP1»] disabled=no
#отключаем маршрут с комментарием «ISP2»(резервный канал)
/ip route set [find comment=«ISP2»] disabled=yes
Во вкладке Down прописываем следующее правило:
#отключаем маршрут с комментарием «ISP1» (резервный канал)
/ip route set [find comment=«ISP1»] disabled=yes
#включаем маршрут с комментарием «ISP2» (основной канал)
/ip route set [find comment=«ISP2»] disabled=no

Материал является вводным и предназначен для знакомства с вопросом управления сетью с двумя провайдерами.

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.