Новогоднее исследование ADSL-роутера на базе Linux — 0x2 — знакомимся с программной частью



0x0 — введение
0x1 — разбираем 🙂
0x2 — знакомимся с программной частью

Уже 2-е января! Такими темпами, скоро все новогодние каникулы пронесутся 🙂
Чтож, раз Вы снова здесь, значит, готовы продолжить изучение своего подопытного устройства.

В моём случае — в роли испытуемого всё тот же ADSL-модем:
ZTE ZXDSL831AII (подобен D-link DSL-2500U)

Вчера, мы уже разобрали модем и обнаружили, что, фактически — это настоящий одноплатный компьютер с процессором Broadcom BCM6338 (частотой 240 Mhz и архитектурой MIPS), 8-ю Мегабайтами оперативной памяти и 2-мя Мегабайтами Flash-памяти.
Настала пора познакомиться с программной начинкой испытуемого.

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

через USB-кабель или через патчкорд к сетевой карте компьютера (на самом деле — есть ещё третий вариант — с использованием обнаруженного вчера на плате последовательного интерфейса, но об этом позднее).

С USB-подключением у меня что-то не заладилось и я остановился на Ethernet-овском подключении патч-кордом, соединив сетевую карточку своего ноутбука и ADSL-модем.
Настраиваем сетевое соединение.
Я прописал себе:
IP-адрес: 192.168.1.4
маска: 255.255.255.0

Если модем, у которого должен быть IP-адрес: 192.168.1.1 не пингуется, то, возможно, у него стоят какие-то другие настройки и их нужно сбросить на дефолтные.

Для этого нужно:
при включённом питании зажать кнопку Reset и подержать секунд 20-30. Затем отпустить и пробовать снова 🙂

ping пошёл 🙂

подключился к модему в браузере по адресу:

http://192.168.1.1

модем спросил пароль и удивительным образом подошёл:
admin
с паролем:
admin
🙂

здесь вызывает интерес только версия прошивки:
ZXDSL 831AIIV1.1.1a_D09_RU

и возможность сохранить конфигурационный файл
backupsettings.conf, представляющий собой xml-ку.

Итак, теперь пробуем просканировать порты девайса.
для этого используем сетевой сканер nmap:

c:\utils\nmap>nmap.exe -v 192.168.1.1

Starting Nmap 4.20 ( http://insecure.org ) at 2011-01-02 16:06 Московское время (зима)
Initiating ARP Ping Scan at 01:06
Scanning 192.168.1.1 [1 port]
Completed ARP Ping Scan at 01:06, 0.23s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 01:06
Scanning 192.168.1.1 [1697 ports]
Discovered open port 80/tcp on 192.168.1.1
Discovered open port 21/tcp on 192.168.1.1
Discovered open port 23/tcp on 192.168.1.1
Completed SYN Stealth Scan at 01:06, 0.39s elapsed (1697 total ports)
Host 192.168.1.1 appears to be up ... good.
Interesting ports on 192.168.1.1:
Not shown: 1694 closed ports
PORT   STATE SERVICE
21/tcp open  ftp
23/tcp open  telnet
80/tcp open  http
MAC Address: 00:D0:D0:86:86:B5 (Zhongxing Telecom)

Nmap finished: 1 IP address (1 host up) scanned in 0.750 seconds
               Raw packets sent: 1698 (74.710KB) | Rcvd: 1698 (78.104KB)

Отлично, как и ожидалось, кроме 80 порта, отвечающего за web-интерфейс, открыт и 23-й — telnet, а в добавок и 21-й — ftp-ник 🙂

пробуем подключиться к телнету.
Для подключения воспользуюсь замечательной терминальной программой teraterm:

                        =======================
                        Welcome to ZXDSL 831AII
                        =======================
Login: admin
Password:
>
> ?

?
help
logout
reboot
adsl
atm
brctl
cat
df
dumpcfg
echo
ifconfig
kill
arp
defaultgateway
dhcpserver
dns
lan
passwd
ppp
remoteaccess
restoredefault
route
save
swversion
wan
ping
ps
pwd
sntp
sysinfo
tftp

это список доступных команд оболочки. Начинаем собирать информацию:

> sysinfo
Number of processes: 23
 12:17am  up 17 min,
load average: 1 min:0.00, 5 min:0.03, 15 min:0.03
              total         used         free       shared      buffers
  Mem:         6068         5680          388            0          224
 Swap:            0            0            0
Total:         6068         5680          388

 > swversion show
ZXDSL 831AIIV1.1.1a_D09_RU

ага, есть команда ps (process status) — которая должна показывать список запущенных процессов

> ps
  PID  Uid     VmSize Stat Command
    1 admin       240 S   init
    2 admin           SWN [ksoftirqd/0]
    3 admin           SW< [events/0]
    4 admin           SW< [khelper]
    5 admin           SW< [kblockd/0]
    6 admin           SW  [pdflush]
    7 admin           SW  [pdflush]
    8 admin           SW  [kswapd0]
    9 admin           SW< [aio/0]
   10 admin           SW  [mtdblockd]
   16 admin       132 S   /bin/pollreset
   18 admin       284 S   -sh
   37 admin       628 S   cfm
   75 admin       188 S   pvc2684d
  286 admin       224 S   klogd
  288 admin       264 S   syslogd -C -l 7
  292 admin       632 R   telnetd
  296 admin       200 S   bftpd
  300 admin       872 S   httpd
  304 admin       184 S   tftpd
 1295 admin       648 R   telnetd
 1298 admin       256 R   sh -c ps
 1299 admin       244 R   ps

сработало 🙂
видим, что висит шелл sh, демоны телнета, фтп и веба:
telnetd, tftpd, httpd

а ещё похоже, что эта оболочка просто перенаправляет некоторые команды шеллу sh

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

> sh


BusyBox v1.00 (2005.12.26-01:55+0000) Built-in shell (msh)
Enter 'help' for a list of built-in commands.

#

ну ваще красота 🙂 BusyBox - очень распространённая утилита для встраиваемых систем (заменяет собой набор стандартных UNIX-вых утилит)

в данном случае - довольно урезаный вариант - нет даже команды вывода содержимого каталога - ls
но есть небольшой трюк, как это можно обойти - попробуйте вызвать echo *

# echo *
bin dev etc lib linuxrc mnt proc sbin usr var webs

мало-мало работает 🙂

# busybox
BusyBox v1.00 (2005.12.26-01:55+0000) multi-call binary

Usage: busybox [function] [arguments]...
   or: [function] [arguments]...

        BusyBox is a multi-call binary that combines many common Unix
        utilities into a single executable.  Most people will create a
        link to busybox for each function they wish to use, and BusyBox
        will act like whatever it was invoked as.

Currently defined functions:
        [, busybox, cat, df, dmesg, echo, expr, false, ifconfig, init,
        insmod, kill, klogd, linuxrc, logger, logread, mkdir, mount, msh,
        ping, ps, pwd, reboot, rm, rmmod, route, sendarp, sh, sysinfo,
        syslogd, test, tftp, tftpd, true, tty, vconfig

узнаем текущее местонахождение

# pwd
/
#

попробуем просмотреть информацию о системе

# cat /proc/
cat: Read error: Is a directory
#

угу - директория есть, а теперь посмотрим файлы

узнаём версию ядра

# cat /proc/version
Linux version 2.6.8.1 ([email protected]) (gcc version 3.4.2) #15 Mon F
eb 13 15:40:53 CST 2006

далее, получаем информации об архитектуре:

# cat /proc/cpuinfo
system type             : 96338L-2M-8M
processor               : 0
cpu model               : BCM6338 V1.0
BogoMIPS                : 238.38
wait instruction        : no
microsecond timers      : yes
tlb_entries             : 32
extra interrupt vector  : yes
hardware watchpoint     : no
VCED exceptions         : not available
VCEI exceptions         : not available

воот он наш героический процессор 🙂

посмотрим информацию о памяти:

# cat /proc/mounts
rootfs / rootfs rw 0 0
/dev/root / squashfs ro 0 0
/proc /proc proc rw,nodiratime 0 0
tmpfs /var tmpfs rw 0 0

# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00150000 00010000 "Physically mapped flash"

# cat /proc/meminfo
MemTotal:         6068 kB
MemFree:           468 kB
Buffers:           212 kB
Cached:           1680 kB
SwapCached:          0 kB
Active:           1860 kB
Inactive:          840 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:         6068 kB
LowFree:           468 kB
SwapTotal:           0 kB
SwapFree:            0 kB
Dirty:               0 kB
Writeback:           0 kB
Mapped:           1692 kB
Slab:             1996 kB
Committed_AS:     2888 kB
PageTables:        240 kB
VmallocTotal:  1048560 kB
VmallocUsed:       308 kB
VmallocChunk:  1048092 kB

как видим, доступны всего 6 мегабайт памяти из которых свободно всего 468 килобайт - негусто 🙂

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

# cat /proc/modules
bcm_usb 15792 0 - Live 0xc001c000
bcm_enet 18224 0 - Live 0xc0031000
bcmprocfs 13360 0 - Live 0xc000f000
adsldd 112992 0 - Live 0xc0058000
blaadd 5808 0 - Live 0xc000c000
atmapi 56880 2 adsldd,blaadd, Live 0xc0022000

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

Выгрузить ненужные модули можно с помощью утилиты rmmod из оболочки BusyBox

системный профайл:

# cat /etc/profile
# /etc/profile: system-wide .profile file for the Bourne shells

PATH=/bin:/sbin:/usr/bin
KERNELVER=2.6.8.1
export PATH
echo
firsttime=`echo /var/udhcpd/udhcpd.lease*`
if [ "$firsttime" = "/var/udhcpd/udhcpd.lease*" ]; then
 echo "Loading drivers and kernel modules... "
 echo
# no-op
# create directory in /var mounted for TMPFS
 mkdir -p /var/log /var/run /var/state/dhcp /var/ppp /var/udhcpd /var/zebra /var
/siproxd
 echo > /var/udhcpd/udhcpd.leases
 ifconfig lo 127.0.0.1 netmask 255.0.0.0 broadcast 127.255.255.255 up
# /etc/modules_install /lib/modules/$KERNELVER/extra
 insmod /lib/modules/$KERNELVER/extra/atmapi.ko
 insmod /lib/modules/$KERNELVER/extra/blaadd.ko
 insmod /lib/modules/$KERNELVER/extra/adsldd.ko
 insmod /lib/modules/$KERNELVER/extra/bcmprocfs.ko
 insmod /lib/modules/$KERNELVER/extra/bcm_enet.ko
 test -e /lib/modules/$KERNELVER/extra/bcm_usb.ko && insmod /lib/modules/$KERNEL
VER/extra/bcm_usb.ko
 test -e /lib/modules/$KERNELVER/extra/wl.ko && insmod /lib/modules/$KERNELVER/e
xtra/wl.ko
 test -e /lib/modules/$KERNELVER/extra/endpointdd.ko && insmod /lib/modules/$KER
NELVER/extra/endpointdd.ko
 cfm
 echo "Done"
fi

ну, блин, круто - реально скрипт для Bourne shell :))

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

# cat /proc/devices
Character devices:
  1 mem
  2 pty
  3 ttyp
  4 ttyS
  5 /dev/tty
  5 /dev/console
 10 misc
108 ppp
205 atmapi
206 bcrmboard
208 adsl
212 bcm

Block devices:
 31 mtdblock

попробуем вывести сообщение в консоль

# echo 1 > /dev/tty
1
#

получилось :))

Информация о прерываниях IRQ:

# cat /proc/interrupts
           CPU0
  7:     424900            MIPS  timer
 10:          0            MIPS  brcm_10
 12:          0            MIPS  brcm_12
 13:       8660            MIPS  brcm_13
 14:          0            MIPS  brcm_14
 15:          0            MIPS  brcm_15
 17:          0            MIPS  brcm_17
 19:          0            MIPS  brcm_19
 21:          0            MIPS  brcm_21
 23:       2827            MIPS  brcm_23

ERR:          0

Информация о средней загруженности процессора:

# cat /proc/loadavg
0.00 0.00 0.00 3/24 1345

Утилита disk free - df показывает сколько свободного места на диске, вернее его отсутствие:

# df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/mtdblock0            1344      1344         0 100% /
tmpfs                      192        64       128  33% /var

Все файловые системы, которые поддерживает ядро:

# cat /proc/filesystems
nodev   rootfs
nodev   bdev
nodev   proc
nodev   sockfs
nodev   tmpfs
nodev   pipefs
        squashfs
nodev   ramfs

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

# cat /proc/partitions
major minor  #blocks  name

  31     0       1344 mtdblock0

Список пользователей в системе:

# cat /etc/passwd
admin:cNM8IkEtZnE92:0:0:Administrator:/:/bin/sh
support:CLPPm8g3IYhuU:0:0:Technical Support:/:/bin/sh
user:byfQH3.mjtDDc:0:0:Normal User:/:/bin/sh
nobody:RM4.EMXm4X0.g:0:0:nobody for ftp:/:/bin/sh

Список групп пользователей:

# cat /etc/group
root::0:root,admin,support,user

кажется почти всё 🙂 не знаю как Вас, а мне это нравится 🙂 стоит махонькая коробочка - тихонько себе работает или валяется в коробке, а в ней-то живёт пингвинёнок Linux 🙂
кррасота 🙂

/dev/random отыскать не удалось 🙂

# cat /dev/random
cat: /dev/random: No such file or directory

а вот /dev/null уже есть :))

# cat /dev/null

и /dev/zero есть (выход по Ctrl-C 😉

# cat /dev/zero

попробуем пингануть свой ПК:

# ping 192.168.1.4
PING 192.168.1.4 (192.168.1.4): 56 data bytes
56 bytes from 192.168.1.4: icmp_seq=0 ttl=128 time=5.0 ms
56 bytes from 192.168.1.4: icmp_seq=1 ttl=128 time=0.0 ms
56 bytes from 192.168.1.4: icmp_seq=2 ttl=128 time=0.0 ms

--- 192.168.1.4 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.0/1.6/5.0 ms

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

# ifconfig
br0             Link encap:Ethernet  HWaddr 00:D0:D0:86:86:B5
                inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
                UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                RX packets:10187 errors:0 dropped:0 overruns:0 frame:0
                TX packets:11629 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:0
                RX bytes:597888 (583.8 KiB)  TX bytes:5710147 (5.4 MiB)

br1             Link encap:Ethernet  HWaddr 00:D0:D0:86:86:B6
                inet addr:192.168.100.1  Bcast:192.168.100.255  Mask:255.255.255
.0
                UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:0
                RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth0            Link encap:Ethernet  HWaddr 00:D0:D0:86:86:B5
                UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                RX packets:10187 errors:0 dropped:0 overruns:0 frame:0
                TX packets:11629 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:1000
                RX bytes:781254 (762.9 KiB)  TX bytes:5793952 (5.5 MiB)
                Interrupt:23 Base address:0x2800

lo              Link encap:Local Loopback
                inet addr:127.0.0.1  Mask:255.0.0.0
                UP LOOPBACK RUNNING  MTU:16436  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:0
                RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

nas_1_50        Link encap:Ethernet  HWaddr 00:D0:D0:86:86:B8
                UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:11 errors:0 dropped:11 overruns:0 carrier:0
                collisions:0 txqueuelen:1000
                RX bytes:0 (0.0 B)  TX bytes:1052 (1.0 KiB)

nas_1_91        Link encap:Ethernet  HWaddr 00:D0:D0:86:86:B9
                UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:367 errors:0 dropped:367 overruns:0 carrier:0
                collisions:0 txqueuelen:1000
                RX bytes:0 (0.0 B)  TX bytes:44644 (43.5 KiB)

nas_1_92        Link encap:Ethernet  HWaddr 00:D0:D0:86:86:BA
                UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:367 errors:0 dropped:367 overruns:0 carrier:0
                collisions:0 txqueuelen:1000
                RX bytes:0 (0.0 B)  TX bytes:44926 (43.8 KiB)
				
# logread
Jan  1 00:44:41 (none) syslog.emerg BCM96345  started: BusyBox v1.00 (2005.12.26
-01:55+0000)  98
Jan  1 00:44:41 (none) user.debug syslog: klogd &  55
Jan  1 00:44:41 (none) user.notice kernel: klogd started: BusyBox v1.00 (2005.12
.26-01:55+0000) 101
Jan  1 00:44:41 (none) user.debug syslog: ebtables -P FORWARD ACCEPT  74
Jan  1 00:44:42 (none) user.debug syslog: bftpd  53
Jan  1 00:44:42 (none) user.debug syslog: bftpd  53
Jan  1 00:44:43 (none) user.debug syslog: tftpd  53
Jan  1 00:44:44 (none) user.debug syslog: tftpd  53

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

# mkdir 1

mkdir: Cannot create directory `1': Read-only file system

хм... а что если выгрузить какой-нибудь модуль?

# rmmod adsldd

и сразу же отвалился от модема 🙂 перезагружаем модем 🙂

Попробуем залить другую прошивку в модем

я отыскал вот такую версию:
ZXDSL_831AIIV4.1.0a_E09_RU.zip

опять подключаемся через telnet:

> tftp
BusyBox v1.00 (2005.12.26-01:55+0000) multi-call binary

Usage: tftp [OPTION]... tftp_server_ip

Update firmware image and configuration data from OR backup configuration
data to a tftp server.

Options:
-g      Get file. (Update image/configuration data)
-p      Put file. (backup configuration data)
-f      remote file name.
-t      i for image and c for configuration data.

запустим на ПК tftp-сервер (Tftpd32), положим в его директорию файл прошивки под названием
zxdsl.bin

TFTP (англ. Trivial File Transfer Protocol — простой протокол передачи файлов) используется, главным образом, для первоначальной загрузки бездисковых рабочих станций. TFTP, в отличие от FTP, не содержит возможностей аутентификации (хотя возможна фильтрация по IP-адресу) и основан на транспортном протоколе UDP.
Основное назначение TFTP — обеспечение простоты реализации клиента. В этой связи, он используется для загрузки бездисковых рабочих станций, загрузки обновлений и конфигураций в «умные» сетевые устройства, записи статистики с мини-АТС и аппаратных маршрутизаторов/файрволов.

Поскольку протокол не поддерживает аутентификации, единственный метод идентификации клиента — это его сетевой адрес (который может быть подделан).

Tftpd32 - сервер TFTP с открытным исходным кодом для Windows

выполним на модеме команду загрузки файла прошивки с нашего сервера

> tftp -g 192.168.1.4 -f zxdsl.bin -ti
kill process [pid: 296] [name: bftpd]...
kill process [pid: 320] [name: bftpd]...
kill process [pid: 304] [name: tftpd]...
kill process [pid: 286] [name: klogd]...
kill process [pid: 288] [name: syslogd]...
iptables v1.2.11: can't initialize iptables table `nat': iptables who? (do you n
eed to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

Remaining modules:
bcm_usb 15792 0 - Live 0xc001c000
bcm_enet 18224 0 - Live 0xc0031000
bcmprocfs 13360 0 - Live 0xc000f000
adsldd 112992 0 - Live 0xc0058000
blaadd 5808 0 - Live 0xc000c000
atmapi 56880 2 adsldd,blaadd, Live 0xc0022000

Memory info:
Number of processes: 25
 12:09am  up 9 min,
load average: 1 min:0.00, 5 min:0.00, 15 min:0.00
              total         used         free       shared      buffers
  Mem:         6068         5060         1008            0          244
 Swap:            0            0            0
Total:         6068         5060         1008
Done removing processes
Allocating 1889030 bytes for broadcom image.
Memory allocated
Total image size: 1889022
Broadcom format verified.
Tftp image done.

Flashing CFE...
Flashing root file system and kernel...

как видим, прошивка сразу прошивается и модем перезагружается.
Снова подключаемся по телнету и нас уже встречает другое приглашение:

                ===========================
                  Welcome to ZXDSL  831AII
                ===========================

ZTE Inc., Software Release ZXDSL 831AIIV4.1.0a_E09_RU

Login name: admin
Password:
>

перейдём в BusyBox и посмотрим что изменилось

> sh

BusyBox v1.00 (2008.01.31-12:18+0000) Built-in shell (msh)
Enter 'help' for a list of built-in commands.

ядро

# cat /proc/version
Linux version 2.6.8.1 (root@Mr-zhang) (gcc version 3.4.2) #1 Thu Jan 31 20:16:30
 CST 2008
 
# cat /proc/cpuinfo
system type             : 96338L-2M-8M
processor               : 0
cpu model               : BCM6338 V1.0
BogoMIPS                : 239.20
wait instruction        : no
microsecond timers      : yes
tlb_entries             : 32
extra interrupt vector  : yes
hardware watchpoint     : no
unaligned access                : 10357
VCED exceptions         : not available
VCEI exceptions         : not available

# df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/mtdblock0            1280      1280         0 100% /
tmpfs                      320        72       248  23% /var


# cat /proc/mounts
rootfs / rootfs rw 0 0
/dev/root / squashfs ro 0 0
/proc /proc proc rw,nodiratime 0 0
tmpfs /var tmpfs rw 0 0

# cat /proc/meminfo
MemTotal:         5888 kB
MemFree:           452 kB
Buffers:           264 kB
Cached:           1556 kB
SwapCached:          0 kB
Active:           1784 kB
Inactive:          744 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:         5888 kB
LowFree:           452 kB
SwapTotal:           0 kB
SwapFree:            0 kB
Dirty:               0 kB
Writeback:           0 kB
Mapped:           1672 kB
Slab:             1948 kB
Committed_AS:     2716 kB
PageTables:        208 kB
VmallocTotal:  1048560 kB
VmallocUsed:       784 kB
VmallocChunk:  1047748 kB

# busybox
BusyBox v1.00 (2008.01.31-12:18+0000) multi-call binary

Usage: busybox [function] [arguments]...
   or: [function] [arguments]...

        BusyBox is a multi-call binary that combines many common Unix
        utilities into a single executable.  Most people will create a
        link to busybox for each function they wish to use, and BusyBox
        will act like whatever it was invoked as.

Currently defined functions:
        [, busybox, cat, chmod, date, df, dmesg, echo, expr, false, ftpget,
        ifconfig, init, insmod, kill, klogd, linuxrc, ln, logger, logread,
        ls, mkdir, mount, msh, ping, ps, pwd, reboot, rm, rmmod, route,
        sendarp, sh, sysinfo, syslogd, test, tftp, tftpd, true, tty, vconfig

сам чуть не пропустил 🙂 в busybox-то появилась утилита для просмотра директорий ls!

# pwd
/
# ls -l
drwxrwxrwt   12 0        0             440 var
dr-xr-xr-x   33 0        0               0 proc
drwxr-xr-x    1 0        0               0 mnt
drwxr-xr-x    1 0        0             468 dev
drwxr-xr-x    1 0        0            2094 webs
drwxr-xr-x    1 0        0              10 usr
drwxr-xr-x    1 0        0             103 sbin
lrwxrwxrwx    1 0        0              11 linuxrc -> bin/busybox
drwxr-xr-x    1 0        0             126 lib
drwxr-xr-x    1 0        0             366 bin
drwxr-xr-x    1 0        0             281 etc

# cd sbin
# ls -l
lrwxrwxrwx    1 0        0              14 vconfig -> ../bin/busybox
lrwxrwxrwx    1 0        0              14 syslogd -> ../bin/busybox
lrwxrwxrwx    1 0        0              14 route -> ../bin/busybox
lrwxrwxrwx    1 0        0              14 rmmod -> ../bin/busybox
lrwxrwxrwx    1 0        0              14 reboot -> ../bin/busybox
lrwxrwxrwx    1 0        0              14 logread -> ../bin/busybox
lrwxrwxrwx    1 0        0              14 klogd -> ../bin/busybox
lrwxrwxrwx    1 0        0              14 insmod -> ../bin/busybox
lrwxrwxrwx    1 0        0              14 init -> ../bin/busybox
lrwxrwxrwx    1 0        0              14 ifconfig -> ../bin/busybox
lrwxrwxrwx    1 0        0              13 ethctl -> ../bin/ethctl

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

# cd /lib
# ls -l
drwxr-xr-x    1 0        0              14 modules
-rwxr-xr-x    1 0        0           20999 ld-uClibc.so.0
-rwxr-xr-x    1 0        0             725 libutil.so.0
-rwxr-xr-x    1 0        0            7016 libm.so.0
-rwxr-xr-x    1 0        0            7272 libdl.so.0
-rwxr-xr-x    1 0        0          186772 libc.so.0
-rwxr-xr-x    1 0        0           10548 libcrypt.so.0
-rwxr-xr-x    1 0        0          140624 libpsixml.so
-rwxr-xr-x    1 0        0          190640 libpsi.so

видим uClibc - замена стандартной библиотеки, специально для встраиваемых систем.

# cd etc
# ls -l
lrwxrwxrwx    1 0        0              18 psk.txt -> /var/ipsec/psk.txt
lrwxrwxrwx    1 0        0              22 racoon.conf -> /var/ipsec/racoon.conf
lrwxrwxrwx    1 0        0              21 ipsec.conf -> /var/ipsec/ipsec.conf
lrwxrwxrwx    1 0        0              25 udhcpd.leases -> /var/udhcpd/udhcpd.l
eases
lrwxrwxrwx    1 0        0              23 udhcpd.conf -> /var/udhcpd/udhcpd.con
f
lrwxrwxrwx    1 0        0              20 gateway.conf -> /var/fyi/sys/gateway
lrwxrwxrwx    1 0        0              16 resolv.conf -> /var/fyi/sys/dns
lrwxrwxrwx    1 0        0              15 pppmsg -> /var/ppp/pppmsg
lrwxrwxrwx    1 0        0              10 group -> /var/group
lrwxrwxrwx    1 0        0              11 passwd -> /var/passwd
lrwxrwxrwx    1 0        0              11 sysmsg -> /var/sysmsg
-rwxr--r--    1 0        0            1770 defaultpvc
-rwxr-xr-x    1 0        0            4834 default.cfg
drwxr-xr-x    1 0        0              19 adsl
-rw-r--r--    1 0        0            1317 ethertypes
-rwxr-xr-x    1 0        0             180 modules_install
-rwxr-xr-x    1 0        0             101 inittab
-rwxr-xr-x    1 0        0             486 inetd.conf
-rwxr-xr-x    1 0        0            5647 services
-rwxr-xr-x    1 0        0            1942 profile
-rwxr-xr-x    1 0        0              94 fstab
drwxr-xr-x    1 0        0              19 dhcp
drwxr-xr-x    1 0        0               0 snmp
drwxr-xr-x    1 0        0              10 init.d
drwxr-xr-x    1 0        0              61 ppp

# cat inittab
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r

посмотрим скрипт инициализации 🙂

# cd init.d
# ls -l
-rwxr-xr-x    1 0        0              92 rcS
# cat rcS
#! /bin/sh

PATH=/sbin:/bin
export PATH

mount -t proc proc /proc
/bin/mount -a


# cat inetd.conf
echo    stream  tcp     nowait  root    internal
echo    dgram   udp     wait    root    internal
discard stream  tcp     nowait  root    internal
discard dgram   udp     wait    root    internal
daytime stream  tcp     nowait  root    internal
daytime dgram   udp     wait    root    internal
chargen stream  tcp     nowait  root    internal
chargen dgram   udp     wait    root    internal
time    stream  tcp     nowait  root    internal
time    dgram   udp     wait    root    internal
ftp     stream  tcp     nowait  root    /bin/ftpd ftpd
telnet  stream  tcp     nowait  root    /bin/telnetd telnetd -L /bin/login

# cd proc
# ls -l
dr-xr-xr-x    3 0        0               0 877
dr-xr-xr-x    3 0        0               0 839
dr-xr-xr-x    3 0        0               0 838
dr-xr-xr-x    3 0        0               0 837
dr-xr-xr-x    3 0        0               0 836
dr-xr-xr-x    3 0        0               0 434
dr-xr-xr-x    3 0        0               0 419
dr-xr-xr-x    3 0        0               0 415
dr-xr-xr-x    3 0        0               0 201
dr-xr-xr-x    3 0        0               0 43
dr-xr-xr-x    3 0        0               0 17
dr-xr-xr-x    3 0        0               0 10
dr-xr-xr-x    3 0        0               0 9
dr-xr-xr-x    3 0        0               0 8
dr-xr-xr-x    3 0        0               0 7
dr-xr-xr-x    3 0        0               0 6
dr-xr-xr-x    3 0        0               0 5
dr-xr-xr-x    3 0        0               0 4
dr-xr-xr-x    3 0        0               0 3
dr-xr-xr-x    3 0        0               0 2
dr-xr-xr-x    3 0        0               0 1
lrwxrwxrwx    1 0        0              64 self -> 877
-r--r--r--    1 0        0               0 loadavg
-r--r--r--    1 0        0               0 uptime
-r--r--r--    1 0        0               0 meminfo
-r--r--r--    1 0        0               0 version
-r--r--r--    1 0        0               0 devices
-r--r--r--    1 0        0               0 filesystems
-r--r--r--    1 0        0               0 cmdline
-r--r--r--    1 0        0               0 locks
-r--r--r--    1 0        0               0 execdomains
lrwxrwxrwx    1 0        0              11 mounts -> self/mounts
-r--------    1 0        0               0 kmsg
-r--r--r--    1 0        0               0 cpuinfo
-r--r--r--    1 0        0               0 partitions
-r--r--r--    1 0        0               0 stat
-r--r--r--    1 0        0               0 interrupts
-rw-r--r--    1 0        0               0 slabinfo
-r--r--r--    1 0        0               0 buddyinfo
-r--r--r--    1 0        0               0 vmstat
-r--r--r--    1 0        0               0 diskstats
-r--r--r--    1 0        0               0 modules
-r--------    1 0        0         7999488 kcore
dr-xr-xr-x    4 0        0               0 net
dr-xr-xr-x    2 0        0               0 sysvipc
dr-xr-xr-x   10 0        0               0 sys
dr-xr-xr-x    3 0        0               0 fs
dr-xr-xr-x    2 0        0               0 driver
dr-xr-xr-x    4 0        0               0 tty
dr-xr-xr-x    2 0        0               0 bus
dr-xr-xr-x  130 0        0               0 irq
-r--r--r--    1 0        0               0 misc
-r--r--r--    1 0        0               0 ioports
-r--r--r--    1 0        0               0 iomem
-r--r--r--    1 0        0               0 mtd
dr-xr-xr-x    2 0        0               0 nvram
dr-xr-xr-x    3 0        0               0 var

# cat iomem
00000000-0079ffff : System RAM
  00010000-0017790b : Kernel code
  0017790c-001ab0bf : Kernel data

# cat /proc/devices
Character devices:
  1 mem
  2 pty
  3 ttyp
  4 ttyS
  5 /dev/tty
  5 /dev/console
 10 misc
108 ppp
205 atmapi
206 bcrmboard
208 adsl
212 bcm

Block devices:
 31 mtdblock
 
# cat /proc/cmdline
root=31:0 ro noinitrd console=ttyS0,115200

# cat /proc/tty/drivers
/dev/tty             /dev/tty        5       0 system:/dev/tty
/dev/console         /dev/console    5       1 system:console
bcmserial            /dev/ttyS       4      64 serial
pty_slave            /dev/ttyp       3     0-1 pty:slave
pty_master           /dev/pty        2     0-1 pty:master

# cat /proc/tty/driver/bcmserial
serinfo:1.0 driver revision:
0: uart:BCM63XX mmio:0xFFFE0300 irq:10 tx:40602 rx:662 RTS|DTR

# cat /proc/modules
ipt_state 544 1 - Live 0xc00c9000
ipt_multiport 672 0 - Live 0xc00c7000
ipt_mark 416 0 - Live 0xc00c5000
ipt_limit 896 0 - Live 0xc00c3000
ipt_connlimit 1696 0 - Live 0xc00c1000
ipt_TCPMSS 2304 0 - Live 0xc00ba000
ipt_REDIRECT 768 0 - Live 0xc00bc000
ipt_MASQUERADE 3280 0 - Live 0xc007f000
ipt_MARK 704 0 - Live 0xc00b8000
ipt_FTOS 992 0 - Live 0xc0081000
ip_nat_rtsp 4816 0 - Live 0xc00b5000
ip_nat_irc 2304 0 - Live 0xc00b3000
ip_nat_ftp 2976 0 - Live 0xc005d000
ip_conntrack_irc 68896 1 ip_nat_irc, Live 0xc00a1000
ip_conntrack_ftp 20608 1 ip_nat_ftp, Live 0xc009a000
ipt_RDNS 1152 1 - Live 0xc007d000
ipt_dns 640 1 - Live 0xc005f000
ip_nat_ipsec 46720 0 - Live 0xc008d000
ip_conntrack_ipsec 30640 0 - Live 0xc0074000
ip_nat_h323 5056 0 - Live 0xc0044000
ip_conntrack_h323 35280 1 ip_nat_h323, Live 0xc0083000
ip_conntrack_rtsp 73024 1 ip_nat_rtsp, Live 0xc0061000
ip_nat_pptp 2048 0 - Live 0xc005b000
ip_conntrack_pptp 3312 0 - Live 0xc0059000
ip_nat_gre 1280 0 - Live 0xc0057000
ip_conntrack_gre 2064 2 ip_nat_pptp,ip_conntrack_pptp, Live 0xc0055000
iptable_mangle 960 1 - Live 0xc0042000
iptable_nat 15632 10 ipt_REDIRECT,ipt_MASQUERADE,ip_nat_rtsp,ip_nat_irc,ip_nat_f
tp,ip_nat_ipsec,ip_nat_h323,ip_nat_pptp,ip_nat_gre, Live 0xc0050000
ip_conntrack 29984 18 ipt_state,ipt_connlimit,ipt_REDIRECT,ipt_MASQUERADE,ip_nat
_rtsp,ip_nat_irc,ip_nat_ftp,ip_conntrack_irc,ip_conntrack_ftp,ip_nat_ipsec,ip_co
nntrack_ipsec,ip_nat_h323,ip_conntrack_h323,ip_conntrack_rtsp,ip_nat_pptp,ip_con
ntrack_pptp,ip_conntrack_gre,iptable_nat, Live 0xc0047000
iptable_filter 928 1 - Live 0xc0037000
ip_tables 14144 15 ipt_state,ipt_multiport,ipt_mark,ipt_limit,ipt_connlimit,ipt_
TCPMSS,ipt_REDIRECT,ipt_MASQUERADE,ipt_MARK,ipt_FTOS,ipt_RDNS,ipt_dns,iptable_ma
ngle,iptable_nat,iptable_filter, Live 0xc0026000
bcm_usb 15984 0 - Live 0xc0008000
bcm_enet 25312 0 - Live 0xc002c000
br2684 66016 0 - Live 0xc000e000


# cd dev
# ls -l
brw-r-----    1 0        0          8,  18 sdb2
brw-r-----    1 0        0          8,  17 sdb1
brw-r-----    1 0        0          8,  16 sdb0
brw-r-----    1 0        0          8,   2 sda2
brw-r-----    1 0        0          8,   1 sda1
brw-r-----    1 0        0          8,   0 sda0
brw-r-----    1 0        0         31,   7 mtdblock7
brw-r-----    1 0        0         31,   6 mtdblock6
brw-r-----    1 0        0         31,   5 mtdblock5
brw-r-----    1 0        0         31,   4 mtdblock4
brw-r-----    1 0        0         31,   3 mtdblock3
brw-r-----    1 0        0         31,   2 mtdblock2
brw-r-----    1 0        0         31,   1 mtdblock1
brw-r-----    1 0        0         31,   0 mtdblock0
brw-r-----    1 0        0          1,   3 ram3
brw-r-----    1 0        0          1,   2 ram2
brw-r-----    1 0        0          1,   1 ram1
brw-r-----    1 0        0          1,   0 ram0
crw-r-----    1 0        0        226,   0 bcmatmb0
crw-r-----    1 0        0        225,   0 si3215
crw-r-----    1 0        0        224,   0 bcmprof
crw-r-----    1 0        0        223,   0 slac
crw-r-----    1 0        0        222,   0 ac97
crw-r-----    1 0        0        212,   0 bcm
crw-r-----    1 0        0        211,   0 bcmles0
crw-r-----    1 0        0        210,   0 bcmaal20
crw-r-----    1 0        0        209,   0 bcmendpoint0
crw-r-----    1 0        0        208,   0 bcmadsl0
crw-r-----    1 0        0        207,   0 bcmvdsl0
crw-r-----    1 0        0        206,   0 brcmboard
crw-r-----    1 0        0        205,   0 bcmatm0
crw-r-----    1 0        0          1,   9 urandom
crw-r-----    1 0        0        180,   0 printer0
crw-r-----    1 0        0        108,   0 ppp
crw-r-----    1 0        0          5,   2 ptmx
crw-r-----    1 0        0          5,   1 console
crw-r-----    1 0        0          5,   0 tty
crw-r-----    1 0        0          4,  65 ttyS1
crw-r-----    1 0        0          4,  64 ttyS0
crw-r-----    1 0        0          4,   1 tty1
crw-r-----    1 0        0          4,   0 tty0
crw-r-----    1 0        0          3,   1 ttyp1
crw-r-----    1 0        0          3,   0 ttyp0
crw-r-----    1 0        0          2,   1 ptyp1
crw-r-----    1 0        0          2,   0 ptyp0
crw-r-----    1 0        0          1,   5 zero
crw-r-----    1 0        0          1,   4 port
crw-r-----    1 0        0          1,   3 null
crw-r-----    1 0        0          1,   2 kmem
crw-r-----    1 0        0          1,   1 mem
prw-r-----    1 0        0               0 initctl
lrwxrwxrwx    1 0        0              12 log -> /var/log/log
lrwxrwxrwx    1 0        0               4 ram -> ram1

ух ты! urandom появился! :)))

# cd /bin
# ls -l
lrwxrwxrwx    1 0        0               7 true -> busybox
lrwxrwxrwx    1 0        0               7 tftpd -> busybox
lrwxrwxrwx    1 0        0               7 sysinfo -> busybox
lrwxrwxrwx    1 0        0               7 sh -> busybox
lrwxrwxrwx    1 0        0               7 sendarp -> busybox
lrwxrwxrwx    1 0        0               7 rm -> busybox
lrwxrwxrwx    1 0        0               7 pwd -> busybox
lrwxrwxrwx    1 0        0               7 ps -> busybox
lrwxrwxrwx    1 0        0               7 ping -> busybox
lrwxrwxrwx    1 0        0               7 msh -> busybox
lrwxrwxrwx    1 0        0               7 mount -> busybox
lrwxrwxrwx    1 0        0               7 mkdir -> busybox
lrwxrwxrwx    1 0        0               7 ls -> busybox
lrwxrwxrwx    1 0        0               7 ln -> busybox
lrwxrwxrwx    1 0        0               7 kill -> busybox
lrwxrwxrwx    1 0        0               7 false -> busybox
lrwxrwxrwx    1 0        0               7 echo -> busybox
lrwxrwxrwx    1 0        0               7 dmesg -> busybox
lrwxrwxrwx    1 0        0               7 df -> busybox
lrwxrwxrwx    1 0        0               7 date -> busybox
lrwxrwxrwx    1 0        0               7 chmod -> busybox
lrwxrwxrwx    1 0        0               7 cat -> busybox
-rwxr-xr-x    1 0        0          204016 busybox
-rwxr-xr-x    1 0        0           59776 ebtables
-rwxr-xr-x    1 0        0           91204 iptables
lrwxrwxrwx    1 0        0               6 dhcpd -> udhcpd
lrwxrwxrwx    1 0        0               6 dhcpc -> udhcpd
-rwxr-xr-x    1 0        0           48644 udhcpd
-rwxr-xr-x    1 0        0          198904 pppd
-rwxr-xr-x    1 0        0           29416 brctl
-rwxr-xr-x    1 0        0           20836 pvc2684d
-rwxr-xr-x    1 0        0           16820 pvc2684ctl
-rwxr-xr-x    1 0        0           16720 ethctl
-rwxr-xr-x    1 0        0           12880 sntp
-rwxr-xr-x    1 0        0            8628 dhcpr
-rwxr-xr-x    1 0        0           58476 igmp
-rwxr-xr-x    1 0        0           12620 dnsprobe
-rwxr-xr-x    1 0        0           30648 netctl
lrwxrwxrwx    1 0        0               7 adsl -> adslctl
-rwxr-xr-x    1 0        0           29856 adslctl
lrwxrwxrwx    1 0        0               6 setmem -> atmctl
lrwxrwxrwx    1 0        0               6 dumpmem -> atmctl
lrwxrwxrwx    1 0        0               6 atm -> atmctl
-rwxr-xr-x    1 0        0           38388 atmctl
-rwxr-xr-x    1 0        0          150100 upnp
-rwxr-xr-x    1 0        0         1065420 cfm

как видим, все стандартные утилиты, на самом деле - линки на busybox
ничего себе - тут даже iptables есть О_о

вроде всё 🙂 в диретории /webs просто лежит куча html и gif-фалов web-морды 🙂

# cd webs
# ls
stylemain.css                  resetrouter.html
colors.css                     rebootinfo.html
warn_box_top.gif               quicksetuperr.html
warn_box_bottom.gif            qosqueueadd.html
warn_bg.gif                    qosqmgmt.html
tick_small.gif                 qoscls.html
spacer_two.gif                 qosclsedit.html
spacer_tran.gif                pvccfg.html
spacer_one.gif                 pvccfgerr.html
sep_top.gif                    psilan.html
sep_top2.gif                   psierror.html
right.gif                      psidhcp.html
problem_small.gif              pppoe.html
nav_status.gif                 pppautherr.html
nav_start.gif                  portmapedit.html
nav_mgt.gif                    portmapadd.html
nav_diag.gif                   ntwksum2.html
nav_adv.gif                    ntwkprtcl.html
modify.gif                     menu_status.html
gn_logo.gif                    menu_quick.html
delete.gif                     menu_mgt.html
connect_top.gif                menu.html
connect_spacer.gif             menu_diag.html
connect_bottom.gif             menu_adv.html
banner_right_top_curve.gif     menu_adv1.html
banner_right_bottom_curve.gif  main.html
banner_left.gif                logo.html
banner_left_curve2.gif         logintro.html
util.js                        logconfig.html
portName.js                    lancfg.html
menuTree.js                    ipoacfg.html
menuTitle.js                   ipfiltermodify.html
menuBcm.js                     ipfilteradd.html
fw_util.js                     info.html
wancfg.html                    index.html
wanadderr.html                 footer.html
vpivci.html                    dnscfg.html
userpasswd.html                disconnect.html
uploadinfo.html                diag_main.html
upload.html                    diag.html
updatesettings.html            dhcpinfo.html
unnumppp.html                  defaultsettings.html
tr69cfg.html                   ddnsadd.html
test_version.html              constatus.html
statswanreset.html             conprocess.html
statsifcreset.html             connoppp.html
statsifc.html                  connect.html
statsadslreset.html            confirm_del.html
statsadsl.html                 confirm_cancel_adsl.html
statsadslerr.html              bindmerr.html
statsadsl1.html                bindexisterr.html
sntpcfg.html                   bindexceederr.html
snmpconfig.html                berstop.html
siproxdcfg.html                berstart.html
scvrtsrv.html                  berrun.html
scprttrg.html                  algcfg.html
scdmz.html                     adslcfg.html
rtdefaultcfgerr.html           adminpasswd.html
routeadd.html                  addbindmac.html
restoreinfo.html               accessremote.html
restorebackup.html             accesslocal.html
restorebackup2.html

Ну как? Крутой девайс? 🙂

читать далее: 0x3 — формат прошивки

Ссылки
http://nmap.org
http://www.ayera.com/teraterm/
http://tftpd32.jounin.net
http://busybox.net
http://www.uclibc.org


0 комментариев на «“Новогоднее исследование ADSL-роутера на базе Linux — 0x2 — знакомимся с программной частью”»

    • чтобы в busybox-е что-то «включить» его нужно пересобирать, так что просто так не получится.

  1. Здравствуйте, скажите, пожалуйста, я хотел бы сделать эмулятор веб-интерфейса этого модема, например как здесь http://www.tp-linkru.com/resources/simulator/TD-8951ND(UN)/rpSys.html? Заходя через telnet в модем, нашел много файлов с расширением ".gсh", в которых содержаться информация о настройках в модеме, исходный код веб-интерфейса этого модема показал, что html страница формируется в связке с html + информация из файлов ".gch" (прекомпилированный файл заголовка C/C++).

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Arduino Bluetooth CraftDuino DIY Google IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение