Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
19.04.2024
Размер:
25.3 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

30 m

w Click

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

.c

 

 

p

 

 

 

 

g

 

 

 

 

df

 

 

n

e

 

 

 

 

-xcha

 

 

 

X-Mobile

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

ХАКЕР 01 /192/ 2015

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

В случае самсунговских устройств (у меня как раз та-

После сборки и уста-

кое) исходники ядер лежат на opensource.samsung.com.

новки ядра должна

Для сборки ядра нам понадобится его конфиг. В некото-

получиться примерно

рых устройствах он находится в файле /proc/config.gz, но,

такая картинка

к сожалению, не во всех, поэтому разберем другой метод

 

его получения. После скачивания и распаковки переходим

 

в соответствующий каталог, смотрим файлы, находящиеся

 

в arch/arm/configs/, и выбираем подходящий по архитек-

 

туре. В моем случае там был только один файл — n1a_00_

 

defconfig, но это скорее исключение. Переходим обратно

 

в каталог, куда мы первоначально распаковали ядро, и на-

 

бираем следующую команду:

 

$ make n1a_00_defconfig

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

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

$ make -j9 CFLAGS_MODULE=-fno-pic

После сборки нам нужно все получившиеся файлы скопировать в единый каталог:

$ mkdir final

$ cp arch/arm/boot/zImage final

$ find . -name '*ko' -exec cp '{}' final \;

Затем, в случае полной компиляции, нужно собрать файлы в ZIP-архив. Не абы какой, а сформированный определенным образом (речь идет о файле обновления для кастомной консоли восстановления. — Прим. ред.). Для этого клонируем с гитхаба шаблон для данного файла:

$ cd final

$ git clone https://github.com/koush/AnyKernel.git

$ cp ./*.ko ./AnyKernel/system/lib/modules/

$ cp ./zImage ./AnyKernel/kernel/

Поскольку те утилиты, что имеются в этом автоматическом апдейтере, немного устарели (во всяком случае, на моем планшете они завершались с сегфолтом), нужно их заменить рабочими, которые берем на d-h.st/RgI, и, распаковав, заменяем ими файлы с теми же названиями в каталоге AnyKernel/ kernel/. Кроме того, нужно изменить скрипт для автоапдейте-

ра, находящийся в AnyKernel/META-INF/com/google/android/ updater-script. В конечном итоге должно получиться примерно следующее:

ui_print("Extracting System Files...");

set_progress(1.000000);

mount("ext4","MTD", "system", "/system");

package_extract_dir("system", "/system");

unmount("/system");

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

ХАКЕР m

01 /192/ 2015

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Родственные связи

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click31

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ui_print("Extracting Kernel files...");

package_extract_dir("kernel", "/tmp");

ui_print("Installing kernel...");

set_perm(0, 0, 0777, "/tmp/dump_image");

set_perm(0, 0, 0777, "/tmp/mkbootimg.sh");

set_perm(0, 0, 0777, "/tmp/mkbootimg");

set_perm(0, 0, 0777, "/tmp/unpackbootimg");

run_program("/sbin/busybox", "dd", "if=/dev/block/

mmcblk0p9", "of=/tmp/boot.img");

run_program("/tmp/unpackbootimg", "-i", "/tmp/

boot.img", "-o", "/tmp/");

run_program("/tmp/mkbootimg.sh");

run_program("/sbin/busybox", "dd", "if=/tmp/

newboot.img", "of=/dev/block/mmcblk0p9");

ui_print("Done!");

Путь /dev/block/mmcblk0p9 здесь — та часть, которую необходимо изменить. Это раздел boot, и почти на всех устройствах он будет представлен разными файлами. Чтобы узнать имя файла на своем устройстве, выполни следующую команду:

$ for i in /dev/block/platform/*/by-name/boot; \

do ls -l $i; done

После правки запаковываем каталог:

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

$ export CROSS_COMPILE=$CROSS_COMPILE_LINARO

$ export CC=arm-unknown-linux-gnueabi-gcc

$ export CPP=arm-unknown-linux-gnueabi-cpp

$ export CXX=arm-unknown-linux-gnueabi-g++

$ export LD=arm-unknown-linux-gnueabi-ld

$ export AS=arm-unknown-linux-gnueabi-as

$ export AR=arm-unknown-linux-gnueabi-ar

$ export RANLIB=arm-unknown-linux-gnueabi-ranlib

$ export CPPFLAGS="--sysroot=$LINARO_SYSROOT"

$export CFLAGS="--static --sysroot =$LINARO_SYSROOT"

$ export CXXFLAGS="--sysroot=$LINARO_SYSROOT"

$export LDFLAGS="--sysroot=$LINARO_SYSROOT"

Илишь затем можно приступать.

Bash

Bash собирать с помощью тулчейна Linaro очень легко — скачиваем исходники c официального FTP и распаковываем:

$ wget http://ftp.gnu.org/gnu/bash/bash-4.3.30.tar.gz

$ cd AnyKernel && zip -r AnyKernel.zip *

 

 

$

tar xzvf bash-4.2.53.tar.gz && cd bash-4.3.30

Затем кидаем файл на устройство и устанавливаем его

 

 

Выполняем скрипт configure и собираем:

с помощью кастомного рекавери (TWRP или CWM).

 

$

./configure --host=arm-linux --enable-static

 

 

 

СБОРКАПРИЛОЖЕНИЙ

 

 

-link --without-bash-malloc --disable-rpath

Модули ядра позволяют добавлять функциональность исклю-

Bash, запущенный под

 

--disable-nls

чительно низкого уровня, которую в общем случае нельзя ис-

Android

$

make

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

32 m

w Click

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

.c

 

 

p

 

 

 

 

g

 

 

 

 

df

 

 

n

e

 

 

 

 

-xcha

 

 

 

X-Mobile

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

ХАКЕР 01 /192/ 2015

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

После сборки появится файл bash, который мы опе-

Htop, запущенный под

$ tar xzvf ncurses-5.9.tar.gz

ративно копируем на устройство в системный каталог

Android

$ cd ncurses-5.9

/system/xbin.

 

 

Стоит дать комментарии, почему bash нужно компилиро-

 

Устанавливаем переменную $SYSROOT_ADDITIONS, запу-

вать с помощью тулчейна Linaro. В Bionic, стандартной ре-

 

скаем configure с нужными параметрами и собираем:

ализации библиотеки libc в Android, отсутствуют некоторые

 

$ export SYSROOT_ADDITIONS=${HOME}/htop/rootdir

POSIX-совместимые функции, используемые bash (такие, на-

 

пример, как mkfifo() или wctomb()). Соответственно, собрать

 

$ ./configure --with-normal --without-shared

bash с использованием этой библиотеки без танцев с бубном

 

--without-cxx-binding --enable-root-environ

не выйдет. В Linaro же, с другой стороны, используется стан-

 

--disable-widec --disable-GPM --without-ada

дартная POSIX-совместимая библиотека glibc. Поскольку мы

 

--without-tests --host=arm-linux --prefix=

собираем bash статически, нам все равно, что используется

 

$SYSROOT_ADDITIONS

в Android, — главное, чтобы версия glibc, с которой мы соби-

 

$ make && make install

раем, подошла к ядру. Впрочем, сегодня обратное маловеро-

 

 

ятно.

 

Поскольку нам нет смысла включать поддержку юникода

Lshw

 

и мыши и мы не собираемся делать эту библиотеку динами-

 

ческой, отключаем эти опции (а также отключаем поддержку

Lshw — удобная консольная утилита, позволяющая быстро

 

языка Ada).

собрать информацию о всем доступном железе. Компили-

 

Скачиваем и распаковываем сам htop, предварительно

ровать ее (опять же используя Linaro) достаточно просто.

 

перейдя на уровень выше:

Скачиваем последнюю версию, распаковываем и заменяем

 

$ cd ..

в файлах src/Makefile и src/core/Makefile компилятор C++

 

на компилятор от Linaro (переменной CXX нужно присвоить

 

$ wget http://hisham.hm/htop/releases/1.0.3/

значение arm-unknown-linux-gnueabi-g++), добавив также

 

htop-1.0.3.tar.gz

опцию --static в CXXFLAGS. Затем собираем обычным обра-

 

$ tar xzvf htop-1.0.3.tar.gz

зом.

 

$ cd htop-1.0.3

Htop

 

Вновь переопределяем переменные окружения для сборки:

Это достаточно удобный консольный менеджер процессов

 

$ export CPPFLAGS="--sysroot=$LINARO_SYSROOT"

для Linux. Для вывода информации он использует библиотеку

 

ncurses, так что для его компиляции потребуется чуть больше

 

$ export CFLAGS="--static -I${SYSROOT_ADDITIONS}/

времени. Создаем каталог htop, переходим в него и скачиваем

 

include --sysroot=$LINARO_SYSROOT"

ncurses:

 

$ export CXXFLAGS="--sysroot=$LINARO_SYSROOT"

 

 

 

$ export LDFLAGS="-L${SYSROOT_ADDITIONS}/

$ mkdir htop && cd $_

 

 

ncurses-5.9/lib --sysroot=$LINARO_SYSROOT"

$ wget http://ftp.gnu.org/pub/gnu/ncurses/

 

 

$ export LIBS="${SYSROOT_ADDITIONS}/lib/

ncurses-5.9.tar.gz

 

 

libncurses.a"

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

ХАКЕР m

01 /192/ 2015

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Родственные связи

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w33Click

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

Конфигурируем и собираем:

Перехватываем паке-

$

./configure --host=arm --enable-static

 

ты, содержащие слово

google, используя

 

--disable-unicode

 

ngrep

$

make

 

 

 

 

Сеанс SSH-соединения

 

Все бы хорошо, но после попытки запуска на устройстве

с Android. Для раз-

вываливается ошибка «Error opening terminal: screen». Ле-

деления терминала

чится это просто — достаем откуда-нибудь каталог terminfo

используется tmux.

(я его выдернул из Terminal IDE, просто потому, что он ока-

В левой части можно

зался под рукой), копируем в /system/etc и выполняем в тер-

увидеть вывод lshw

минале на гаджете следующую команду:

 

#export TERMINFO=/system/etc/terminfo

После этого htop запустится без заморочек.

Tmux

Tmux — это менеджер терминалов и более продвинутая альтернатива известного всем админам screen, созданная руками разработчиков OpenBSD. В случае с операционной системой Android его удобно использовать для работы с устройством через adb shell или SSH (например, ходить на TV Box или HDMI-стик под управлением Android. — Прим. ред.).

Для компиляции tmux нам понадобится все та же ncurses — ее можно взять из предыдущей сборки, скопировав каталог rootdir. Помимо ncurses, потребуется библиотека libevent. Создаем каталог tmux, устанавливаем перемен-

ную $SYSROOT_ADDITIONS и скачиваем libevent и сам tmux:

$ export SYSROOT_ADDITIONS=${HOME}/tmux/rootdir

$git clone https://github.com/libevent/ libevent.git

$ git clone git://git.code.sf.net/p/tmux/tmux-code

В случае с libpcap мы отключили поддержку D-Bus по понятной причине отсутствия его в Android

Собираем libevent:

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

34 m

w Click

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

.c

 

 

p

 

 

 

 

g

 

 

 

 

df

 

 

n

e

 

 

 

 

-xcha

 

 

 

X-Mobile

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

ХАКЕР 01 /192/ 2015

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

$ cd ../libevent

 

 

 

 

 

 

 

--sysroot=$LINARO_SYSROOT"

 

 

$ ./autogen.sh

 

 

 

 

 

 

$ ./configure --enable-static --disable-dropprivs

$ ./configure --host=arm-linux --disable-

 

 

--host=arm-linux --with-pcap-includes=

 

shared --disable-openssl --disable-samples

 

${SYSROOT_ADDITIONS}/include/pcap

 

-prefix=$SYSROOT_ADDITIONS

 

 

 

 

 

 

$ make

 

 

 

$ make && make install

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Разберем опции обоих configure. В случае с libpcap мы

Подготавливаемся к сборке tmux:

 

 

 

 

 

 

отключили поддержку D-Bus по понятной причине отсут-

$ export CFLAGS="--static-I

 

 

 

 

 

 

ствия его в Android и указали тип захвата пакетов (поскольку

 

 

 

 

 

 

компилируем мы в конечном итоге под Linux, то и тип захва-

${SYSROOT_ADDITIONS}/include -I/${SYSROOT_

та ставим соответствующий). Для ngrep же мы указали путь

ADDITIONS}/include/ncurses --sysroot=

 

 

 

 

 

 

к заголовочным файлам libpcap и отключили понижение при-

$LINARO_SYSROOT"

 

 

 

 

 

 

вилегий по причине отсутствия файла /etc/passwd в Android,

$ export LDFLAGS=" -L${SYSROOT_ADDITIONS}/

куда эта функциональность смотрит.

 

 

lib -L${SYSROOT_ADDITIONS}/include -L

 

 

 

 

 

 

 

 

 

 

 

${SYSROOT_ADDITIONS}/include/ncurses

 

 

 

 

 

 

 

 

 

 

 

--sysroot=$LINARO_SYSROOT"

 

 

 

 

 

 

 

 

программ может занять немало

$ export LIBEVENT_CFLAGS="-

 

,

 

 

да и не всякое приложение можно

I${SYSROOT_ADDITIONS}

 

 

 

легкостью собрать (например, тексто-

/include --sysroot=$LINARO_SYS

 

 

 

 

 

 

 

 

torrent-клиент rtorrent потребует

ROOT"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ANDROID

 

 

сборку libtorrent, а эта библиотека,

L${SYSROOT_ADDITIONS}

 

 

 

 

 

 

Boost). И если для пары-тройки

$ export LIBEVENT_LIBS="

 

 

 

 

 

 

 

 

свою очередь, потянет за собой

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/lib -levent

 

 

 

 

 

 

 

 

 

приложений это не столь критич-

--sysroot=$LINARO_SYSROOT"

Несмотря на то что Android не является в полной мере

но, то в случае сборки большего

 

 

 

 

 

 

 

 

 

 

 

POSIX-совместимой ОС, под него все же были портиро-

количества

трудозатраты ста-

И наконец, собираем сам

ваны некоторые из библиотек, доступных под десктопной

новятся слишком велики. Да

tmux:

 

 

 

 

 

 

 

 

 

 

Linux. Посмотрим, что это за библиотеки:

 

 

и сами приложения в случае

$ ./configure --enable-

 

• SDL — удобная «обертка» вокруг низкоуровневых муль-

статической компоновки мо-

тимедиафункций; используется в основном для раз-

гут раздуваться до невооб-

static --host=arm-linux &&

работки игр;

 

 

разимых

размеров.

Однако

make

 

 

 

 

 

 

 

 

 

 

• FFmpeg — конвертация большинства аудио- и видео-

есть решение и для этой си-

 

 

 

 

 

 

 

 

 

 

 

форматов;

 

 

туации — Linux Deploy, кото-

После сборки и заливки ис-

• Qt — начиная с пятой версии, Qt доступна и под Android;

рый с легкостью можно найти

полняемого файла перед запу-

• Unity — игровой движок;

 

 

в Google Play.

 

ском tmux, помимо переменной

• Ogre — «обертка» вокруг OpenGL для работы

 

Поскольку Android построен

TERMINFO,

нужно определить

с 3D-графикой.

 

 

на базе ядра Linux, а измене-

переменную

TMPDIR — лично

 

 

 

 

 

 

 

 

ния в нем не настолько сильны,

я использовал /data/local/tmp.

В общем, с точки зрения портирования приложений вы-

чтобы мешать запуску

обычных

# export TERMINFO=/system/

 

брать есть из чего.

 

 

POSIX-приложений (что и было

 

 

 

 

 

 

 

 

продемонстрировано выше), суще-

 

 

 

 

 

 

 

 

etc/terminfo

 

 

 

 

 

 

 

 

 

возможность развертывания

# export TMPDIR=/data/

 

 

 

 

 

 

 

 

-окружения (с пробросом соот-

local/tmp

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

псевдофайловых

систем)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

в нем userland-части дистри-

Стоит заметить, что tmux может

 

 

 

 

 

 

 

 

поддерживающих

архитектуру ARM.

только от рута, потому что права

 

 

 

 

 

 

 

 

Deploy делает именно это, соз-

ют писать в вышеуказанную папку кому попало.

 

 

 

 

 

 

 

давая образ и монтируя его как loop-устройство.

Ngrep

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Поддерживаются следующие дистрибутивы:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ubuntu;

 

 

 

А это крайне полезная утилита, позволяющая отлавливать

OpenSUSE;

 

 

 

пакеты с заданным паттерном (может быть нужно, например,

Fedora;

 

 

 

для отладки RESTful-приложений). Для ее сборки потребует-

Arch Linux;

 

 

 

ся собрать еще и libpcap. Как обычно, создаем каталог, куда

Gentoo;

 

 

 

и скачиваем libpcap, распаковываем его и собираем:

• и, наконец, Kali Linux (его наличие, несомненно, обрадует

$ mkdir ngrep && cd $_

 

 

 

 

 

 

 

пентестеров).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$ wget http://www.tcpdump.org/release/

 

 

 

 

 

 

 

Для входа в систему существует два метода: по SSH и че-

libpcap-1.6.2.tar.gz

 

 

 

 

 

 

рез VNC. При наличии SSH-сервера в самом Android в Linux

$ tar xzvf libpcap-1.6.2.tar.gz

 

 

 

 

 

 

Deploy нужно либо его отключить, либо переопределить

$ cd libpcap-1.6.2

 

 

 

 

 

 

порт. А если использовать VNC, необходимо доустановить

$ export SYSROOT_ADDITIONS=${HOME}/ngrep/

в Android VNC-клиент (рекомендую bVNC).

 

rootdir

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В данном контейнере можно производить практически

$ ./configure --host=arm-linux --disable-shared

 

те же действия, что и в обычном настольном дистрибутиве

--with-pcap=linux --disable-dbus --prefix=

Linux, — со скидкой на поддерживаемую ядром функцио-

$SYSROOT_ADDITIONS

 

 

 

 

 

 

нальность. Замечу, что контейнер не изолирован от основ-

$ make && make install

 

 

 

 

 

 

ной системы, и запуск служб в некоторых дистрибутивах

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

не поддерживается по причине использования в них со-

Скачиваем сам ngrep, распаковываем, собираем:

временных систем инициализации. Также стоит помнить,

$ export CFLAGS="--static -I${SYSROOT_ADDITIONS}

 

что приложения в контейнере нативные, — это изрядно ку-

шает батарею.

 

 

 

/include -I${SYSROOT_ADDITIONS}/include/pcap

 

 

 

 

 

--sysroot=$LINARO_SYSROOT"

 

 

 

 

 

 

ЗАКЛЮЧЕНИЕ

 

 

 

$ export LDFLAGS=" -L${SYSROOT_ADDITIONS}/lib

В статье были описаны два (а если считать компиляцию ядра

-L${SYSROOT_ADDITIONS}/include -L

 

 

 

 

 

 

с модулями, то три) метода расширения функциональности

${SYSROOT_ADDITIONS}/include/pcap

 

 

 

 

 

 

на Android. Подведем итоги.

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

ХАКЕР m

01 /192/ 2015

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Родственные связи

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w35Click

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Компиляция ядра и модулей имеет смысл только в тех слу-

Запуск окружения

разом, нелишним будет еще раз подчеркнуть, что этот метод

чаях, когда тебе нужна низкоуровневая функциональность —

Ubuntu в Linux Deploy

годится лишь для небольших приложений.

будь то поддержка ФС или, допустим, модуль iptables. В со-

 

Для запуска крупных приложений можно использовать

временных стоковых ядрах поддержка загрузки модулей чаще

 

Linux Deploy, позволяющий развернуть на Android полно-

всего отключена, так что для добавления функциональности

 

ценную userland-часть популярных дистрибутивов. Однако

всяко потребуется компиляция всего ядра.

 

и у него есть недостатки. Во-первых, он изрядно кушает

В случае с компиляцией небольших POSIX-приложений

 

батарею, а во-вторых, размер образа с данной userland-

можно попытаться использовать гугловский NDK, идущий

 

частью не может быть больше 4 Гб, так что, если раскатал

с Bionic и практически несовместимый с POSIX, а можно ис-

 

губу на кучу приложений, закатай ее обратно.

пользовать сторонний тулчейн для архитектуры ARM, в кото-

 

В целом же запуск POSIX-приложений в Android впол-

ром, как правило, есть библиотека glibc, и компилировать при-

Ubuntu в Linux Deploy

не возможен — что и было показано в статье. А уж каким

ложения статически. Однако следует помнить, что статически

по виду неотличим

способом ты будешь что-то делать, ты волен выбирать сам.

слинкованное приложение весит достаточно много, таким об-

от десктопного

Stay freedom.

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

36 m

w Click

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

.c

 

 

p

 

 

 

 

g

 

 

 

 

df

 

 

n

e

 

 

 

 

-xcha

 

 

 

X-Mobile

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

ХАКЕР 01 /192/ 2015

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Art Hakker Photography@flicker.com

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

ХАКЕР m

01 /192/ 2015

За семью замками

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

 

ОБЗОР SECURITY-НОВШЕСТВ

ANDROID 5.0

Евгений Зобнин androidstreet.net

Lollipop — самое значительное обновление

Android со времен Ice Cream Sandwitch.

Программисты Google переработали многие компоненты системы, полностью изменили интерфейс, добавили так давно ожидаемые функции из кастомных прошивок

и версий системы разных производителей. Но едва ли не наибольшее количество изменений компания внесла

в компоненты системы, отвечающие за безопасность смартфона и пользовательских данных.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w37Click

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

38 m

w Click

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

.c

 

 

p

 

 

 

 

g

 

 

 

 

df

 

 

n

e

 

 

 

 

-xcha

 

 

 

X-Mobile

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

ХАКЕР 01 /192/ 2015

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ИСТОРИЧЕСКАЯСПРАВКА

 

 

 

 

лога /system и задействована система полномочий

Для Google безопасность Android всегда играла да-

 

(capabilities) ядра Linux для системных компонентов.

леко не последнюю роль. С самых первых версий

 

В целом за шесть лет развития Android Google

Android был снабжен набором мощных средств за-

 

проделала серьезную работу по улучшению общей

щиты, среди которых можно отметить сандбоксинг

 

безопасности системы, не скатившись при этом

приложений, систему разграничения полномочий,

 

до уровня Apple с ее методом тотальной блокировки

единый RPC-механизм для всех приложений и си-

INFO

всего и вся. Операционка осталась гибкой, полностью

стемы (Binder), язык программирования с про-

подчиненной пользователю, но при этом достаточно

веркой границ буферов, контролируемую среду

Директор ФБР Джеймс

безопасной для того, чтобы не возникало необходи-

исполнения (dalvik) и, конечно же, повсеместное

мости установки антивирусов и «включения режима

использование цифровых подписей (в том числе

Коми (James Comey)

параноика».

 

 

 

для исполняемого кода).

 

 

 

резко раскритиковал

Тем не менее оказалось, что планы Google прости-

С каждым новым релизом механизмы безопасно-

функцию шифрования

раются гораздо дальше того, что уже сделано. Android

сти дорабатывались и расширялись. Сначала Google

по дефолту в iOS 8

5.0 включает в себя столько security specific новшеств,

занялась проблемами переполнения буфера и ин-

и Android 5.0, заявив,

что дальше, кажется, уже некуда. Но начнем с двух

тегрировала наработки проекта OpenBSD в свою

что она мешает «свер-

главных героев новостей: шифрования, которое за-

системную библиотеку Bionic (реализации функций

шению правосудия» в от-

ставляет девайсы

тормозить

после

обновления

dmalloc и calloc, Android 1.5), затем добавила под-

ношении террористов

до 5.0, и SELinux, который ломает root.

 

держку бита No eXecute (NX) в 2.3, модифицировала

и прочих криминальных

ШИФРОВАНИЕПОУМОЛЧАНИЮ

 

систему сборки исходников для поддержки опций

личностей.

 

компилятора

-fstack-protector

и

Wformat-security

 

В очередной раз следуя нога в ногу за Apple, «корпо-

-Werror=format-security (защита от срыва стека и оши-

 

рация добра» внедряет в Android функциональность,

бок форматирования строк).

 

 

 

 

которая совсем недавно появилась в iOS. На этот раз

В версии 3.0 появилась встроенная функция шиф-

 

речь идет о шифровании свежекупленного устрой-

рования всех пользовательских данных, основанная

 

ства — начиная с Lollipop, все пользовательские на-

на проверенном годами и сотнями тысяч пользова-

 

стройки и данные в каталоге /data, а вместе с ними

телей модуле Linux-ядра dm-crypt. В Android 4.0 —

 

и внутренняя (эмулируемая) карта памяти будут шиф-

так давно ожидаемый в корпоративном секторе API

 

роваться в режиме реального времени без ведома

KeyChain, позволяющий устанавливать в систему

 

пользователя.

 

 

 

и использовать сторонние цифровые сертификаты.

 

На практике это означает только то, что та самая

В 4.1 была интегрирована функция шифрования уста-

 

функция шифрования из 3.0 теперь будет включена

новленных приложений (в первую очередь для за-

 

по умолчанию, но с двумя важными оговорками:

щиты от копирования) и поддержка хардварного

 

• для защиты ключа шифрования (Master Key) будет

шифрования с помощью HAL-библиотеки keymaster

 

использован случайно сгенерированный ключ

(в зависимости от производителя она может исполь-

 

вместо ключа, полученного из PIN-кода экрана

зовать тот или иной механизм шифрования, напри-

 

блокировки;

 

 

 

мер M-Shield в чипах серии OMAP4, на котором бази-

 

• этот случайный ключ (Key Encryption Key, KEK)

ровался Galaxy Nexus).

 

 

 

 

 

теперь может храниться в области памяти, защи-

В

феврале 2012

года Google

переключилась

 

щенной с помощью реализованного в процессоре

на борьбу с вирусами и создала сервис онлайн-про-

 

механизма Trusted Execution Environment (TEE),

верки приложений Bouncer, кото-

 

 

 

 

такого, например, как Qualcomm

рый запускал каждое публикуемое

 

 

 

 

Secure Execution Environment.

в Google Play приложение в эмулято-

 

 

Включаем шифрование данных

 

 

 

 

 

ре и прогонял через многочисленные

 

 

 

 

Другими словами,

возможность

тесты, выявляя подозрительное по-

 

 

 

 

расшифровки данных теперь до-

ведение. В ноябре того же года был

 

 

 

 

ступна только одному небольшо-

запущен сервис онлайн-проверки

 

 

 

 

му компоненту ОС, а именно HAL-

софта на вирусы прямо на устрой-

 

 

 

 

библиотеке masterkey,

работающей

стве

пользователя.

Изначально

 

 

 

 

с TEE. Ни пользователь, ни другие

он работал только на 4.2, но к июлю

 

 

 

 

части системы не смогут получить

2013-го был интегрирован в пакет

 

 

 

 

ключ шифрования в ее обход, так же

Google Services и стал доступен

 

 

 

 

как это не получится сделать челове-

для всех устройств от 2.3 и выше.

 

 

 

 

ку, который попытается снять дамп

Начиная с апреля 2014-го провер-

 

 

 

 

памяти напрямую с чипов NAND.

ка выполняется не только на этапе

 

 

 

 

С другой стороны, шифрование

установки приложения, но и перио-

 

 

 

 

никак не защитит устройство в том

дически для

всего установленного

 

 

 

 

случае, если

юзер не установит

софта. Для борьбы с SMS-троянами

 

 

 

 

на экран блокировки PIN-код или

в Android 4.2 была интегрирована

 

 

 

 

не

воспользуется функцией Smart

функция принудительного подтверж-

 

 

 

 

Lock (о ней мы поговорим позже).

дения отправки СМС на короткие

 

 

 

 

Поэтому заявления Google о том,

номера.

 

 

 

 

 

 

 

что они сделали априори секьюрную

Другим новшеством Android

4.2

 

 

 

 

операционку, которая не потребует

стала интеграция в ОС подсисте-

 

 

 

 

лишних телодвижений от пользова-

мы

мандатного контроля доступа

 

 

 

 

теля, как минимум лукавство.

SELinux, которая изначально работа-

 

 

 

 

Во всем остальном реализация

ла исключительно в «разрешающем

 

 

 

 

шифрования осталась на прежнем

режиме» (permissive mode), а в 4.4

 

 

 

 

уровне. Это поблочное шифрование

была переведена в режим enforcing,

 

 

 

 

раздела /data с помощью модуля

но с использованием всего не-

 

 

 

 

dm-crypt и алгоритма AES-128 в ре-

скольких контекстов

безопасности

 

 

 

 

жиме CBC с задействованием функ-

для

низкоуровневых

компонентов

 

 

 

 

ции

ESSIV:SHA256 для получения

системы, что не слишком повышало

 

 

 

 

векторов инициализации (IV). Сам

защищенность. В качестве дополни-

 

 

 

 

ключ шифрования защищен с помо-

тельной меры в 4.3 был запрещен

 

 

 

 

щью KEK-ключа, который может быть

запуск SETUID-бинарников из ката-

 

 

 

 

или получен из PIN-кода с помощью

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

ХАКЕР m

01 /192/ 2015

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

За семью замками

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w39Click

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Контексты SELinux нативных демонов и приложений

прогонки через функцию script (www.tarsnap.com/

 

заранее оговоренных и имел ограниченный доступ

scrypt.html), или сгенерирован случайным образом

 

к системным вызовам. По сути, SELinux запирает при-

и сохранен в TEE. При этом, если юзер купит смарт-

 

ложение в песочницу, серьезно ограничивая возмож-

фон на базе Android 5.0 с активированным по умол-

 

ности того, кто сможет его взломать.

чанию шифрованием и затем установит PIN-код, по-

 

Вскоре после появления на свет Android разра-

следний также будет использован для генерации KEK.

 

ботчики SELinux начали проект SEAndroid (seandroid.

Функция script

для

получения

 

bitbucket.org) с целью перенести

ключа из PIN-кода используется

 

систему в мобильную операционку

начиная с Android 4.4 и заменяет

Выбираем пользователя

и разработать ряд SELinux-правил

применявшийся ранее

алгоритм

 

для защиты ее компонентов. Начиная

PBKDF2. Последний оказался уяз-

 

с версии 4.2, наработки этого проек-

вимым для подбора на GPU (6-знач-

 

та входят в состав Android, но на пер-

ный цифровой PIN за 10 с, 6-значный

 

вых порах (версия 4.2–4.3) исполь-

знаковый — 4 ч с помощью hashcat),

 

зуются исключительно для сбора

тогда как script, по заявлению соз-

 

информации о поведении компонен-

дателей, увеличивает время подбо-

 

тов системы (с целью последующего

ра примерно в 20 000 раз и вообще

 

составления правил). В версии 4.4

не подходит для GPU по причине вы-

 

Google перевела систему в активный

соких требований к памяти.

 

режим, но с мягкими ограничениями

В заключение

хочу

сказать,

 

для нескольких системных демонов

что шифрование будет активирова-

 

(installd, netd, vold и zygote). На пол-

но только для устройств, изначально

 

ную же катушку SELinux заработал

основанных на Android 5.0. Уже су-

 

только в 5.0.

ществующие девайсы, получившие

 

В Android 5.0 предусмотрено бо-

обновление по воздуху, останутся

 

лее 60 доменов SELinux (проще го-

незашифрованными.

 

 

 

воря — правил ограничений) почти

SEANDROID

 

 

 

для каждого системного компонен-

 

 

 

та, начиная от первичного процесса

Технология SELinux,

разработанная

 

init и заканчивая пользовательски-

Агентством национальной безопас-

 

ми приложениями. На практике это

ности США, уже давно используется

 

означает, что многие векторы атак

во многих корпоративных и настоль-

 

на Android, которые в прошлом ис-

ных дистрибутивах для защиты от са-

 

пользовались как самими юзерами

мых разных видов атак. Одно из ос-

 

для получения root, так и разного

новных применений SELinux — это

 

рода малварью, более не актуальны.

ограничение приложениям доступа

 

Так, уязвимость CVE-2011-1823,

к ресурсам ОС и данным других при-

 

имевшая место во всех версиях

ложений. С помощью SELinux можно,

 

Android до 2.3.4 и позволяющая вы-

например, сделать так, чтобы сервер

 

звать memory corruption в демоне

Apache имел доступ только к опреде-

 

vold, а далее передать управление

ленным файлам и диапазону портов,

 

шеллу с правами root (эксплойт

не мог запускать бинарники помимо

 

Gingerbreak), не могла бы быть ис-

Соседние файлы в папке журнал хакер