Saturday, May 27, 2017

In fastboot we trust. Part 3

Сборка прошивки для LG G3s(jag3gds):
  • Скачиваем исходники основной прошивки:
    $ repo init -u https://github.com/LineageOS/android.git -b cm-14.1
  • Обновляем исходники:
    $ repo sync -j 4
  • Обновляем переменные окружения:
    $ . build/envsetup.sh
  • Подготавливаем специфичные для устройства каталоги:
    $ breakfast jag3gds
  • Дописываем project name="TheMuppets/proprietary_vendor_lge" path="vendor/lge" remote="github" в .repo/local_manifests/roomservice.xml для добавления блобов
  • Запускаем сборку:
    $ brunch jag3gds

Monday, May 8, 2017

In fastboot we trust. Part 2

Некоторые устройства содержат нестандартные протоколы загрузки или неполные реализации стандартных протоколов. В случае LG G3s(jag3gds) мы имеем 4 способа загрузки:
  • стандартный загрузочный сектор(boot), загружается при обычном нажатии кнопки Power;
  • загрузчик для стандартной системы обновления прошивки(laf), поддерживает только стандартный протокол LG для установки прошивок, для входа нужно выключить телефон подождать с десяток секунд, нажать Volume UP и подключить usb или adb reboot bootloader;
  • если стереть laf то aboot не найдя laf входит в режим fastboot, реализовано только часть протокола - можно только отформатировать разделы или перегрузить телефон(поддержки команды boot нет);
  • раздел с recovery - загрузиться можно только с основного раздела через adb reboot recovery.
Решением могло бы быть реализация fastboot или использование uboot. Но можно использовать наработки efidroid минимальный lk образ содержит поддержку fastboot. Для сборки можно использовать такую последовательность команд:
  • $ source build/envsetup.sh
  • $ lunch
  • # select Device name == lge/jag3gds and build type == debug
  • $ make -j6 lk
  • $ adb push out/device/lge/jag3gds/lk.img /sdcard/Download/lk.img
  • $ adb root
  • $ adb shell
  • # dd if=/sdcard/Download/lk.img of=/dev/block/platform/msm_sdcc.1/by-name/laf
  • # exit
  • $ adb reboot bootloader # boot to laf
Если хочется использовать полный образ нужно заменить lk на uefi.

В текущей реализации в uefi образе содержится ошибка и нужно применить такое исправление в uefiapi/target/msm8226.c заменить:
pdata = cb(pdata, MSM_IOMAP_BASE, (MSM_IOMAP_END - MSM_IOMAP_BASE), LKAPI_MMAP_RANGEFLAG_RESERVED, 
на:
pdata = cb(pdata, MSM_IOMAP_BASE, 1*MB, LKAPI_MMAP_RANGEFLAG_RESERVED,.

Saturday, May 6, 2017

Сборка NSX wagon

Для offline установки на инфраструктуру без доступа к внешнему миру, нужно создать пакет содержащий все зависимости, cloudify использует wagon как формат пакетов установки. Для создания подобного пакета на основе CentOS можно использовать такую последовательность команд:
  • sudo yum install epel-release
  • sudo yum install python-pip python-setuptools python-pip python-wheel python-setuptools python-virtualenv
  • mkdir wagon
  • virtualenv wagon
  • cd wagon
  • . bin/activate
  • pip install --upgrade pip
  • pip install wagon
  • wagon create -t tar.gz https://github.com/cloudify-cosmo/cloudify-nsx-plugin/archive/1.0-build.zip
Последовательность команд может отличаться для других дистрибутивов и каждый пакет содержит версию дистрибутива для которого он создан.

Tuesday, May 2, 2017

In fastboot we trust. Part 1

Или обновление ядра android на официальное ядро с kernel.org

Все современные ядра для android, хоть и до сих пор базируются на 3.4, но все же перешли на device tree, поэтому напрямую использовать их на старых устройствах(до 2011 года) скорее всего не получиться, так как они рассчитаны на загрузку используя atags, поддержку которого благополучно сломали в процессе обновления, есть ещё и вторая потенциальная проблема, на мобильных телефонах размер подобных atags может быть очень большой, для примера там может быть прошивка для Wi-Fi и калибровка для камеры и получается размер под 64 килобайта. Если немного пройтись по тому как оно работает получается такое поведение: в идеале на новых загрузчиках ядру передается как один из параметров ссылка на devicetree, который представляет собой упакованное дерево с описанием устройств и их настроек доступных на аппаратном уровне, каждый узел подобного дерева содержит список совместимости, где перечислен список типов устройство потенциально совместимых с доступными на аппаратном уровне, для примера может быть указано что мы имеем какой-то телефон или платформу и указано что также у нас система базирующаяся на каком-то чипе, если ядро не в курсе нашей платформы оно может попытаться задействовать код поддержки от чипа, этого должно быть достаточно для поддержки 99 процентов устройств, так как все устройства внутри soc обычно совпадают для того же процессора, а отличие только в описании и настройке линий ввода/вывода. Данная технология изначально была придумана для power и используется широко на данный момент в официальном ядре для реализации поддержку различных платформ одним ядром одновременно, как следствие можно загрузиться на одном ядре Qualcomm msm и Samsung Exynos устройство сообщив ему путь к device tree.

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

Новый загрузчик под android понимает образы которые содержат 3 секции: само ядро, device tree, initrd. Старые загрузчики игнорируют DT секцию и для того чтобы можно было загрузиться ядру с поддержкой DT, придуманы такие обходные маневры: в конец образа ядра записывается DT и в ядре выбирается опция, что нужно искать DT после образа ядра и опция конвертации atags в DT во время загрузки, в результате ядро загрузить DT и прочитав atags перепишет используя эти значения DT.

Инвентаризация blockchain

Базируется на открытых источниках и субъективном
мнении - может не совпадать с реальностью.

Существует идея о том что используя blockchain возможно получить базу данных не подверженную проблеме административного или инсайдерского изменения постфактум. Как пример мы можем построить такую систему инвентаризации в распределенной команде:
  • существует несколько клиентов (отделов/офисов) и каждый из таких клиентов может с нужной ему периодичностью создавать записи в своей локальной базе;
  • к каждой записи добавляется hash/электронная подпись/или какая-то работа которая позволяет убедиться что не возможно генерировать такие записи чаще чем с какой-то периодичностью и каждая следующая запись зависит от предыдущей что не позволит вставить новую запись в середину списка записей;
  • с определенной периодичностью эти записи синхронизируются в рамках организации, и ветки записей с каждого клиента и подписывается общей подписью/hash. Далее эта подпись распространяется среди филиалов, а также распространяется в открытых источниках, как комментарии в bitcoin или публикуются на публичных сайтах. Так как публикуется только слепок подписи/hash открытия конфиденциальных данных не происходит.

Возможные недостатки данной технологии:
  • предполагается что работа/hash прикрепленный к записи не позволит быстро пересчитать все записи в периодах между синхронизациями чтобы в последний момент заменить поток операций, но в реальной реализации поток операций нестабилен и может на порядок отличаться в разных периодах, а значит не обязательно иметь на порядок более быстрое оборудование чтобы заменить в момент получения десятой операции первую операцию в списке и пересчитать без внешних эффектов для стороннего наблюдателя. Возможен пересчет в те периоды когда таких операций меньше, например когда мы имеем среднее количество операций в периоде;
  • с большой вероятностью у филиалов будут маломощное оборудование - программное обеспечение будет установлено на тонких клиентов или мобильные устройства, что опять таки на порядок уменьшит затраты у потенциального злоумышленника ему нужно просто иметь оборудование которое способно работать на N-процентов быстрее основного чтобы на эти же N-процентов добавить больше операций или заменить;
  • далее идут уже более возможности связанные с подменной инфраструктуры, если злоумышленник может вклиниться в каналы связи и имеет оборудование способное дублировать основную инфраструктуру, он может дублировать все операции и перед оправкой в публичные источники передавать данные основанные на его перерасчете и после передачи в публичные каналы заменять состояния на внутренней инфраструктуре на его пересчитанные данные, и чем мощнее у него инфраструктура тем больше возможностей в такой подмене, позднее он может начинать свои транзакции перед временем синхронизации во внешние каналы связи, и задача заменяется на немного другую замедлить основную инфраструктуру и создавать транзакции максимально похожие на оригинальные.

Saturday, December 31, 2016

Step Tracker

Маленькая инструкция как получить текущий дамп с ibody step tracker. 

Программа проверялась только с usb версией, проверенно только на одном устройстве, возможно существуют другие версии с другим протоколом общения по usb. По сайту производителя на момент написания программы существовало две версии, одна самая простая с поддержкой только usb, и вторая более продвинутая с bluetooth.

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

Получить исходный код с репозитория через: 
  • git - лучший способ, если планируете что-то менять и использовать долго и делать какие-то улучшения.. git clone https://github.com/0lvin/StepTracker.git && cd StepTracker
  • Или более простой через архивчик: wget https://github.com/0lvin/StepTracker/archive/master.zip && unzip master.zip && cd StepTracker-master/ 
Собрать исходный код, нужен любой дистрибутив линукс, можно даже в виртуальной машине, единственное требования в машине должен быть проброшено usb устройство. Нужно выполнить команду make и убедиться что появился файлик ibody. 

Узнать где же наше устройство, подключаем и сморим sudo dmesg | tail. Должно быть что-то подобное:
[ 185.937678] usb 5-1: new full-speed USB device number 3 using ohci-pci [ 186.132776] usb 5-1: New USB device found, idVendor=10c4, idProduct=ea60 [ 186.132784] usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 186.132787] usb 5-1: Product: CP2104 USB to UART Bridge Controller [ 186.132790] usb 5-1: Manufacturer: Silicon Labs [ 186.132792] usb 5-1: SerialNumber: xxxxxxxxxxxx [ 186.137018] cp210x 5-1:1.0: cp210x converter detected [ 186.145153] usb 5-1: cp210x converter now attached to ttyUSB0

Из чего можно предположить что трекер сейчас висит на ttyUSB0 Поэтому попробуем запросить немного информации о нем:
sudo ./ibody -d /dev/ttyUSB0 -i -- Will be used as tracker device: /dev/ttyUSB0 ++ tracker id: -> 5a 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 9c <- 5a 42 00 22 aa 54 45 ff de ad be ef ff 00 00 00 f0 -- id will be: ff de ad be ef ff -- Other values unknown for now.
Где вместо ff de ad be ef ff - будет серийник вашего устройства.
Теперь обновим время на устройстве: sudo ./ibody -d /dev/ttyUSB0 -t
И все же получим дамп нашей активности: sudo ./ibody -d /dev/ttyUSB0 -g
и в строчках вида:
-- 16.12.31 08:30:00 :>   24 steps, 0.016 km, 0.6 kkal
будет ваша активность.

Thursday, November 10, 2016

Прогресс Mesa3d

Последнее время mesa3d достигли гигантского прогресса для большинства новых видеокарт добавили поддержку opengl 4.5. Часть даже получила поддержку Vulkan, и все же не вся эта радость уже есть в дистрибутивах. Для ого чтобы поиграться и самому собрать mesa3d можно воспользоваться такой последовательностью действий для debian:
  • Получить последнюю версию исходных кодов:
    git clone git://anongit.freedesktop.org/mesa/mesa
  • Собрать с понравившимися опциями:
    sudo apt-get install ccache
    sudo apt-get build-dep mesa vulkan
    cd mesa
    autoreconf -vfi
    CC='ccache gcc' ./configure --enable-texture-float --with-llvm-prefix=/usr/lib/llvm-3.9 --enable-gallium-osmesa --enable-opencl-icd --enable-opencl --with-vulkan-drivers=radeon,intel --with-sha1=libgcrypt
    make -j 6
    cd ..
  • Скопировать новые библиотеки:
    mkdir lib
    cp -rv mesa/lib/* lib/
    cp -rv mesa/lib/gallium/* lib/
  • Посмотрим, что скажет glxinfo: LIBGL_DRIVERS_PATH=`pwd`/lib glxinfo
  • А теперь посмотрим как возросло количество fps в не тесте:
    LIBGL_DRIVERS_PATH=`pwd`/lib GALLIUM_HUD=fps glxgears, glxgears - можно заменить на вашу любимую игру