Posted: Mon May 04, 2009 8:56 Post subject: Serveur d'impression EDIMAX => BCM5354KFBG => DD-WRT ?
Bonjour à tous,
Je débarque dans l'embarqué avec un petit jouet que j'ai eu hier, un serveur d'imprimante de marque edimax. Ce qui est bien au premier abord, c'est la présence d'un port usb2 host, d'un connecteur ethernet et d'une carte wifi.
En ouvrant le boitier, j'y ai découvert les éléments suivants:
-SoC Broadcom BCM5354KFBG
-Flash 29LV160CBTC
Après avoir bidouillé un câble UART avec un FT232BL et un bout de fil, j'ai été en mesure de visualiser les messages de boot de l'appareil, qui tourne déjà sur un noyau Red Hat Linux 2.4.20 :)
Malheureusement, à la fin du boot il demande un user/password que je ne connais pas, donc je peux pas commencer à bidouiller le firmware d'origine :(
Voici les messages de boot, niveau hardware, je crois que c'est pas mal non plus, y'a de quoi bidouiller.
Code:
Decompressing..........done
CFE version 1.0.37 for BCM947XX (32bit,SP,LE)
Build Date: ¤ 11¤ë 30 21:57:42 CST 2007 (root@Hinet)
Copyright (C) 2000,2001,2002,2003 Broadcom Corporation.
Initializing Arena
Initializing Devices.
Boot partition size = 131072(0x20000)
et0: Broadcom BCM47xx 100/100 Mbps Ethernet Controller 4.130.25.0
CPU type 0x29029: 240MHz
Total memory: 32768 KBytes
Total memory used by CFE: 0x80300000 - 0x8039A300 (631552)
Initialized Data: 0x803302C0 - 0x80332890 (9680)
BSS Area: 0x80332890 - 0x80334300 (6768)
Local Heap: 0x80334300 - 0x80398300 (409600)
Stack Area: 0x80398300 - 0x8039A300 (8192)
Text (code) segment: 0x80300000 - 0x803302C0 (197312)
Boot area (physical): 0x0039B000 - 0x003DB000
Relocation Factor: I:00000000 - D:00000000
Device eth0: hwaddr 00-1F-1F-1D-56-59, ipaddr 192.168.2.2, mask 255.255.255.0
gateway not set, nameserver not set
get id=650
Open device flash0.setting success
upgrade flag=0
Loader:raw Filesys:tftp Dev:eth0 File:: Options:(null)
Loading: Failed.
Could not load :: Timeout occured*************
Loader:raw Filesys:raw Dev:flash0.os File: Options:(null)
Loading: ......... 2719744 bytes read
Entry at 0x80001000
Closing network.
Starting program at 0x80001000
CPU revision is: 00029029
Primary instruction cache 16kb, linesize 16 bytes (4 ways)
Primary data cache 16kb, linesize 16 bytes (2 ways)
Linux version 2.4.20 (root@localhost.localdomain) (gcc version 2.96 20000731 (Red Hat Linux 7.3 2.96-110.1)) #708 三 5月 7 15:36:26 CST 2008
Setting the PFC to its default value
Determined physical RAM map:
memory: 02000000 @ 00000000 (usable)
Initial ramdisk at: 0x80198000 (1051380 bytes)
On node 0 totalpages: 8192
zone(0): 8192 pages.
zone(1): 0 pages.
zone(2): 0 pages.
Kernel command line: console=ttyS0,115200
CPU: BCM5354 rev 3 at 240 MHz
Calibrating delay loop... 237.56 BogoMIPS
Memory: 29524k/32768k available (1433k kernel code, 3244k reserved, 1136k data, 68k init, 0k highmem)
Dentry cache hash table entries: 4096 (order: 3, 32768 bytes)
Inode cache hash table entries: 2048 (order: 2, 16384 bytes)
Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes)
Page-cache hash table entries: 8192 (order: 3, 32768 bytes)
Checking for 'wait' instruction... unavailable.
POSIX conformance testing by UNIFIX
PCI: no core
PCI: Fixing up bus 0
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039
Initializing RT netlink socket
Starting kswapd
devfs: v1.12c (20020818) Richard Gooch (rgooch@atnf.csiro.au)
devfs: boot_options: 0x0
squashfs: version 3.1 (2006/08/19) Phillip Lougher
pty: 256 Unix98 ptys configured
Serial driver version 5.05c (2001-07-08) with MANY_PORTS SHARE_IRQ SERIAL_PCI enabled
ttyS00 at 0xb8000300 (irq = 3) is a 16550A
ttyS01 at 0xb8000400 (irq = 0) is a 16550A
RAMDISK driver initialized: 16 RAM disks of 8192K size 1024 blocksize
eth0: Broadcom BCM47xx 100/100 Mbps Ethernet Controller 4.130.25.0
Amd/Fujitsu Extended Query Table v1.0 at 0x0040
number of CFI chips: 1
Flash device: 0x200000 at 0x1c000000
Physically mapped flash: Couldn't find valid ROM disk image
Creating 4 MTD partitions on "Physically mapped flash":
0x00000000-0x00200000 : "boot"
0x00000000-0x001f0000 : "linux"
0x00000000-0x00200000 : "rootfs"
0x001f0000-0x00200000 : "nvram"
ftl_cs: FTL header not found.
ftl_cs: FTL header not found.
ftl_cs: FTL header not found.
ftl_cs: FTL header not found.
usb.c: registered new driver usbdevfs
usb.c: registered new driver hub
ehci_hcd 00:03.1: PCI device 14e4:471a
ehci_hcd 00:03.1: irq 6, pci mem b8003800
usb.c: new USB bus registered, assigned bus number 1
ehci_hcd 00:03.1: illegal capability!
PCI: 00:03.1 PCI cache line size set incorrectly (0 bytes) by BIOS/FW, correcting to 32
ehci_hcd 00:03.1: USB 0.0 enabled, EHCI 1.00, driver 2003-Dec-29/2.4
Manufacturer: Linux 2.4.20 ehci_hcd
Product: PCI device 14e4:471a
SerialNumber: 00:03.1
hub.c: USB hub found
hub.c: 2 ports detected
host/usb-ohci.c: USB OHCI at membase 0xb8003000, IRQ 6
host/usb-ohci.c: usb-00:03.0, PCI device 14e4:471a
usb.c: new USB bus registered, assigned bus number 2
Product: USB OHCI Root Hub
SerialNumber: b8003000
hub.c: USB hub found
hub.c: 2 ports detected
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP, IGMP
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 2048 bind 4096)
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
NET4: Ethernet Bridge 008 for NET4.0
NET4: Linux IPX 0.47 for NET4.0
IPX Portions Copyright (c) 1995 Caldera, Inc.
IPX Portions Copyright (c) 2000, 2001 Conectiva, Inc.
NET4: AppleTalk 0.18a for Linux NET4.0
802.1Q VLAN Support v1.7 Ben Greear <greearb@candelatech.com>
All bugs added by David S. Miller <davem@redhat.com>
RAMDISK: LZMA image found at block 0
RAMDISK: LZMA lc=3,lp=0,pb=2,dictSize=8388608,origSize=4739072
LZMA initrd by Ming-Ching Tiew <mctiew@yahoo.com> .........................................................................
LZMA initrd loaded successfully
Freeing initrd memory: 1026k freed
VFS: Mounted root (squashfs filesystem) readonly.
Freeing unused kernel memory: 68k freed
init started: BusyBox v1.03 (2007.08.23-03:21+0000) multi-call binary
Starting pid 14, console /dev/ttyS0: '/etc/init.d/rcS'
Please press Enter to activate this console. Starting pid 17, console /dev/ttyS0: '/bin/sh'
size: 744 bytes (64792 left)
size: 744 bytes (64792 left)
size: 744 bytes (64792 left)
Using /sbin/wl.o
eth1: Broadcom BCM4318 802.11 Wireless Controller 4.130.28.0
Setup bridge....
device eth0 entered promiscuous mode
device eth1 entered promiscuous mode
Algorithmics/MIPS FPU Emulator v1.5
Setting country code using abbreviation: "GB"
Auto but wired cable connect !
*************** dump_flash.sh start **************
udhcp client started
br0: port 1(eth0) entering learning state
br0: port 1(eth0) entering forwarding state
br0: topology change detected, propagating
BusyBox v1.03 (2007.08.23-03:21+0000) multi-call binary
Usage: ifconfig [-a] <interface> [<address>]
*************** dump_flash.sh end **************
Program started! 4 4
********** start up job schedule ************
Create ThreadLanUrb port0 Running!
Create ThreadUrbProcess port 0 Running!
Create hThreadCheckPendingUrbProcess port 0 Running!
p4 = 0
gateway:192.168.2.254
MF1d5659
threadLanUrb 0, ready for accepting...
init_usb_hotplug 0
--->status = 0
init_occupy_flag 0
Using /sbin/printer.o
usb.c: registered new driver usblp
printer.c: v0.13: USB Printer Device Class driver
usb.c: deregistering driver usblp
First time to create printerstuts!
rm: cannot remove `/tmp/p0_id': No such file or directory
string_id= length=0
Please enter your user name and password!!
Login:
Voilà, si quelqu'un connaissant bien ce firmware et cette puce pouvaient me donner des indications, ça serait sympa, car il doit y avoir moyen de faire beaucoup plus que serveur d'impression avec cette petite chose. D'ailleurs, edimax ne met même pas de firmware pour cette référence de boitier sur son site (référence PS-1208MFG).
D'avance Merci :)
EDIT: Tite photo, désolé pour la qualité, c'est pris avec un portable, c'est juste pour donner un aperçu de la taille du bazar...
Last edited by sebtx on Tue May 12, 2009 7:03; edited 1 time in total
Concernant l'accès root, je me réponds tout seul
En fait y'a un moyen d'injecter des commandes, via l'accès du port série. Quand j'appuie sur le bouton "reset" pendant quelques secondes, le processus init (enfin je pense) envoie la commande d'arrêt comme pour une machine, et là pendant 1 seconde environ on voit un # dans la console :p
Donc je tape mes commandes dans un éditeur de texte, en rajoutant un retour chariot, et je les colle au moment où je vois le # et bingo !
Voilà par exemple le contenu de /etc/passwd, dans lequel on peut voir des users bizarres...
Code:
# cat /etc/passwd
root:x:0:0:root:/root:/bin/tcsh
bin:x:1:1:bin:/bin:
daemon:x:2:2:daemon:/sbin:
adm:x:3:4:adm:/var/adm:
lp:x:4:7:lp:/var/spool/lpd:
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:
news:x:9:13:news:/var/spool/news:
uucp:x:10:14:uucp:/var/spool/uucp:
operator:x:11:0:operator:/root:
games:x:12:100:games:/usr/games:
gopher:x:13:30:gopher:/usr/lib/gopher-data:
ftp:x:14:50:FTP User:/var/ftp:
nobody:x:99:99:Nobody:/:
nscd:x:28:28:NSCD Daemon:/:/bin/false
mailnull:x:47:47::/var/spool/mqueue:/dev/null
ident:x:98:98:pident user:/:/bin/false
rpc:x:32:32:Portmapper RPC user:/:/bin/false
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/bin/false
xfs:x:43:43:X Font Server:/etc/X11/fs:/bin/false
john:x:500:500:John Huang:/home/john:/bin/tcsh
dliu:x:501:501::/home/dliu:/bin/tcsh
odysseus:x:502:502::/home/odysseus:/bin/tcsh
ygtai:x:503:503::/home/ygtai:/bin/tcsh
hcjong:x:504:504::/home/hcjong:/bin/tcsh
rpm:x:37:37::/var/lib/rpm:/bin/bash
ntp:x:38:38::/etc/ntp:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
radvd:x:75:75:radvd user:/:/bin/false
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
apache:x:48:48:Apache:/var/www:/bin/false
squid:x:23:23::/var/spool/squid:/dev/null
named:x:25:25:Named:/var/named:/bin/false
pcap:x:77:77::/var/arpwatch:/bin/nologin
ldap:x:55:55:LDAP User:/var/lib/ldap:/bin/false
Please stand by while rebooting the system.
Restarting system.
Please stand by while rebooting the system...
Decompressing..........done
J'ai volontairement laissé le processus de reboot, pour montrer à quel moment ces commandes s'exécutent. Maintenant plus qu'à trouver le moyen de changer le mot de passe root par défaut pour me logger d'une façon plus aisée sur la machine :p
Comme dit dans la section en Anglais, j'ai flashé/reflashé maintes fois avec des firmwares différents, mais aucun ne bootait. Et comme un boulet, en voulant flasher par la ligne de commande CFE, j'ai involontairement (et connement) écrasé le bootloader. Donc va falloir que je me débrouille pour fabriquer un câble JTAG sur port // en retrouvant les connexions (6 pastilles alignées, visibles sur la photo à droite du port série), et reflasher un CFE.
J'ai aussi envoyé un mail à Edimax pour tenter d'obtenir plus d'infos et surtout l'image du firmware d'origine...
J'ai un petit peu avancé sur le sujet, puisque j'ai réussi à trouver (non sans mal) le brochage du JTAG. Parcontre ce qui est galère c'est de souder des connecteurs dessus, mais bon enfin c'est fait maintenant place aux bidouilles.
J'ai chopé sur le site de dd-wrt le tjtag3 de Tornado, qui supporte le BCM5354KFBG rev3.
tjtag3 reconnait bien le chip, arrive à le configurer, mais c'est tout. Impossible de communiquer avec la mémoire flash (gné !!!). Donc pour le moment je suis coincé. En espérant que tu puisse arriver à communiquer en JTAG, à ce moment là on pourra faire des tests en lecture pour trouver et peut-être confirmer les adresses de base de la flash etc etc...
Pour te faire un câble tu peux utiliser le schéma du unbuffered jtag cable, celui avec juste le connecteur DB25 et les 4 résistances de 100ohm.
Je te joins le brochage de la carte. Si tu veux utiliser son port série il te faut un convertisseur usb=>RS232 avec des niveaux de 0-5V, ou bien un circuit genre max232 couplé à un port série du PC.
Le port série te permettra de voir les mêmes messages de boot que moi et de te logger ensuite sur un rootshell (malheureusement c'est le même système de login/pass que par telnet). Cependant y'a des login/pass edimax qui trainent sur le net, à essayer...
je me suis decidé à souder 3 fil pour le port serie directe sans passer par l'usb , a coter du jtab il ya 3 pastilles pour le serie, seulemnt voila j'ai apparament un probleme de decodage des caracteres , je recois seulment quelque ligne bonne , le reste est illisible .A tu une idee , je pense qu'il y a un probleme d'adaptation en tension ou alors mon terminal qui decode mal les caracteres .
je me pose aussi la question quel parametre utilise tu pour le port serie .
vitesse : ????
parite : ?????
nombre bit : ?????
nombre de stop : ?????
mais petite question pourquoi changer le firmware puisque le tout tourne sur une red hat, avec cell-ci on fait un peut se qu'on veux suffit de compiler directe dessus les programmes ou a coté en cross compilation.
Sinon toi as tu les login et pass root , parce que j'ai cherche et rien trouve enfi naucun qui ne focntionne
ne branche surtout pas directement le port série sur un port com sans passer par un adaptateur de tension type MAX232, tu vas flinguer ta puce !!! Le port com travaille en +/- 12V et le port série de ta carte fonctionne en 5V.
Recompiler des trucs dessus je veux bien mais saches que le firmware est dans une image squashfs seulement accessible en lecture seule. En clair tu peux rien modifier là dessus LE seul dossier où tu peux écrire c'est /tmp mais son contenu est effacé à chaque boot.
Désolé mais je n'ai pas réussi à choper le mot de passe root. Je sais que j'ai déjà vu des allusions à un tel mot de passe sur le net, mais faudrait faire une recherche approfondie pour retrouver ça...
merci du conseill je sais pas pourquoi j'etais persuader que les 2 cartes cote pc et carte etait en ttl 0 5 v , je doi me tromper , mais apparament sa la pas flinguer , le controleur doit etre resistant vue la ddp qu'il y a .
alalal j'ai bien un max 232 dans mes tiroirs mais pas les condo qu'il faut , sa sera pas pour aujourdh'ui dommage
en attendant faut vraiment que je fass peter le mot de pass, parce ce si j'ai acces root sur la carte on poura fair un peut se qu'on veut
pour ma part je vais me faire un connecteur ad-hoc pour mon jtag, car la façon dont c'est câblé, bonjour les parasites...
J'espère que ma carte est toujours fonctionnelle car malgré les 2Mo de flash, je pense qu'il y a moyen de se faire vraiment plaisir. D'ailleurs il y a ptète moyen de brancher un contrôleur SD à la place de la flash qui sait...
cette petite carte c'est une merveille mais faudrait vraiment la cracker.
en plus de cela , ya tout se que j'ai besoin , un port serie un controleur usb 2.0 , un controleur ethernet , du wifi et un proc a 240mHz
donc dison que c'est genial ,
faudrai juste lui metre un bon firmware avec une petite debian et sa devient un vrai joujou
Pour la cracker faudrait tenter un brute force a long terme en telnet avec brutus par exemple , le hic c que brutus tourne sous windows et que j'ai abandonne windows depuis plusieurs années mdr,
dis moi je pense a un truc , tu a ecrit que lorsque tu lance une requete d'extinction tu voir apparaitre le # , il serai peut possible de tenter un shutdown -c pour stopper le redemmarrage ainsi on aurai un acces en root sur la machine
Ayant ressorti mon serveur d'impression de sa boite, et ayant mené mon enquête, il s'avère que j'ai avancé.
En clair, en épluchant le datasheet de la flash et en regardant son montage, je me suis aperçu qu'elle était en BYTE mode (patte 47 à la masse). Or l'outil de flashage tjtag3 utilisait le mode WORD.
J'ai mené mon enquête sur le net et trouvé l'outil pjtag qui est le même outil mais supportant en plus le BYTE mode. Et me voilà parti pour le flashage d'un CFE avec je l'espère un boot prochain. Actuellement c'est encore en train de flasher (40%) donc patience (c'est très très long de flasher avec un jtag wiggler).