假設...只是為了娛樂。 .我得到了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操作。
那很有趣。