LINUX И ANDROID SHELL

Данная статья изначально являлась основой для статьи БОЕВОЙ ANDROID и в основном здесь речь пойдёт только о удалённом подключении к шеллу Android-устройства, и справке по необходимым командам, приложениям, скриптам. В руководстве будет рассмотрено получение доступа к смартфону через подключение по USB кабелю с использованием консольной программы ADB (Android Debug Bridge) и через приложение SSHDroid, чтобы подключаться к устройству по Wi-Fi. Так же немного будет затронут bash-скриптинг на Linux.

ЦИКЛ СТАТЕЙ SHELLCODE

  1. ВСЁ О SHELL
  2. КОМАНДНАЯ СТРОКА WINDOWS
  3. LINUX И ANDROID SHELL
  4. WEB SHELL
  5. НЕ БЕЗ METASPLOIT

ТЕОРИЯ

  1. Команды LINUX:
    1. pwd — показать путь до текущего каталога.
    2. cd [путь] — перейти в указанный каталог.
    3. ls — показать содержимое каталога.
    4. Команда cat покажет содержимое файла:
      1. cat /sys/class/power_supply/battery/capacity — показать состояние батареи в процентах.
    5. Запись в файл:
      1. [команда] > [путь до файла] — записать первой строкой в файл.
      2. [команда] >> [путь до файла] — записать следующей строкой в файл.
      3. * Использовать > и >> можно для всех команд, чтобы можно было записать результат в файл.
    6. cp [полный путь до файла] [полный путь до каталога] — копировать.
    7. mv [полный путь до файла] [полный путь до каталога] — переместить.
    8. rm [полный путь до файла] — удалить файл.
    9. mkdir — создать каталог.
    10. rmdir — удалить каталог.
    11. echo [текст] — отобразить текст.
    12. sh [полный путь до файла] — запустить скрипт.
    13. df — показать свободное место.
    14. ps — показать запущенные процессы.
    15. kill [id] — завершить процесс.
    16. killall [имя] — завершить процесс.
    17. start/stop — запуск и остановка системных служб.
    18. reboot -p — перезагрузить устройство.
    19. Команды для сети:
      1. netcfg — показать сетевые настройки.
      2. netstat -lptu — показать открытые порты и приложения(только серверы).
      3. netstat -wat — показать все порты.
      4. iftop — посмотреть использование сети процессами.
      5. ifconfig wlan0 — посмотреть настройки IP и маски подсети.
      6. svc — управление мобильным подключением, wifi, usb и питанием.
    20. Сервисы:
      1. service — показать справку по управлению Java сервисами.
      2. service list список сервисов.
    21. Дампы:
      1. dumpstate — дамп состояния устройства.
      2. dumpsys — дамп состояния системных сервисов.
  2. Команды Android:
    1. Команда pm (package manager) позволяет управлять пакетами:
      1. pm — показать справку по команде.
      2. pm list packages — отсортировать по ключам.
        1. [-s] — только системные приложения.
        2. [-3] — только сторонние приложения.
        3. [-f] — только пути установленных пакетов.
      3. pm list packages — показать список установленных приложений.
      4. pm install [путь] — установить приложение из пакетного .apk файла.
      5. pm clear [приложение] — очистить кэш приложения.
      6. pm uninstall [приложение] — удалить приложение.
      7. pm list permissions — показать все разрешения для приложений.
    2. Команда am (activity manager) позволяет управлять приложениями:
      1. am — показать справку по команде.
      2. am start -n com.android.settings/.Settings — запустить окно настроек.
      3. am start -n com.android.browser/.BrowserActivity — запустить браузер.
      4. am start tel:210-385-0098 — показать окно набора данного номера.
      5. am kill [приложение] — завершить приложение.
      6. * Чтобы запустить приложение — нужно знать его Activity, а для того, чтобы узнать — нужно найти activity приложения в поисковике, либо декомпилировать приложение (с помощью JDK/SDK искать в AndroidManifest.xml, или установить приложение Activity Launcher).
        «Activity — это компонент приложения, который выдает экран, и с которым пользователи могут взаимодействовать для выполнения каких-либо действий.» (с)
  3. ADB команды:
    1. Команда input позволяет отправить нажатие в текущее окно:
      1. input [источник] [команда] [аргументы] — отправить нажатие.
        1. input tap [x] [y] — нажать в указанное место.
        2. input swipe 10 10 10 1000 — вытянуть панель уведомлений.
        3. input keyevent 82 — нажать кнопку питания.
        4. input text «текст» — вставить текст в текущее поле.
        5. press (Default: trackball)
        6. roll [dx] [dy] (Default: trackball)
      2. dumpsys window | \sed -n ‘/mUnrestrictedScreen/ s/^.*) \([0-9][0-9]*\)x\([0-9][0-9]*\)/\1 \2/p’ — показать ширину и высоту экрана.
    2. Скриншоты:
      1. screencap — сделать скриншота.
      2. screenrecord — записать скринкаст.
    3. Копирование:
      1. adb push [путь с пк] [путь на андроид] — копировать.
      2. adb pull [путь на андроид] [путь с PC] — копировать.
    4. Установка и удаление приложений:
      1. adb install [-l] [-r] [-s] [полный путь до приложения на пк] — загрузить приложение на устройство и установить его.
        1. [-l] — блокировка приложения.
        2. [-r] — переустановить приложение, с сохранением данных.
        3. [-s] — установить приложение на карту памяти.
      2. adb uninstall [-k] [название_приложения.apk] — удалить приложение с устройства.
        1. [-k] — не удалять сохраненные данные приложения и пользователя.
    5. Перезагрузка:
      1. adb reboot bootloader — перезагрузить в режим bootloader.
      2. adb reboot recovery — перезагрузить в режим recovery.
    6. getprop/setprop — команды для чтения и изменения системных переменных.
  4. BusyBox команды:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    busybox --list
    [
    [[
    acpid
    addgroup
    adduser
    adjtimex
    ar
    arping
    ash
    awk
    basename
    blockdev
    brctl
    bunzip2
    bzcat
    bzip2
    cal
    cat                 прочитать файл
    chgrp
    chmod               сменить права
    chown
    chroot
    chvt
    clear               очистить экран
    cmp
    cp                  копировать
    cpio
    crond
    crontab
    cut
    date                текущие дата и/или время
    dc
    dd                  копировать файл с конвертированием и форматированием
    deallocvt
    delgroup
    deluser
    df                  вывести статистику использования файловой системы
    diff
    dirname
    dmesg
    dnsdomainname
    dos2unix
    dpkg
    dpkg-deb
    du
    dumpkmap
    dumpleases
    echo                вывести строку
    ed
    egrep
    eject
    env
    expand
    expr
    false
    fbset
    fdflush
    fdisk
    fgrep
    find
    fold
    free                выводит информацию о использовании памяти
    freeramdisk
    fsck.minix
    ftpget
    ftpput
    getopt
    getty
    grep                искать по шаблону
    gunzip              распаковать из gzip
    gzip                упаковать в gzip
    head
    hexdump
    hostid
    hostname
    httpd
    hwclock
    id
    ifconfig            настройка сетевых интерфейсов
    ifdown              выключение сетевого интерфейса
    ifup                включение сетевого интерфейса
    init
    ionice
    ip                  настройка сетевых интерфейсов
    ipcalc
    kill                завершить процесс
    killall
    klogd
    last
    length
    less
    linuxrc
    ln                  создать ссылку на файл или каталог
    loadfont
    loadkmap
    logger
    login               начать новый сеанс в системе
    logname
    logread
    losetup
    ls                  вывести список файлов или каталогов
    lzcat
    lzma
    makedevs
    md5sum
    mdev
    mesg
    microcom
    mkdir               создать каталог
    mkfifo
    mkfs.minix
    mknod
    mkswap
    mktemp
    more                вывод файла построчно или экранами
    mount               примонтировать устройство/ресурс
    mt
    mv                  переместить файл
    nameif
    nc
    netstat
    nslookup
    od
    openvt
    passwd
    patch
    pidof               вывести список PID всех процессов
    ping                отправить сетевым хостам пакеты ICMP ECHO_REQUEST
    ping6
    pivot_root
    printf
    ps
    pwd                 вывести рабочий каталог
    rdate
    readlink
    realpath
    renice
    reset
    rev
    rm                  удалить файл
    rmdir               удалить каталог
    route
    rpm
    rpm2cpio
    run-parts
    sed
    seq
    setkeycodes
    sh
    sha1sum
    sha256sum
    sha512sum
    sleep
    sort
    start-stop-daemon
    static-sh
    strings
    stty
    su
    sulogin
    swapoff
    swapon
    switch_root
    sync
    sysctl
    syslogd
    tac
    tail
    tar                 упаковать в tar
    tee
    telnet              клиент текстового интерфейса взаимодействия
    telnetd             сервер текстового интерфейса взаимодействия
    test
    tftp
    time
    timeout
    top
    touch               обновить дату последнего изменения файла
    tr
    traceroute          команда для трассировки маршрута
    traceroute6
    true
    tty
    tunctl
    udhcpc
    udhcpd
    umount              размонтировать
    uname               печатает сведения о системе
    uncompress
    unexpand
    uniq
    unix2dos
    unlzma
    unxz
    unzip               распаковать zip архив
    uptime
    usleep              пауза N микросекунд
    uudecode
    uuencode
    vconfig
    vi                  текстовый редактор
    vlock
    watch               выполнять программу периодически
    watchdog
    wc
    wget
    which
    who
    whoami
    xargs
    xz
    xzcat
    yes
    zcat                распаковать в стандартный вывод

ПРАКТИКА

  1. Для начала скачиваем инструменты для работы со смартфоном:
    1. Официальный сайт ADB
    2. Официальный сайт Android Screencast
    3. Официальный сайт PuTTY
    4. Официальный сайт WinSCP
    5. 4PDA SSHDroid Unlocked
  2. Распаковываем ADB и Android Screencast в C:\adb, а остальное в C:\adb\ssh.
  3. Далее подключаем по USB смартфон и открываем командную строку (win+r, пишем cmd), вводим команды:
    1. cd c:\adb — перейти в каталог adb.
    2. adb devices — показать найдено ли устройство и подключить устройство.
    3. adb connect host:port — подключить устройство удалённо по IP.
    4. adb push C:\adb\ssh\sshdroid.apk /sdcard/Download/apk — перемещаем SSHDroid в стандартную папку для загрузок — Downloads в папку apk.
  4. Устанавливаем приложение SSHDroid со смартфона или с помощью Android Screencast. Для второго способа нужно иметь Java7+ и запустить .jar приложение, тогда появится окно рабочего стола смартфона.
  5. Открываем приложение и нажимаем Start. Там же в поле Address запоминаем IP-адрес.
  6. Открываем PuTTY, в поле Host Name пишем IP-адрес, в поле Port пишем 2222, в Connection Type выбираем чекбокс SSH. ОК.
  7. В открывшемся окне PuTTY появится строка «login as:». Пишем root, а на запрос пароля admin.
  8. putty.exe [email protected]:port -pw password — автоматический вход из cmd.

Поздравляю, теперь вы можете отсоединить USB кабель и подключаться своему устройству удалённо! Далее рассмотрим команды, которые помогут вам в элементарном администрировании.

Твики build.prop

Файл /system/build.prop хранит системные настройки Android. Это конфиг всех конфигов, и с его помощью можно сделать огромное количество интересных вещей. Достаточно вписать в конец файла строку с именем опции и значением через знак равно:

  1. ro.product.model — хранит название устройства (отображается в меню «О телефоне»). Иногда позволяет обманывать Play Store и ставить приложения, предназначенные для других устройств, или включать недоступные другим функции. Например, выдать себя за Pixel 2 XL и поставить новый Pixel Launcher с полноценной поддержкой Android Assistant;
  2. ro.sf.lcd_density — плотность пикселей на экране, которую я всегда выставляю для своего Nexus 5 на 420 вместо 480. Это позволяет получить пять иконок в ряд в стоковом лаунчере вместо четырех плюс делает текст более мелким;
    Временный вариант(без рут прав): «С другой стороны, это значение можно записать во временную память, даже без рут-доступа. Изменение будет сохранено до первой перезагрузки. Это и плюс (безопасно), и минус (после перезагрузки надо снова производить действия), но меня устраивает. Для получения и записей подобных значений используется команда getprop и setprop, соответственно, но писать надо не в ro.* (на то он и ro — read only), а в qemu:
    setprop qemu.sf.lcd_density 200» и «после чего нужно перезапустить графическую оболочку»
  3. ro.telephony.call_ring.delay — при значении 0 уберет задержку начала включения музыки при звонке;
  4. persist.audio.fluence — содержит четыре команды, отвечающие за работу шумодава. Можно поиграть со значениями, если тебя плохо слышно при звонке или есть «булькающий» звук на записи видео;
  5. debug.sf.nobootanimation — значение 1 убирает бутанимацию;
  6. ro.config.hw_quickpoweron — значение true увеличивает скорость загрузки телефона (в теории);
  7. qemu.hw.mainkeys=0 — позволяет активировать показ наэкранных клавиш в дополнение к хардварным;
  8. ro.telephony.default_network — говорит системе, в какой режим должна быть переключена мобильная сеть при загрузке. В качестве значения выступает цифра, которую можно узнать так: набираем в номеронабирателе ##4636## и нажимаем на «Информация о телефоне». В меню «Предпочтительный тип сети» отсчитываем сверху до нужного режима. Счет начинается с нуля. То есть для 3G-смартфона значения будут такими: WCDMA preferred (предпочтительно 3G) — это 0, GSM Only (только 2G) — 1, WCDMA only (только 3G) — 2 и так далее. Досчитал до нужного пункта — записал цифру в значение. Теперь сразу после перезагрузки сеть будет активироваться именно в том режиме, который записан в build.prop.

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

  1. Чтобы запустить стандартное приложение «Настройки» с определённым меню нужно выполнить:

    am start -n com.android.settings/.Settings\…

    и вместо «…» нужно подставить строку из предоставленных ниже. Результат этой команды откроет приложение, а вам остаётся прописать input с определённым действием и нажать на нужные кнопки, ввести нужные данные. Таким образом вы можете делать с помощью скриптов перезапуск отладки по USB, подключиться к Wi-Fi сети, зашифровать данные, сделать восстановление системы итд.
    // Спец. возможности
    $AccessibilitySettingsActivity
    // Синхронизация
    $AccountSyncSettingsActivity
    // Настройки IP (и фильтр плохих сетей)
    $AdvancedWifiSettingsActivity
    $AndroidBeamSettingsActivity
    // Bluetooth
    $BluetoothSettingsActivity
    // Зашифровать данные
    $CryptKeeperSettingsActivity
    $CryptSDCardSettingsActivity
    // Передача данных
    $DataUsageSummaryActivity
    // Настройки даты и времени
    $DateTimeSettingsActivity
    // Для разработчика
    $DevelopmentSettingsActivity
    // Настройки администрирования
    $DeviceAdminSettingsActivity
    // Состояние телефона
    $DeviceInfoSettingsActivity
    // Экран
    $DisplaySettingsActivity
    $DockSettingsActivity
    // Язык и ввод
    $InputMethodAndLanguageSettingsActivity
    // Язык
    $LocalePickerActivity
    // Мое местоположение
    $LocationSettingsActivity
    $ManageAccountsSettingsActivity
    // Приложения
    $ManageApplicationsActivity
    $MenuPowerSavingModeSettingsActivity
    $MotionSettingsActivity
    // Питание
    $PowerUsageSummaryActivity
    // Восстановление и сброс
    $PrivacySettingsActivity
    // Работающие приложения
    $RunningServicesActivity
    // Безопасность
    $SecuritySettingsActivity
    $SoftwareUpdateSettingsActivity
    $SoundSettingsActivity
    // Проверка правописания
    $SpellCheckersSettingsActivity
    // Настройки хранилища
    $StorageSettingsActivity
    // Использование памяти
    $StorageUseActivity
    // Точка доступа Wi-Fi
    $TetherSettingsActivity
    // Настройки синтеза речи
    $TextToSpeechSettingsActivity
    // Словарь пользователя
    $UserDictionarySettingsActivity
    // VPN
    $VpnSettingsActivity
    $WifiP2pSettingsActivity
    // Wi-Fi
    $WifiSettingsActivity
    // Беспроводные сети
    $WirelessSettingsActivity

СКРИПТЫ

  1. Сохраняем скрипт в файл с расширением .sh.
  2. sh [полный путь до файла] — запустить скрипт.

Запуск ADB в сетевом режиме:
#!/system/bin/sh
setprop service.adb.tcp.port 5555
stop adbd
start adbd

Делает бэкап всех приложений на карту памяти
#!/system/bin/sh
mkdir /sdcard/backup
cp /data/app/*.apk /sdcard/backup

Скрипт, который восстановит бэкап:
#!/system/bin/sh
for i in /sdcard/backup/*; do
pm install -t -r $i
done

Изменить IMEA
echo ‘AT+EGMR=1,7,»xxx»‘ >/dev/radio/pttycmd1

Изменить MAC
ip link set eth0 address 00:11:22:33:44:55

Показывает имя всех установленных пакетов
pm list packages -f

Запускает программу
monkey -p имя пакета -c android.intent.category.LAUNCHER 1
========
Создать файл /system/etc/wifi/ungolianth.conf с содержимым:
network={
ssid=»Ungolianth»
psk=»JJi.D6k-AcapF4HI1V+Qz1WzK*KEJyW2-z2!l2dgP~Hg05zCwnOXWJ2Dbyd9ph0″
priority=1
}

#!/system/bin/sh
wpa_supplicant -i wlan0 -c /system/etc/wifi/ungolianth.conf
dhcpcd wlan0
========

Несколько команд для демонстрации, того, что обычный shell без проблем позволяет сделать то, что мы привыкли делать в unix:
Установить все приложения из каталога /sdcard/apk, да так, чтобы они были установлены на карту памяти:

$ for р in /sdcard/apk/*; do pm install -s $p; done
Или, может быть, удалить все приложения сразу:

$ for р in `pm list packages -s`; do pm uninstall $p; done
Сделаем бэкап всех приложений на карту памяти:

$ FILES=`pm list packages -f | cut -d ‘:’ -f 2 | cut -d ‘=’ -f 1`
$ for f in $FILES; do cp $f /sdcard/backup; done

5. Переключаться между пользователями. Команда pm позволяет создать нового пользователя, а для переключения на него можно использовать am:

$ am switch-user 1
Здесь 1 — ID пользователя, который выводится на экран при его создании.
Давайте обманем приложения, заставив думать, что событие действительно произошло и приложение вызвала система, хотя это не так. В качестве примеров можно привести следующие:
1. Была нажата хардварная кнопка «Камера» (приводит к запуску камеры):

$ am broadcast -a android, intent .action.CAMERA BUTTON
2. Смартфон переведен в режим полета (и он действительно будет в него переведен):

$ am broadcast -a android, intent .action. AIRPLANE MODE —ez state true
3. Была подключена карта памяти (приводит к запуску сканера медиа):

$ am broadcast -a android.intent.action.MEDIA MOUNTED -d file:///sdcard
Из других интересных применений am можно назвать принудительный перезапуск домашнего экрана:

$ am start -a android.intent.action.MAIN -с android.intent.category.HOME
И открытие указанной ссылки в браузере:

$ am start -a android.intent.action.VIEW * -n com.android.browser/.BrowserActivity
‘http://info-linux.ru’
Разумеется, все эти возможности можно использовать в скриптах. А сами скрипты можно автоматически запускать с помощью Tasker.
Бэкап приложений на жесткий диск с помощью ADB

$ adb pull /data/арр
Рассмотрим еще одну небольшую утилиту –svc. В Android она позволяет управлять состоянием различных интерфейсов и питанием системы. С помощью svc можно сделать следующее: 1. Включить/выключить Wi-Fi:

$ svc wifi enable
$ svc wifi disable
2. Включить/выключить передачу данных по мобильным сетям: $ svc data enable

$ svc data disable
3.Включить/выключить отладку no USB (ADB):

$ svc usb setFunction adb
4.Заставить смартфон оставаться включенным при подключении к USB-nopтy/зарядке/Wi-Fi-сети или всегда:

$ svc power stayon usb
$ svc power stayon ac
$ svc power stayon wireless
$ svc power stayon true

МАТЕРИАЛЫ

  1. 4PDA — ADB и все, что c помощью него можно сделать
  2. ][ — Shell-скриптинг в среде Android