假设...只是为了娱乐。.我得到了2 x 3件滕田MW6,以覆盖大区域(室内和室外)。我有3个MW6进行了以太网(实际上是PLC桥适配器)。
在“默认”配置中,它可以正常运行,但是我已经拥有良好的OpenWRT路由器和几个设备/服务。通过Defaul,MW6在DHCP模式下工作,创建192.168.5.5子网并将所有人放在那里。但是,这1)带来额外的NAT层,2)打破我的服务。
因此,我决定将其切换到桥梁模式,在该模式下,根据手册,它将关闭其所有网络服务,并仅充当桥梁。
从乍看之下起作用,但后来我意识到我的一些设备弄错了IP luna公园与二十一点和妓女DHCP服务器。绝对没有Web Idrinantoin页面,只有电话应用程序。我没有看到从那里禁用它的方法。
NMAP表示DHCP服务器正在运行,并且截止了所有WiFi客户端,并从其池中提供了IP地址。不用说这些地址是错误的,而不是我需要的。谷歌搜索,找到了他们的支持 - 同样的问题,但是人说dhcp authoritative='1'在Main OpenWrt路由器上对他有效,但对我来说从来都不适用。
因此,我开始调查 - 如何禁用DHCP服务器。
立方体上很少开放端口。从一开始就没有看起来像Telnet或SSH,但是在我连接到UART之后 - 我注意到当您将重置按钮持续3秒钟(6秒带来默认设置)时,Telnetd正在启动。
PORT STATE SERVICE
23/tcp open telnet <--- opened only after you hold Reset for 3 seconds
5500/tcp open hotline
9000/tcp open cslistener
DHCP服务器已上升
sudo nmap -sU -p 67 --script=dhcp-discover 192.168.5.1
Starting Nmap 7.60 ( https://nmap.org ) at 2019-07-18 20:04 MSK
Nmap scan report for _gateway (192.168.5.1)
Host is up (0.0027s latency).
PORT STATE SERVICE
67/udp open dhcps
| dhcp-discover:
| DHCP Message Type: DHCPACK
| Server Identifier: 192.168.5.1
| IP Address Lease Time: 23h30m42s
| Subnet Mask: 255.255.255.0
| Broadcast Address: 192.168.5.255
| Router: 192.168.5.1
| Domain Name Server: 192.168.5.1
|_ Domain Name: tendawifi.com
MAC Address: 04:95:E6:1A:96:E0 (Tenda Technology,Ltd.Dongguan branch)
Nmap done: 1 IP address (1 host up) scanned in 0.75 seconds
PORT STATE SERVICE
1723/tcp closed pptp
仔细检查需要了解开放的内容以及何时开放所需的固件。
我尝试使用admin/password/password/user/1234/12345678密码和其他一些root/admin/admin/under/用户。不,不工作。
打开立方体非常简单。有趣的是 - UART插座和SOIC -8 SPI闪光灯。由散热器关闭的主芯片-Realtek RTL8197F

115200 8N1。从引脚1开始(靠近SPI Flash):VCC,RX,TX,GND。
Bohong BH25Q64 SPI Flash,8MB。数据表
固件在网络上不可用。电话应用程序在Tenda Cloud中寻找并下载。我的立方体有最新的固件,因此不能嗅到网络上的新固件。只有我可以说这个应用具有与Tenda Cloud的通信协议。
不幸的是,芯片夹不起作用,它为整个设备提供动力,并且开始使用芯片通信。完全去涂了它。不要忘记Capton胶带。 
我不是每天都在阅读Flash Chips,也没有为此提供特殊的编程设备。但是,我找到了FTDI FT2232H设备,我将其用作ESP32的OpenOCD JTAG调试器。该芯片具有SPI模式,可以作为主体工作。 PINOUT取自数据表。
| FT2232H端口 | 功能 | Flash Chip Pin |
|---|---|---|
| ADBUS0 | SCK | 6 |
| ADBUS1 | 莫西 | 5 |
| ADBUS2 | 味o | 2 |
| ADBUS3 | CS | 1 |
其他Flash芯片引脚4 -GND,8 -VCC 3.3V,3和7转到VCC。

$ flashrom -p ft2232_spi:type=2232H,port=A
它只会带来悲伤...
flashrom v0.9.9-r1954 on Linux 4.18.0-25-generic (x86_64)
flashrom is free software, get the source code at https://flashrom.org
Calibrating delay loop... OK.
Found Generic flash chip "unknown SPI chip (RDID)" (0 kB, SPI) on ft2232_spi.
===
This flash part has status NOT WORKING for operations: PROBE READ ERASE WRITE
The test status of this chip may have been updated in the latest development
version of flashrom. If you are running the latest development version,
please email a report to [email protected] if any of the above operations
work correctly for you with this flash chip. Please include the flashrom log
file for all operations you tested (see the man page for details), and mention
which mainboard or programmer you tested in the subject line.
Thanks for your help!
No operations were specified.
环顾四周,找到了Skproj的Skproj,其中包含Sketch和.net应用程序(俄语),这对我来说很好地阅读了中国闪光芯片。
我使用了Nodemcu ESP8266板,因为它是3.3V,我不想想到5V <> 3V级的转换。
重要的是:根据官方文件,SPI芯片应连接到HSPI PIN GPIO12-GPIO14 。
serprog固件可与flashrom一起使用,但我无法迅速找到ESP8266的端口
为了使闪烁更轻松,我刚刚购买了夫妇Winbond W25Q64FV芯片。它们与flashrom合适,我不需要运行Windows来闪烁芯片。我写了Flash Dump到New Chip
flashrom -p ft2232_spi:type=2232H,port=A -w image.bin
Tenda引导加载程序检测到新的Flash芯片并正常启动。
直接运行的Binwalk会提供很多定期的发现。
binwalk all.bin
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
35096 0x8918 CRC32 polynomial table, little endian
36192 0x8D60 gzip compressed data, maximum compression, from Unix, last modified: 2018-04-20 02:17:42
206872 0x32818 LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 6890804 bytes
2261010 0x228012 Squashfs filesystem, little endian, version 4.0, compression:xz, size: 3071844 bytes, 378 inodes, blocksize: 131072 bytes, created: 1902-05-30 15:13:04
6160384 0x5E0000 JFFS2 filesystem, little endian
但是,希望能够将它们全部粘合在一起,我根据Bootlog中的MTD块将Flash图像拆分dd 9个文件
flash vendor: BOHONG
m25p80 spi0.0: BH25Q64 (8192 Kbytes) (55000000 Hz)
m25p80 spi0.0: change speed to 55000000Hz, div 2
Kernel code size:0x1f8012
9 rtkxxpart partitions found on MTD device m25p80
Creating 9 MTD partitions on "m25p80":
0x000000000000-0x000000800000 : "ALL"
0x000000000000-0x000000020000 : "Bootloader"
0x000000020000-0x000000030000 : "CFG"
0x000000030000-0x0000005c0000 : "KernelFS"
0x000000228012-0x0000005c0000 : "RootFS"
0x0000005c0000-0x0000005d0000 : "CFM"
0x0000005d0000-0x0000005e0000 : "CFM_BACKUP"
0x0000005e0000-0x0000007f0000 : "LOG"
0x0000007f0000-0x000000800000 : "ENV"
对我来说尚不清楚为什么KernelFS和RootFS根据MTD表相交。
只需unsquashfs包装文件系统即可。基于Busybox。
猫/etc/passwd
root:$1$nalENqL8$jnRFwb1x5S.ygN.3nwTbG1:0:0:root:/:/bin/sh
猫/etc/shadow
root:$1$OVhtCyFa$7tISyKW1KGssHAQj1vI3i1:14319::::::
猫/etc/inittab
::sysinit:/etc_ro/init.d/rcS
ttyS0::respawn:/sbin/sulogin
::ctrlaltdel:/bin/umount -a -r
::shutdown:/usr/sbin/usb led_off
首先尝试非常天真:让我们进行更新/etc/inittab并将其放回原处。
更改ttyS0::respawn:/sbin/sulogin ttyS0::respawn:/bin/login -f root
更新了文件,将文件包装到squshfs -oops -oops,它比以前大。检查的压缩 - 最初是XZ ,但mksquashfs默认使用LZMA。更改为XZ,现在它的大小相同,并且适合Rootfs MTD。带有FF的NewRootfs文件,直到达到原始MTD分区尺寸为止。将所有文件组合回一个图像文件,写入Flash,启动...
Booting...
init_ram
00000202 M init ddr ok
DRAM Type: DDR2
DRAM frequency: 533MHz
DRAM Size: 128MB
JEDEC id EF4017, EXT id 0x0000
found w25q64
flash vendor: Winbond
w25q64, size=8MB, erasesize=64KB, max_speed_hz=29000000Hz
auto_mode=0 addr_width=3 erase_opcode=0x000000d8
=>CPU Wake-up interrupt happen! GISR=89000004
---Realtek RTL8197F boot code at 2018.04.20-10:17+0800 v3.4.11B.9 (999MHz)
Mac addr:04-95-e6-1a-96-e0
lan_wan_isolation Initing...
config: lan port mask is 0x000000f7
config: wan port mask is 0x000000e8
lan_wan_isolation Initing has been completed.
lan_wan_isolation Initing...
config: lan port mask is 0x000000f7
config: wan port mask is 0x000000e8
lan_wan_isolation Initing has been completed.
wait for upgrage
port[0] link:down
port[1] link:down
port[2] link:down
port[3] link:down
port[4] link:down
irq:0x00008080
rootfs checksum error at 00228012!
<RealTek>
我怎么能忘记CRC ...我花了几个小时试图找出计算CRC的正确方法 - 找到了RSDK,试图理解图像创建...目前对我的大脑来说太多了。
让我们尝试其他事情。
根据启动日志,有netctrl进程,可以提早开始并更改root密码。
argv[0] = netctrl
netctrl
prod_change_root_passwd(83)
因此,让我们努力。尝试拆卸并逆转代码。哎哟。从来没有见过MIPS ASM ...
从发现其中许多的文件中查看prod_change_root_passwd , netctrl使用它,并且看起来像/lib/libcommonprod.so中定义的函数本身。
IDA中的打开/bin/netctrl 。打开功能main 。它首先清除缓冲区,然后从配置中读取sys.role参数,并取决于此睡眠或调用外部函数prod_change_root_passwd而无需参数。

open /lib/libcommonprod.so 。打开功能prod_change_root_passw 。还首先清除缓冲区,然后读取带有wl2g.ssid0.wpapsk_psk或TD_WLAN1_SSID0_PWD的value config and and call Encode64()一些参数。
然后仅通过命令行设置root密码(echo %s;sleep 1;echo %s) | passwd root -a s> /dev/null

瞧!
从贴纸上计算出我默认密码的基本64,通过串行连接...
Normal startupGive root password for system maintenance
(or type Control-D for normal startup):
System Maintenance Mode
~ #
~ # uname -a
Linux NOVA-xxxxxxxxxxxx 3.10.90 #4 Mon Jul 2 10:57:35 CST 2018 mips GNU/Linux
基本上还没有有趣的地方看到这里。除了根部注册了根外,没有用户。
~ # cat /proc/cpuinfo
system type : RTL8197F
machine : Unknown
processor : 0
cpu model : MIPS 24Kc V8.5
BogoMIPS : 666.41
wait instruction : yes
microsecond timers : yes
tlb_entries : 64
extra interrupt vector : yes
hardware watchpoint : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]
isa : mips1 mips2 mips32r2
ASEs implemented : mips16
shadow register sets : 4
kscratch registers : 0
core : 1
VCED exceptions : not available
VCEI exceptions : not available
~ # ls -l /sys/class/gpio/
total 0
--w------- 1 root root 16384 Jan 1 1970 export
lrwxrwxrwx 1 root root 0 Jan 1 1970 gpio18 -> ../../devices/virtual/gpio/gpio18
lrwxrwxrwx 1 root root 0 Jan 1 1970 gpio19 -> ../../devices/virtual/gpio/gpio19
lrwxrwxrwx 1 root root 0 Jan 1 1970 gpio58 -> ../../devices/virtual/gpio/gpio58
lrwxrwxrwx 1 root root 0 Jan 1 1970 gpiochip0 -> ../../devices/virtual/gpio/gpiochip0
--w------- 1 root root 16384 Jan 1 1970 unexport
~ # ls -l /sys/devices/platform/
total 0
drwxr-xr-x 2 root root 0 Jul 18 21:12 alarmtimer
drwxr-xr-x 2 root root 0 Jul 18 21:12 rtl819x_8367r_i2c_pin.1
drwxr-xr-x 2 root root 0 Jul 18 21:12 rtl819x_8367r_i2c_pin.2
drwxr-xr-x 2 root root 0 Jul 18 21:12 rtl819x_8367r_reset_pin.0
drwxr-xr-x 2 root root 0 Jul 18 21:12 rtl819x_btn.0
drwxr-xr-x 2 root root 0 Jul 18 21:12 rtl819x_led.0
drwxr-xr-x 2 root root 0 Jul 18 21:12 rtl819x_led.1
drwxr-xr-x 2 root root 0 Jul 18 21:12 rtl819x_led.2
drwxr-xr-x 3 root root 0 Jan 1 1970 serial8250
drwxr-xr-x 3 root root 0 Jan 1 1970 spi-sheipa.0
-rw-r--r-- 1 root root 16384 Jul 18 21:12 uevent
这是运行的过程
~ # ps
PID USER TIME COMMAND
1 root 0:01 init
2 root 0:00 [kthreadd]
3 root 0:40 [ksoftirqd/0]
4 root 0:00 [kworker/0:0]
5 root 0:00 [kworker/0:0H]
6 root 0:01 [kworker/u2:0]
7 root 0:00 [khelper]
8 root 0:00 [kworker/u2:1]
75 root 0:00 [writeback]
78 root 0:00 [bioset]
79 root 0:00 [crypto]
81 root 0:00 [kblockd]
84 root 0:01 [spi0]
102 root 0:00 [kworker/0:1]
106 root 0:00 [kswapd0]
154 root 0:00 [fsnotify_mark]
708 root 0:00 [mtdblock0]
713 root 0:00 [mtdblock1]
718 root 0:00 [mtdblock2]
723 root 0:00 [mtdblock3]
728 root 0:00 [mtdblock4]
733 root 0:00 [mtdblock5]
738 root 0:00 [mtdblock6]
743 root 0:00 [mtdblock7]
748 root 0:00 [mtdblock8]
802 root 0:00 [deferwq]
860 root 0:03 klogd -n
862 root 0:00 monitor
863 root 1:55 sh /usr/bin/ugw_watchdog.sh
869 root 0:00 syslogd -f /var/etc/syslog.conf -s 50
914 root 0:15 cfmd
1030 root 0:00 [jffs2_gcd_mtd7]
1032 root 0:11 timer
1033 root 0:00 logserver
1034 root 0:14 netctrl
1069 root 0:01 device_list
1071 root 3:20 sh /usr/bin/mesh_op.sh
1530 root 0:10 pann
1531 root 0:00 gpio_ctrl
1532 root 0:00 mesh_status_check
1534 root 0:19 network_check
1570 root 0:00 redis-server /etc_ro/redis.conf
1571 root 0:01 cmdsrv -l tcp://0.0.0.0:12598 -R tcp://127.0.0.1:6379
1572 root 0:00 [kworker/0:1H]
1573 root 0:05 confsrv
1599 root 0:01 dhcps -C /etc/dhcps.conf -l /etc/dhcps.leases -x /etc/dhc
1931 root 0:00 ucloud -l 4
1962 root 0:00 sntp 1 28800 43200
2370 root 0:00 ftd -br br0 -w wlan0 wlan1 -pid /var/run/ft.pid -c /tmp/f
2375 root 0:00 pathsel -i wlan-msh -P -t 9
2387 root 0:00 multiWAN
2488 root 0:00 dhcpcd_wan1 -c /etc/wan1.ini -m 1 eth1 -h NOVA-0495e61a96
2567 root 0:00 dnrd -t 3 -M 600 --cache=off -b -R /etc/dnrd -r 3 -s 192.
2955 root 0:00 miniupnpd -f /etc/miniupnpd.config -w
2991 root 0:00 igmpproxy
10388 root 0:00 -sh
12125 root 0:00 sleep 5
12155 root 0:00 sleep 1
12156 root 0:00 ps
我可以访问新的Tenda MW6,这让我很高兴,因为我讨厌黑盒。
root密码只是您当前的wifi密码,并用base64编码。
(感谢@Crees完成DHCP研究。在MW5上进行了测试,但具有类似的软件)
cfm实用程序可以在/usr/sbin中的脚本中发现,并用于操纵跨重新启动的参数(您可以直接使用cat /dev/mtd5直接检查商店)。
~ # cfm get ^dhcps
dhcps.Staticip1=
dhcps.Staticnum=0
dhcps.apmode.list1=1;br1;192.168.1.31;192.168.1.254;192.168.1.1;255.255.255.0;1440;192.168.1.66;192.168.1.70;host
dhcps.apmode.list2=1;br1;192.168.1.2;192.168.1.30;192.168.1.1;255.255.255.0;1440;192.168.1.66;192.168.1.70;dev
dhcps.en=1
dhcps.list1=1;br0;192.168.1.31;192.168.1.254;192.168.1.1;255.255.255.0;1440;192.168.1.1;;host
dhcps.list2=1;br0;192.168.1.2;192.168.1.30;192.168.1.1;255.255.255.0;1440;192.168.1.1;;dev
dhcps.listnum=2
dhcps.static.list1=1 14:DA:E9:38:EC:40 192.168.1.70
dhcps.static.listnum=1
通常,您需要先设置端口转发,因为UI可能无法识别您的设备。
对于dhcps.listnum ,如果将其设置为0,则不会在重新启动时编写a /etc/dhcps.conf,从而使DHCPS禁用。
~ # cfm set dhcps.listnum 0
这将持续到重新启动中,并且可以通过更改DHCPs.listnum重新恢复其原始值来轻松撤消,并且出厂重置也将逆转它。
您只允许应用程序中的8个端口转发规则,这是非常有限的。设置DMZ作品(或者您也可以使用CFM弄乱转发规则 - 虚拟者规则看起来很简单。
~ # cfm set wan1.dmzip ip.address.here
~ # cfm set wan1.dmzen 1
~ # reboot
看来许多业务逻辑是在C/C ++完成的,并编译(与制作很多脚本)。另一个并发症是没有覆盖fs,除/tmp/log/crash type jffs2 (rw,relatime)上的/dev/mtdblock7外,所有已安装的r/o - 设置直接存储在/dev/mtd5中,并使用cfm操作。
那很有趣。