{"id":46342010,"url":"https://github.com/latonita/tenda-reverse","last_synced_at":"2026-03-04T20:15:29.499Z","repository":{"id":53007492,"uuid":"197215274","full_name":"latonita/tenda-reverse","owner":"latonita","description":"Reverse engineering, getting root access to Tenda MW6 wifi mesh router","archived":false,"fork":false,"pushed_at":"2025-04-16T09:20:17.000Z","size":12415,"stargazers_count":139,"open_issues_count":16,"forks_count":17,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-04-16T12:21:44.621Z","etag":null,"topics":["bootloader","busybox","disassembly","hacking","realtek","reverse-engineering","root","root-finding","router","rtl8197f","tenda"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/latonita.png","metadata":{"files":{"readme":"README-ru.md","changelog":"change-to-do/RootFS/inittab","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-07-16T14:59:34.000Z","updated_at":"2025-04-16T09:20:17.000Z","dependencies_parsed_at":"2025-04-16T12:16:02.414Z","dependency_job_id":null,"html_url":"https://github.com/latonita/tenda-reverse","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/latonita/tenda-reverse","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/latonita%2Ftenda-reverse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/latonita%2Ftenda-reverse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/latonita%2Ftenda-reverse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/latonita%2Ftenda-reverse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/latonita","download_url":"https://codeload.github.com/latonita/tenda-reverse/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/latonita%2Ftenda-reverse/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30091761,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T19:41:02.502Z","status":"ssl_error","status_checked_at":"2026-03-04T19:40:05.550Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bootloader","busybox","disassembly","hacking","realtek","reverse-engineering","root","root-finding","router","rtl8197f","tenda"],"created_at":"2026-03-04T20:15:28.947Z","updated_at":"2026-03-04T20:15:29.472Z","avatar_url":"https://github.com/latonita.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"Началось всё с того, что польстившись на распродажу и новые buzz words - я приобрел wifi mesh систему, дабы покрыть все уголки загородного дома и прилегающего участка. Все бы ничего, но одна проблема раздражала. А с учетом того, что я сел на больничный на несколько дней - довела меня до root доступа к данному роутеру.\n\n![КДПВ](https://habrastorage.org/webt/47/b6/em/47b6emgsl6psfjyc_j-rotkpln8.png)\n\n\u003ccut /\u003e\n\n# Проблема\nРади интереса, приобрел два набора по три кубика [Tenda Nova MW6](https://www.tendacn.com/ru/product/mw6.html) - система для организации wifi mesh для чайников. С возможностью ethernet backhaul, т.е. соединения некоторых блоков друг с другом по проводам, ибо данная коробочка является чуть-ли не самой дешевой wifi mesh (дешевле, по-моему, только их же MW3) и она не имеет третьего выделенного радиотракта для внутренней коммуникации между блоками (как у некоторых дорогих коллег - Netgear Orbi).\nВ целом, огромной нужды не было, но пара роутеров под OpenWrt не покрывали всех нужных мест.\n\n\u003cspoiler title=\"Кто такой mesh, и зачем он нужен\"\u003e\nMesh - это топология построения сетей, характеризующаяся высокой отказоустойчивостью и динамичностью. \nНе буду вдаваться в подробности, так как многие в курсе, а кто нет - можно начать со [статьи про Ячеистую топологию на wikipedia](https://ru.wikipedia.org/wiki/%DF%F7%E5%E8%F1%F2%E0%FF_%F2%EE%EF%EE%EB%EE%E3%E8%FF). \n\nОсновная задача \"домашней\" wifi mesh сети — это покрыть большую площадь стабильным беспроводным сигналом с бесшовным роумингом.\n\nБесшовный роуминг можно и на access points и на домашних роутерах включить (например с openwrt - путем замены wpad-mini на wpad и включению 802.11r). А стабильный сигнал на большой площади от пары точек не получить - то пусто, то густо  - при этом сильно засоряешь эфир, если повышаешь мощность. Нужно больше точек - несколько точек 5G будет намного эффективнее. Но на обычных access points/routers ты еще будешь думать, как провод к ним подвести, а mesh на то и mesh, чтобы сама себя поддерживать и налаживать связи как при наличии, так и без наличия провода (backhaul).\n\nВообщем, технология для удобства жизни. Это хорошо.\n\u003c/spoiler\u003e\n\nЗавелась система с первого раза, сама настроилась, всё окей. Поиграв с их фичами в приложении (а классической веб-мордочки не предусмотрено, теперь всё только через приложения для телефона и китайские облака...) решил перевести в сеть в режим моста, ибо есть разные устройства уже настроенные как надо и Главный роутер много чего делает.\n\nСутки всё работало хорошо, потом начал замечать, что то к одному хосту, то к другому нет доступа. В админке OpenWrt в списке выделенных адресов - пара хостов, остальных нет. Сканирую сеть - хосты на месте, только адреса у них не те, что были зафиксированы. Начинаю подозревать - сканирую \"главный кубик\" MW6 - так и есть, на нем крутится DHCP сервер.\n\n\u003cspoiler title=\"sudo nmap -sU -p 67 --script=dhcp-discover 192.168.5.111\"\u003e\n```\n\nStarting Nmap 7.60 ( https://nmap.org ) at 2019-07-18 20:04 MSK\nNmap scan report for _gateway (192.168.5.111)\nHost is up (0.0027s latency).\n\nPORT   STATE SERVICE\n67/udp open  dhcps\n| dhcp-discover: \n|   DHCP Message Type: DHCPACK\n|   Server Identifier: 192.168.5.111\n|   IP Address Lease Time: 23h30m42s\n|   Subnet Mask: 255.255.255.0\n|   Broadcast Address: 192.168.5.255\n|   Router: 192.168.5.1\n|   Domain Name Server: 192.168.5.1\n|_  Domain Name: tendawifi.com\nMAC Address: 04:95:E6:1A:96:E0 (Tenda Technology,Ltd.Dongguan branch)\n\nNmap done: 1 IP address (1 host up) scanned in 0.75 seconds\n```\n\u003c/spoler\u003e\n\nПоддержка у Tenda только де-юро. Де-факто никто ни на что не отвечает. Русская поддержка в контакте хоть и отвечает, но абсолютно не адекватна и не умеет слушать клиентов.\n\nБеглый гуглинг подсказал, что на всякий случай надо бы на Главном роутере поставить `dhcp authoritative='1'`, но это не помогло. И тут я начал думать, как отключить DHCP сервер на этих кубиках. Выделил один кубик для игр, сбросил его настройки и - понеслась.\n\n# Сетевые сервисы\nНесколько портов открыто, сильно не копал, просто `nmap \u003chost\u003e`. Подозреваю, что есть и бэкдоры для китайских облаков, но пока их не искал. С ходу ничего полезного не видно. А не с ходу - после подключения к консоли по UART захотел сбросить настройки кубика и выяснил, что после 3 секунд нажатия на reset - запускается telnet сервер.\n\n\u003cspoiler title=\"Вид из LAN\"\u003e\n```\nPORT     STATE SERVICE                                                          \n23/tcp   open  telnet\n5500/tcp open  hotline\n9000/tcp open  cslistener\n```\n\u003c/spoiler\u003e\n\n\u003cspoiler title=\"Вид из WAN\"\u003e\n```\nPORT     STATE  SERVICE\n1723/tcp closed pptp\n```\n\u003c/spoiler\u003e\n\n## Зайдем-ка в telnet\nНу тут не сильно нам удача улыбалась - всякие стандартные логины/пароли по-перебирал - не подошли. Пробовал root/admin/support/user и пароли из \"интернетов\" - password, root, toor, admin, support, tenda, 1234, 12345678 и т.д. Пароль от wifi сети тоже пробовал.\n\n# Железяки\nКубик открывается легко и непринужденно, шурупы, как обычно, под ножками. Скрытых шурупов нет. Внутри ~~собаки~~ кубика - пустота. Пара плат и пара микро антенн. Ничего интересного, как и везде в 99% случаев. \n\nПовезло с UART - единственный коннектор оказался им. Флэшка прямо по середине. На другой стороне платы ничего нет, кроме радиатора.\n\n![Внутренний мир](https://habrastorage.org/webt/iy/a6/y3/iya6y3hmocef5mix-qq1gvsvkmy.png)\n\n## UART\nРазъем J4. Распиновка, начиная с первой ноги: VCC (3.3), TX, RX, GND. Первый нога - которая ближе всего к флешке. Настройки UART тоже угадались с первой попытки - 115200, 8n1.\n\n\u003cspoiler title=\"А вот и долгожданный bootlog. Для ценителей.\"\u003e\n```\nBooting...\ninit_ram\n 00000202 M init ddr ok\n\nDRAM Type: DDR2\n        DRAM frequency: 533MHz\n        DRAM Size: 128MB\nJEDEC id 684017, EXT id 0x6840\nfound BH25Q64\nflash vendor: BOHONG\nBH25Q64, size=8MB, erasesize=64KB, max_speed_hz=55000000Hz\nauto_mode=0 addr_width=3 erase_opcode=0x000000d8\n=\u003eCPU Wake-up interrupt happen! GISR=89000004 \n \n---Realtek RTL8197F boot code at 2018.04.20-10:17+0800 v3.4.11B.9 (999MHz)\nMac addr:04-95-e6-1a-96-e0\nlan_wan_isolation Initing...\nconfig: lan port mask is 0x000000f7\nconfig: wan port mask is 0x000000e8\nlan_wan_isolation Initing has been completed.\nlan_wan_isolation Initing...\nconfig: lan port mask is 0x000000f7\nconfig: wan port mask is 0x000000e8\nlan_wan_isolation Initing has been completed.\nwait for upgrage\nport[0] link:down\nport[1] link:down\nport[2] link:down\nport[3] link:down\nport[4] link:down\nirq:0x00008080\nJump to image start=0x80a00000...\ndecompressing kernel:\nUncompressing Linux... done, booting the kernel.\ndone decompressing kernel.\nstart address: 0x80466860\nLinux version 3.10.90 (root@linux-bkb8) (gcc version 4.4.7 (Realtek MSDK-4.4.7 Build 2001) ) #4 Mon Jul 2 10:57:35 CST 2018\nCPU revision is: 00019385 (MIPS 24Kc)\nDetermined physical RAM map:\n memory: 08000000 @ 00000000 (usable)\nZone ranges:\n  Normal   [mem 0x00000000-0x07ffffff]\nMovable zone start for each node\nEarly memory node ranges\n  node   0: [mem 0x00000000-0x07ffffff]\nPrimary instruction cache 64kB, VIPT, 4-way, linesize 32 bytes.\nPrimary data cache 32kB, 4-way, PIPT, no aliases, linesize 32 bytes\nBuilt 1 zonelists in Zone order, mobility grouping on.  Total pages: 8176\nKernel command line:  console=ttyS0,115200\nPID hash table entries: 512 (order: -3, 2048 bytes)\nDentry cache hash table entries: 16384 (order: 2, 65536 bytes)\nInode-cache hash table entries: 8192 (order: 1, 32768 bytes)\nWriting ErrCtl register=00029693\nReadback ErrCtl register=00029693\nMemory: 103744k/131072k available (4526k kernel code, 27328k reserved, 2031k data, 224k init, 0k highmem)\nSLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1\nNR_IRQS:192\nRealtek GPIO IRQ init\nCalibrating delay loop... 666.41 BogoMIPS (lpj=3332096)\npid_max: default: 32768 minimum: 301\nMount-cache hash table entries: 2048\nNET: Registered protocol family 16\n\u003c\u003c\u003c\u003c\u003cRegister PCI Controller\u003e\u003e\u003e\u003e\u003e\nDo MDIO_RESET\n40MHz\nFind PCIE Port, Device:Vender ID=b82210ec\nRealtek GPIO controller driver init\nINFO: registering sheipa spi device\nbio: create slab \u003cbio-0\u003e at 0\nINFO: sheipa spi driver register\nINFO: sheipa spi probe\n***spi max freq:100000000\nSwitching to clocksource MIPS\nNET: Registered protocol family 2\nTCP established hash table entries: 2048 (order: 0, 16384 bytes)\nTCP bind hash table entries: 2048 (order: -1, 8192 bytes)\nTCP: Hash tables configured (established 2048 bind 2048)\nTCP: reno registered\nUDP hash table entries: 1024 (order: 0, 16384 bytes)\nUDP-Lite hash table entries: 1024 (order: 0, 16384 bytes)\nNET: Registered protocol family 1\nsquashfs: version 4.0 (2009/01/31) Phillip Lougher\njffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.\nmsgmni has been set to 202\nBlock layer SCSI generic (bsg) driver version 0.4 loaded (major 254)\nio scheduler noop registered (default)\nSerial: 8250/16550 driver, 1 ports, IRQ sharing disabled\nserial8250: ttyS0 at MMIO 0x18147000 (irq = 17) is a 16550A\nconsole [ttyS0] enabled\nRealtek GPIO to I2C Driver Init...\nmfi_ioctl_init:565,dev=253,MINOR=0\nloop: module loaded\nm25p80 spi0.0: change speed to 15000000Hz, div 7\nJEDEC id 684017\nm25p80 spi0.0: found BH25Q64, expected m25p80\nflash vendor: BOHONG\nm25p80 spi0.0: BH25Q64 (8192 Kbytes) (55000000 Hz)\nm25p80 spi0.0: change speed to 55000000Hz, div 2\nKernel code size:0x1f8012\n9 rtkxxpart partitions found on MTD device m25p80\nCreating 9 MTD partitions on \"m25p80\":\n0x000000000000-0x000000800000 : \"ALL\"\n0x000000000000-0x000000020000 : \"Bootloader\"\n0x000000020000-0x000000030000 : \"CFG\"\n0x000000030000-0x0000005c0000 : \"KernelFS\"\n0x000000228012-0x0000005c0000 : \"RootFS\"\n0x0000005c0000-0x0000005d0000 : \"CFM\"\n0x0000005d0000-0x0000005e0000 : \"CFM_BACKUP\"\n0x0000005e0000-0x0000007f0000 : \"LOG\"\n0x0000007f0000-0x000000800000 : \"ENV\"\nPPP generic driver version 2.4.2\nPPP MPPE Compression module registered\nNET: Registered protocol family 24\nPPTP driver version 0.8.5\nRealtek WLAN driver - version 1.7 (2015-10-30)(SVN:exported)\nAdaptivity function - version 9.3.4\nDo MDIO_RESET\n40MHz\nFind PCIE Port, Device:Vender ID=b82210ec\n\n found 8822B !!! \nhalmac_check_platform_api ==========\u003e\n12089M\nHALMAC_MAJOR_VER = 0\nHALMAC_PROTOTYPE_VER = 0\nHALMAC_MINOR_VER = 0\nhalmac_init_adapter_88xx ==========\u003e\nhalmac_init_adapter Succss \nIS_RTL8822B_SERIES value8 = a \nMACHAL_version_init\n\n\n#######################################################\nSKB_BUF_SIZE=8432 MAX_SKB_NUM=1024\n#######################################################\n\nMACHAL_version_init\nRFE TYPE =5\n\n\n#######################################################\nSKB_BUF_SIZE=3032 MAX_SKB_NUM=400\n#######################################################\n\nRFE TYPE =5\nRFE TYPE =5\nRFE TYPE =5\nRFE TYPE =5\n--- link_loop_init ---\nmesh_extend_init over...\n--- hybrid_steering_init ---\nu32 classifier\nnf_conntrack version 0.5.0 (1621 buckets, 6484 max)\n[BM CORE     ][init_online_ip  ,1053]  INFO: online ip data hash table created, size = 199\n[BM CORE     ][init_online_ip_procfs,647 ]  INFO: online_ip proc file created\nipip: IPv4 over IPv4 tunneling driver\ngre: GRE over IPv4 demultiplexor driver\nip_gre: GRE over IPv4 tunneling driver\nip_tables: (C) 2000-2006 Netfilter Core Team\nTCP: cubic registered\nNET: Registered protocol family 17\nl2tp_core: L2TP core driver, V2.0\nl2tp_ppp: PPPoL2TP kernel driver, V2.0\n8021q: 802.1Q VLAN Support v1.8\nRealtek FastPath:v1.03\n\nProbing RTL819X NIC-kenel stack size order[0]...\nlink_send_msg_timer_func:lan_dev = NULL\n[Rtl83xx Ethernet Driver][RTL83XX_vlan_set][901]: failed!(0x3)\neth0 added. vid=9 Member port 0x2...\neth1 added. vid=8 Member port 0x8...\n[peth0] added, mapping to [eth1]...\nVFS: Mounted root (squashfs filesystem) readonly on device 31:4.\nFreeing unused kernel memory: 224K (80668000 - 806a0000)\nmkdir: can't create directory '/var/run': File exists\n[BM CORE     ][bm_init         ,857 ]  INFO: bm_init success\n[BM CORE     ][bm_u2k_info_init,1149]  INFO: bm_u2k_info_init success\n[MAC FILTER  ][mf_init         ,683 ]  INFO: bm_mac_filter init success \n*TBQ* tbq_token_ctrl size:   40\n*TBQ* tbq_user size:         68\n*TBQ* tbq_user_sched size:   2192\n*TBQ* tbq_bucket size:       56\n*TBQ* tbq_bucket_sched size: 1796\n*TBQ* tbq_flow_track size:   228\n*TBQ* tbq_user_track size:   4412\n*TBQ* tbq_backlog size:      24\n*TBQ* tbq_flow_backlog size: 36\n*TBQ* nos_flow_track size:   12\n*TBQ* nos_user_track size:   28\n*TBQ* nf_conn size:          624\n*TBQ* sk_buff size:          232\n*TBQ* TBQ_BACKLOG_PACKETS_MAX:  1000000\n*TBQ* TBQ_LATENCY_SHIFT_MAX:    10\n*TBQ* TBQ_DISABLE_TIMEOUT_MAX:  60\n*TBQ* HZ: 100\n*TBQ* init_user_tbq_hash_table ok\n*TBQ* nos_tbq_init() OK\nGive root password for system maintenance\n(or type Control-D for normal startup):argv[0] = cfmd\ncfmd\ncfms_apmib_init:line(475)\nRead hw setting header failed!\n\n flash_mib_compress_write DEFAULT_SETTING DONE, __[flash.c-6988]\n flash_mib_compress_write CURRENT_SETTING DONE, __[flash.c-7057]\n DEFAULT_SETTING hecksum_ok\n\n CURRENT_SETTING hecksum_ok\n\n  __[flash.c-7211]setMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nsetMIB end...\nargv[0] = timer\ntimer\nargv[0] = logserver\nlogserver\nargv[0] = netctrl\nnetctrl\nprod_change_root_passwd(83)\nlink_send_msg_timer_func:lan_dev = NULL\ninsmod: can't insert '/lib/modules/phy_check.ko': File exists\n/bin/sh: can't create /proc/sw_nat: Permission denied\nsrc/common_hal.c hal_init_bridge\ndevice eth0 entered promiscuous mode\nbr0: port 1(eth0) entered listening state\nbr0: port 1(eth0) entered listening state\nnetctrl_main.c,netctrl_init_vlan_ports,1207,: Set br0 to 04:95:e6:1a:96:e0.\nSun May  1 00:00:00 UTC 2011\nargv[0] = device_list\ndevice_list\nargv[0] = tendaupload\ntendaupload\nargv[0] = sh\nargv[1] = /usr/bin/mesh_op.sh\nsh\n\n######## STARTING PROGRAM #########\n######## RECEIVING DATA #########\nRTNETLINK answers: Operation not supported\ncheck timer start success\nRTNETLINK answers: No such file or directory\n[MAC FILTER  ][mf_apply        ,232 ]  INFO: g_mac_filter_enable = disable, mf_default_action = accept\n[MAC FILTER  ][mf_apply        ,232 ]  INFO: g_mac_filter_enable = disable, mf_default_action = accept\nInit gsbmac dev success.\nThe ARP attack defence is init v1 successful\nInterface doesn't accept private ioctl...\ntd_ssid_hide (8BDC): Operation not permitted\nInterface doesn't accept private ioctl...\ntd_ssid_hide (8BDC): Operation not permitted\nopen /dev/gsbmac failure.\nopen /dev/gsbmac failure.\nbr0: port 1(eth0) entered learning state\nKernel:Init attack fence dev success.\nthe ddos ip attack defnence init successful\nSET_LAN_PARAM_DATA k_data:\n        lan ip:3232236801\n        lan mask:4294967040\n        lan submask:3232236800\n        lan interface:br0\n        lan http port:0\nset the proceee ture\nSET_IPOP_FENCE_ATTACK_DATA k_data:\n        ip options:32512\nSET_BAD_PKT_FENCE_ATTACK_DATA k_data:\n        bad pkt:248\nSET_DDOS_FENCE_ATTACK_DATA k_data:\n        status:7\n        tcp threshold:1500\n        udp threshold:1500\n        icmp threshold:1500\nready___djc___close____guest____wifi_close_guest(4617)\ndjc___close____guest____wifi_close_guest(4623)\nconfig changed,CRC:old[3cbf4591],new[3d7bd411]\nmib_nvram_cfm_commit 1608: write mibvalue success\nwrite config to flash......ok\nifconfig: SIOCGIFFLAGS: No such device\nifconfig: SIOCGIFFLAGS: No such device\nifconfig: SIOCGIFFLAGS: No such device\nifconfig: SIOCGIFFLAGS: No such device\nifconfig: SIOCGIFFLAGS: No such device\nifconfig: SIOCGIFFLAGS: No such device\nifconfig: SIOCGIFFLAGS: No such device\nifconfig: SIOCGIFFLAGS: No such device\n/bin/sh: wlanapp.sh: not found\ndevice wlan1 entered promiscuous mode\nWlanSupportAbility = 0x3\navailable channels[US]: 1 2 3 4 5 6 7 8 9 10 11 \nbr0: topology change detected, propagating\n\nbr_topology_change_detection, clear br0 fdb ...\nbr_topology_change_detection, clear shortcut cache...\nbr0: port 1(eth0) entered forwarding state\nMDID is null !!, set default MDID\n[ODM_software_init] \n[97F] Bonding Type 97FS, PKG1\n[97F] RFE type 5 PHY paratemters: GPA1+GLNA1\nclock 40MHz\nload efuse ok\nrom_progress: 0x200006f\nrom_progress: 0x400006f\n[GetHwReg88XX][PHY_REG_PG_8197Fmp_Type5] size\n[GetHwReg88XX][PHY_REG_PG_8197Fmp_Type5]\n[GetHwReg88XX][rtl8197Ffw]\n[GetHwReg88XX][rtl8197Ffw size]\n[97F] Default BB Swing=20\n\nmesh_passphrase_update, before encrypt\n65 39 66 66 34 64 32 66 62 65 37 38 30 30 36 30 \n\nmesh_passphrase_update, after encrypt\n64 34 38 dd 13 2c 3b ad 7b d1 93 8e 8c a8 be 34 \nbr0: port 2(wlan1) entered listening state\nbr0: port 2(wlan1) entered listening state\ndevice wlan-msh entered promiscuous mode\nbr0: port 3(wlan-msh) entered listening state\nbr0: port 3(wlan-msh) entered listening state\nwifi_config_service:4505\n\n******************\nsysconf wlanapp start wlan0 wlan1 wlan0-va0 wlan1-va0 \n***************\nopen /proc/gpio: Permission denied\nopen /proc/gpio: Permission denied\nopen /proc/gpio: Permission denied\nopen /proc/gpio: Permission denied\nInit Wlan application...\n\nFT Daemon v1.0 (Jul  2 2018 10:59:15)\n\nReceive Pathsel daemon pid:1365\n[ATM] atm_swq_en on\nifconfig: SIOCGIFFLAGS: No such device\nifconfig: SIOCGIFFLAGS: No such device\nifconfig: SIOCGIFFLAGS: No such device\nifconfig: SIOCGIFFLAGS: No such device\nifconfig: SIOCGIFFLAGS: No such device\nifconfig: SIOCGIFFLAGS: No such device\nifconfig: SIOCGIFFLAGS: No such device\nifconfig: SIOCGIFFLAGS: No such device\n/bin/sh: wlanapp.sh: not found\n!!! adjust 5G 2ndoffset for 8812 !!!\nbr0: port 2(wlan1) entered learning state\nbr0: port 3(wlan-msh) entered disabled state\ndevice wlan0 entered promiscuous mode\nWlanSupportAbility = 0x3\navailable channels[US]: 36 40 44 48 149 153 157 161 165 \nMDID is null !!, set default MDID\n[hard_code_8822_mibs] +++ \nMAX_RX_BUF_LEN = 8000 \n[ODM_software_init] \nclock 40MHz\nInitPON OK!!!\nload efuse ok\nrom_progress: 0x200006f\nrom_progress: 0x400006f\nInitMAC Page0 \nInit Download FW OK \nhalmac_init_mac_cfg OK\nhalmac_cfg_rx_aggregation OK\nhalmac_init_mac_cfg OK\n[GetHwReg88XX][size PHY_REG_PG_8822Bmp_Type6]\n[GetHwReg88XX][PHY_REG_PG_8822Bmp_Type6]\nRL6302_MAC_PHY_Parameter_v018_20140708\n[set_8822_trx_regs] +++ \n********************************\n8822 efuse content 0x3D7 = 0xf4\n8822 efuse content 0x3D8 = 0xf5\n********************************\n\nmesh_passphrase_update, before encrypt\n65 39 66 66 34 64 32 66 62 65 37 38 30 30 36 30 \n\nmesh_passphrase_update, after encrypt\n64 34 38 dd 13 2c 3b ad 7b d1 93 8e 8c a8 be 34 \nbr0: port 4(wlan0) entered listening state\nbr0: port 4(wlan0) entered listening state\nbr0: port 3(wlan-msh) entered listening state\nbr0: port 3(wlan-msh) entered listening state\nwifi_config_service:4505\n\n******************\nsysconf wlanapp start wlan0 wlan1 wlan0-va0 wlan1-va0 \n***************\nopen /proc/gpio: Permission denied\nopen /proc/gpio: Permission denied\nopen /proc/gpio: Permission denied\nopen /proc/gpio: Permission denied\n\nFT Daemon v1.0 (Jul  2 2018 10:59:15)\n\nInit Wlan application...\nReceive Pathsel daemon pid:1502\n==Set ssid close\n==Set ssid close\nbr0: topology change detected, propagating\n\nbr_topology_change_detection, clear br0 fdb ...\nbr_topology_change_detection, clear shortcut cache...\nbr0: port 2(wlan1) entered forwarding state\n[ATM] atm_swq_en on\nwifi_config_service:4505\n\n******************\nsysconf wlanapp start wlan0 wlan1 wlan0-va0 wlan1-va0 \n***************\nopen /proc/gpio: Permission denied\nopen /proc/gpio: Permission denied\nopen /proc/gpio: Permission denied\nopen /proc/gpio: Permission denied\n\nFT Daemon v1.0 (Jul  2 2018 10:59:15)\n\nInit Wlan application...\nReceive Pathsel daemon pid:1538\n/bin/sh: et: not found\n/bin/sh: et: not found\n/bin/sh: et: not found\n/bin/sh: et: not found\nhw_nat_config 113: #####################flags = 1\nhw_nat_config 131: ##########enable = 1\nhw_nat_config 152: set /proc/hw_nat to 0\ncat /proc/hw_nat\n0 \n\nsteering_proc_band_steering_mode_write, local band steering mode Prefer-5GHz\ncheck timer start success\nargv[0] = pann\npann\nargv[0] = gpio_ctrl\ngpio_ctrl\nargv[0] = mesh_status_check\nmesh_status_check\nargv[0] = network_check\nnetwork_check\nUser set flags:1\n=== set mesh_local.registerd = registered(2)\nbr0: port 4(wlan0) entered learning state\nPhy[0] down\nPhy[1] down\nPhy[2] down\nPhy[3] down\nPhy[4] down\nbr0: port 3(wlan-msh) entered learning state\n[arainc][multiWAN is not exit]netctrl_phy_link_status_change(1381)\nifconfig: SIOCSIFFLAGS: Cannot assign requested address\n[netctrl_lan_services_ctrl][354] dhcpcd_lan is already exit! \nargv[0] = redis-server\nargv[1] = /etc_ro/redis.conf\nredis-server\nargv[0] = cmdsrv\nargv[1] = -l\nargv[2] = tcp://0.0.0.0:12598\nargv[3] = -R\nargv[4] = tcp://127.0.0.1:6379\ncmdsrv\nargv[0] = confsrv\nconfsrv\n[get_ip_sg][313]ip : 192.168.11.1\n[get_ip_sg][313]ip : 192.168.5.1\n[1586] 01 May 00:00:11.607 * Max number of open files set to 10032\n[1586] 01 May 00:00:11.608 # Warning: 32 bit instance detected but no memory limit set. Setting 3 GB maxmemory limit with 'noeviction' policy now.\niptables: Bad rule (does a matching rule exist in that chain?).\niptables: Bad rule (does a matching rule exist in that chain?).\n[dhcps_handle][784]pCurrentCfg is NULL, NewCfgEnable = 1\n                _._                                                  \n           _.-``__ ''-._                                             \n      _.-``    `.  `_.  ''-._           Redis 2.6.17 (00000000/0) 32 bit\n  .-`` .-```.  ```\\/    _.,_ ''-._                                   \n (    '      ,       .-`  | `,    )     Running in stand alone mode\n |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379\n |    `-._   `._    /     _.-'    |     PID: 1586\n  `-._    `-._  `-./  _.-'    _.-'                                   \n |`-._`-._    `-.__.-'    _.-'_.-'|                                  \n |    `-._`-._        _.-'_.-'    |           http://redis.io        \n  `-._    `-._`-.__.-'_.-'    _.-'                                   \n |`-._`-._    `-.__.-'    _.-'_.-'|                                  \n |    `-._`-._        _.-'_.-'    |                                  \n  `-._    `-._`-.__.-'_.-'    _.-'                                   \n      `-._    `-.__.-'    _.-'                                       \n          `-._        _.-'                                           \n              `-.__.-'                                               \n\n[1586] 01 May 00:00:11.803 # Server started, Redis version 2.6.17\n[1586] 01 May 00:00:11.803 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.\n[1586] 01 May 00:00:11.803 * The server is now ready to accept connections on port 6379\n[1586] 01 May 00:00:11.803 * The server is now ready to accept connections at /tmp/redis.sock\nInit features[arainc][mpp]mesh_device_features_init(2704)\n[dhcps_save_config][641]dhcps_save_config end\nargv[0] = dhcps\nargv[1] = -C\nargv[2] = /etc/dhcps.conf\nargv[3] = -l\nargv[4] = /etc/dhcps.leases\nargv[5] = -x\nargv[6] = /etc/dhcps.pid\nargv[7] = -k\ndhcps\nbr0: topology change detected, propagating\n\nbr_topology_change_detection, clear br0 fdb ...\nbr_topology_change_detection, clear shortcut cache...\nbr0: port 4(wlan0) entered forwarding state\nbr0: port 1(eth0) entered disabled state\nSend SIGUSR2 signal from kernel to pathsel, skip for test by Jack\nbr0: topology change detected, propagating\n\nbr_topology_change_detection, clear br0 fdb ...\nbr_topology_change_detection, clear shortcut cache...\nbr0: port 3(wlan-msh) entered forwarding state\nPhy[3] up\nbr0: port 1(eth0) entered listening state\nbr0: port 1(eth0) entered listening state\n2011-05-01 00:00:12 [INFO ][uc_api_lib.c,2028][uc_api_lib_init        ] Successfully initialized the api library...\nsched_boot_set_cfg[62]   rand_num :584  \nupgrade_shced_timeout start    upgrade_sched_reboot_init_srv(2593)\n[set_mib 3371]hex format\nodm[set_mib 4037]set odm,val=0x1e\n[set_mib 3371]hex format\nodm[set_mib 4037]set odm,val=0x1e\niptables: No chain/target/match by that name.\niptables v1.4.4: Couldn't find target `dmz_forward_pre'\n\nTry `iptables -h' or 'iptables --help' for more information.\niptables: No chain/target/match by that name.\niptables v1.4.4: Couldn't find target `dmz_forward_post'\n\nTry `iptables -h' or 'iptables --help' for more information.\niptables: No chain/target/match by that name.\niptables: No chain/target/match by that name.\niptables: Index of insertion too big.\niptables: No chain/target/match by that name.\niptables: No chain/target/match by that name.\niptables v1.4.4: Couldn't find target `port_forward_pre'\n\nTry `iptables -h' or 'iptables --help' for more information.\niptables v1.4.4: Couldn't find target `port_forward_post'\n\nTry `iptables -h' or 'iptables --help' for more information.\niptables: No chain/target/match by that name.\niptables: No chain/target/match by that name.\niptables: No chain/target/match by that name.\niptables v1.4.4: Couldn't find target `web_wanadmin'\n\nTry `iptables -h' or 'iptables --help' for more information.\niptables: No chain/target/match by that name.\n[device_list_cmd_sub][1385][luminais] invalid param.\niptables: No chain/target/match by that name.\niptables v1.4.4: Couldn't find target `web_wanadmin'\n\nTry `iptables -h' or 'iptables --help' for more information.\niptables: No chain/target/match by that name.\niptables: No chain/target/match by that name.\niptables v1.4.4: Couldn't find target `MINIUPNPD'\n\nTry `iptables -h' or 'iptables --help' for more information.\niptables: No chain/target/match by that name.\nminiupnpd.c,871,ver=1.0,osname=Nova,osver=1.0,osurl=http://www.tendacn.com/,manuft=Tenda,descri=Nova\nbr0: port 1(eth0) entered learning state\nchange_opmode: wan_prev_link_flag=1, lan_prev_link_flag=0\nbr0: port 1(eth0) entered disabled state\ndevice eth0 left promiscuous mode\nbr0: port 1(eth0) entered disabled state\nbrctl: bridge br0: Invalid argument\nset_hw_nat 158: set /proc/hw_nat to 1\n/proc/hw_nat now is 1\n\n[Rtl83xx Ethernet Driver][RTL83XX_vlan_set][901]: failed!(0x3)\nRTNETLINK answers: No such file or directory\nargv[0] = ucloud\nargv[1] = -l\nargv[2] = 4\nucloud\nkillall: telnet_ate_monitor: no process killed\nPhy[3] down\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c,1938][ucloud_event_accept2   ] accept ucloud session 16\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c,1952][ucloud_event_accept2   ] traversal notify info\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_CLOUD_INFO_MESH_NODE_A[14] in module: M_CLOUD_INFO[8]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_CLOUD_INFO_DEV_UPLOAD_STATU[20] in module: M_CLOUD_INFO[8]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_CLOUD_INFO_DEV_UPLOAD_DEVIC[18] in module: M_CLOUD_INFO[8]...\n2011-05-01 00:00:16 =Set ssid open\nm[INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_CL==Set ssid open\nOUD_INFO_DEV_MARK_LIST_A[21] in module: M_CLOUD_INFO[8]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_CLOUD_INFO_DEV_CONFIG_TIME_[23] in module: M_CLOUD_INFO[8]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_CLOUD_INFO_DEV_CONFIG_A[25] in module: M_CLOUD_INFO[8]...\nenable cloud info OK\ninit_device_attr_desc(2680)\nget_mesh_info(2614)\nget_mesh_info(2650)\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_CLOUD_INFO_MESH_SET[11] in module: M_CLOUD_INFO[8]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_CLOUD_INFO_CHECK_MEMORY[0] in module: M_CLOUD_INFO[8]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_CLOUD_INFO_BEGIN_UPGRADE[4] in module: M_CLOUD_INFO[8]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c,1955][ucloud_event_accept2   ] Init Modules\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: MESH_WAN_SET[1] in module: MESH_WAN[18]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: MESH_WAN_GET[2] in module: MESH_WAN[18]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_WAN_DETECT[3] in module: M_MESH_WAN[18]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_WAN_STATUS[0] in module: M_MESH_WAN[18]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_WAN_DIAG[4] in module: M_MESH_WAN[18]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_WAN_LINEUP_GET[7] in module: M_MESH_WAN[18]...\n2011-05-01 Receive Pathsel daemon pid:2004\n00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_WAN_TRAFFIC[8] in module: M_MESH_WAN[18]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_WLAN_GET[1] in module: M_MESH_WLAN[19]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_WLAN_SET[0] in module: M_MESH_WLAN[19]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_WLAN_GET[3] in module: M_MESH_WLAN[19]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_WLAN_SET[2] in module: M_MESH_WLAN[19]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_WLAN_ROAMING_GET[4] in module: M_MESH_WLAN[19]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_WLAN_ROAMING_SET[5] in module: M_MESH_WLAN[19]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_BASIC_SUILT[0] in module: M_MESH_BASIC[16]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_BASIC_TZ_SET[1] in module: M_MESH_BASIC[16]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_BASIC_TIME_SET[2] in module: M_MESH_BASIC[16]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_BASIC_LANG_SET[3] in module: M_MESH_BASIC[16]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_BASIC_FAST_DONE[4] in module: M_MESH_BASIC[16]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_BASIC_GET_MESH_ID[5] in module: M_MESH_BASIC[16]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_BASIC_UPLOAD_LOG[6] in module: M_MESH_BASIC[16]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_NODE_BROWS[0] in module: M_MESH_NODE[17]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_NODE_ADD[1] in module: M_MESH_NODE[17]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_NODE_DEL[2] in module: M_MESH_NODE[17]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_NODE_SET_LOCATION[3] in module: M_MESH_NODE[17]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_NODE_SET_LED[4] in module: M_MESH_NODE[17]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_NODE_QUERY_RSLT[5] in module: M_MESH_NODE[17]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_NODE_MULTI_UPGRADE_STA[6] in module: M_MESH_NODE[17]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_NODE_MANUAL_ADD[7] in module: M_MESH_NODE[17]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_HOSTS_GET[0] in module: M_MESH_HOSTS[20]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_HOSTS_MARK[1] in module: M_MESH_HOSTS[20]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_HOSTS_GET_REMARK[2] in module: M_MESH_HOSTS[20]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_MF_GET[0] in module: M_MESH_MACFILTER[21]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_MF_SET[1] in module: M_MESH_MACFILTER[21]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_FAMILY_GET_TMGRP[0] in module: M_MESH_FAMILY[22]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_FAMILY_SET_TMGRP[1] in module: M_MESH_FAMILY[22]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_FAMILY_GET_USRGRP[2] in module: M_MESH_FAMILY[22]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_FAMILY_SET_USRGRP[3] in module: M_MESH_FAMILY[22]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_FAMILY_GET_FMLYGRP[4] in module: M_MESH_FAMILY[22]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_FAMILY_SET_FMLYGRP[5] in module: M_MESH_FAMILY[22]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_ADV_PORTFWD_GET[0] in module: M_MESH_ADVANCE[23]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_ADV_PORTFWD_SET[1] in module: M_MESH_ADVANCE[23]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_ADV_UPNP_GET[2] in module: M_MESH_ADVANCE[23]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_ADV_UPNP_SET[3] in module: M_MESH_ADVANCE[23]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_ADV_MAINT_GET[4] in module: M_MESH_ADVANCE[23]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_ADV_MAINT_SET[5] in module: M_MESH_ADVANCE[23]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_ADV_DHCPS_GET[6] in module: M_MESH_ADVANCE[23]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_ADV_DHCPS_SET[7] in module: M_MESH_ADVANCE[23]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_ADV_QOS_GET[8] in module: M_MESH_ADVANCE[23]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_ADV_QOS_SET[9] in module: M_MESH_ADVANCE[23]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_ADV_DEV_ASSISTANT_GET[10] in module: M_MESH_ADVANCE[23]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_ADV_DEV_ASSISTANT_SET[11] in module: M_MESH_ADVANCE[23]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_ADV_SHAREDACC_GET[12] in module: M_MESH_ADVANCE[23]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_ADV_HIGH_DEVICE_GET[15] in module: M_MESH_ADVANCE[23]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_ADV_HIGH_DEVICE_SET[16] in module: M_MESH_ADVANCE[23]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_CLOUD_VERSION_Q[24] in module: M_CLOUD[3]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_CLOUD_INFO_CLEAR_ACC_ACK[9] in module: M_CLOUD_INFO[8]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_CLOUD_INFO_ACCOUNT_INFO_A[16] in module: M_CLOUD_INFO[8]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_MNGMT_GET_STA[0] in module: M_MESH_AUTH[24]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_MESH_MNGMT_LOGIN[1] in module: M_MESH_AUTH[24]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_SYS_BASIC_INFO_GET[0] in module: M_SYS[1]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_CATEGORY_MESH[1] in module: M_CATEGORY[15]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_COMMON_SUCCESS[0] in module: M_COMMON[0]...\n2011-05-01 00:00:16 [INFO ][uc_api_lib.c, 344][uc_api_lib_cmd_register] Successfully registered command: CMD_COMMON_FAILURE[1] in module: M_COMMON[0]...\nargv[0] = sntp\nargv[1] = 1\nargv[2] = 10800\nargv[3] = 43200\nsntp\nmain,297,sntp_en =1,tz_offset_sec=10800,checktime=43200\nwifi_config_service:4505\n\n******************\nsysconf wlanapp start wlan0 wlan1 wlan0-va0 wlan1-va0 \n***************\nopen /proc/gpio: Permission denied\nopen /proc/gpio: Permission denied\nopen /proc/gpio: Permission denied\nopen /proc/gpio: Permission denied\nInit Wlan application...\n\nFT Daemon v1.0 (Jul  2 2018 10:59:15)\n\nchange_opmode: sleep 1s for NIC restart.\nchange_opmode: sleep 2s for NIC restart.\nwifi_config_service:4505\n\n******************\nsysconf wlanapp start wlan0 wlan1 wlan0-va0 wlan1-va0 \n***************\nopen /proc/gpio: Permission denied\nopen /proc/gpio: Permission denied\nopen /proc/gpio: Permission denied\nopen /proc/gpio: Permission denied\n\nFT Daemon v1.0 (Jul  2 2018 10:59:15)\n\nInit Wlan application...\nReceive Pathsel daemon pid:2078\n[arainc][multiWAN is not exit]netctrl_phy_link_status_change(1381)\nchange_opmode: sleep 3s for NIC restart.\ndevice eth0 entered promiscuous mode\nbr0: port 1(eth0) entered listening state\nbr0: port 1(eth0) entered listening state\n[arainc][multiWAN is not exit]netctrl_phy_link_status_change(1381)\nchange_opmode: sleep 1s for port reverted.\n###fd failed to recv packet!###\n##### NO SERVER FOUND! #####\nbr0: port 1(eth0) entered learning state\nbr0: port 2(wlan1) entered disabled state\nchange_opmode: sleep 2s for port reverted.\nifconfig: SIOCGIFFLAGS: No such device\nifconfig: SIOCGIFFLAGS: No such device\nifconfig: SIOCGIFFLAGS: No such device\nifconfig: SIOCGIFFLAGS: No such device\nifconfig: SIOCGIFFLAGS: No such device\nifconfig: SIOCGIFFLAGS: No such device\nifconfig: SIOCGIFFLAGS: No such device\nifconfig: SIOCGIFFLAGS: No such device\n/bin/sh: wlanapp.sh: not found\nbr0: port 3(wlan-msh) entered disabled state\nWlanSupportAbility = 0x3\navailable channels[US]: 1 2 3 4 5 6 7 8 9 10 11 \n[ODM_software_init] \n[97F] Bonding Type 97FS, PKG1\n[97F] RFE type 5 PHY paratemters: GPA1+GLNA1\nclock 40MHz\nload efuse ok\nrom_progress: 0x200006f\nrom_progress: 0x400006f\n[GetHwReg88XX][PHY_REG_PG_8197Fmp_Type5] size\n[GetHwReg88XX][PHY_REG_PG_8197Fmp_Type5]\n[GetHwReg88XX][rtl8197Ffw]\n[GetHwReg88XX][rtl8197Ffw size]\n[97F] Default BB Swing=20\n\nmesh_passphrase_update, before encrypt\n65 39 66 66 34 64 32 66 62 65 37 38 30 30 36 30 \n\nmesh_passphrase_update, after encrypt\n64 34 38 dd 13 2c 3b ad 7b d1 93 8e 8c a8 be 34 \nbr0: port 2(wlan1) entered listening state\nbr0: port 2(wlan1) entered listening state\nbr0: port 3(wlan-msh) entered listening state\nbr0: port 3(wlan-msh) entered listening state\nwifi_config_service:4505\n\nchange_opmode: sleep 3s for port reverted.\n******************\nsysconf wlanapp start wlan0 wlan1 wlan0-va0 wlan1-va0 \n***************\nopen /proc/gpio: Permission denied\nopen /proc/gpio: Permission denied\nopen /proc/gpio: Permission denied\nopen /proc/gpio: Permission denied\nInit Wlan application...\n\nFT Daemon v1.0 (Jul  2 2018 10:59:15)\n\nReceive Pathsel daemon pid:2394\n[ATM] atm_swq_en on\nbr0: topology change detected, propagating\n\nbr_topology_change_detection, clear br0 fdb ...\nbr_topology_change_detection, clear shortcut cache...\nbr0: port 1(eth0) entered forwarding state\nchange_opmode: sleep 4s for port reverted.\nbr0: port 2(wlan1) entered learning state\nbr0: port 3(wlan-msh) entered learning state\nchange_opmode: sleep 5s for port reverted.\nchange_opmode: sleep 6s for port reverted.\nbr0: topology change detected, propagating\n\nbr_topology_change_detection, clear br0 fdb ...\nbr_topology_change_detection, clear shortcut cache...\nbr0: port 2(wlan1) entered forwarding state\nSend SIGUSR2 signal from kernel to pathsel, skip for test by Jack\nbr0: topology change detected, propagating\n\nbr_topology_change_detection, clear br0 fdb ...\nbr_topology_change_detection, clear shortcut cache...\nbr0: port 3(wlan-msh) entered forwarding state\nchange_opmode: sleep 7s for port reverted.\nchange_opmode: sleep 8s for port reverted.\nchange_opmode: sleep 9s for port reverted.\nchange_opmode: sleep 10s for port reverted.\nchange_opmode: sleep 11s for port reverted.\nPhy[3] up\n[arainc][multiWAN is not exit]netctrl_phy_link_status_change(1381)\nchange_opmode: sleep 12s for port reverted.\nchange_opmode: NIC restart finished.(WAN:1,LAN:0)\nsrc/prod_common_rtl_fn_delete: failed del route from rtl865x!\nhal.c,add_local_route_to_switch,179: config (192.168.5.0,255.255.255.0,br0) to the Realtek ASIC L3 Routing Table\n[hw_nat_msg_handle][245]var-\u003eop 3\n[set_hw_nat_by_guest_network][76]guest network is close!\neth1 has been deleted from br0!\nhw_nat_config 113: #####################flags = 1\nhw_nat_config 131: ##########enable = 1\nhw_nat_config 152: set /proc/hw_nat to 0\ncat /proc/hw_nat\nwandial_handle(231)\n0 \n\n[arainc][ctrl_op = 1]netctrl_moudle_multiwan_handle(22)\nargv[0] = multiWAN\nmultiWAN\nmultiWAN -\u003e multiwan_bad_sig_entry [18]...ct = 9\nopen:: No such file or directory\nmultiWAN -\u003e multiwan_bad_sig_entry [18]...ct = 8\niptables: No chain/target/match by that name.\nmultiWAN -\u003e multiwan_bad_sig_entry [18]...ct = 7\niptables: No chain/target/match by that name.\nmultiWAN -\u003e multiwan_bad_sig_entry [18]...ct = 6\nmultiWAN -\u003e multiwan_bad_sig_entry [18]...ct = 5\nmultiWAN -\u003e multiwan_bad_sig_entry [18]...ct = 4\nmultiWAN -\u003e multiwan_bad_sig_entry [18]...ct = 3\niptables: No chain/target/match by that name.\nmultiWAN -\u003e multiwan_bad_sig_entry [18]...ct = 2\nmultiWAN -\u003e multiwan_bad_sig_entry [18]...ct = 1\nmultiWAN -\u003e multiwan_bad_sig_entry [18]...ct = 0\niptables: No chain/target/match by that name.\niptables: No chain/target/match by that name.\nargv[0] = dhcpcd_wan1\nargv[1] = -c\nargv[2] = /etc/wan1.ini\nargv[3] = -m\nargv[4] = 1\nargv[5] = eth1\nargv[6] = -h\nargv[7] = NOVA-0495e61a96e0\nargv[8] = -x\nargv[9] = /etc/dhcpc-wan-up1.sh\ndhcpcd_wan1\nprogram_name = dhcpcd_lan\nkillall: dhcpcd_lan: no process killed\n[multiwan_msg_handle][2849]recv_info-\u003eSendPid = 7, recv_info-\u003eSendMid = 7, recv_info-\u003eRecvPid = 5, recv_info-\u003eRecvMid = 5\nganda_debug--[igmp_start]107 IGMP UP!!!\niptables: Bad rule (does a matching rule exist in that chain?).\niptables: Bad rule (does a matching rule exist in that chain?).\n*TBQ* disabling tbq ...\n*TBQ* tbq enqueue handlers is disabled\nigmpproxy, Version 0.1 beta2, Build 170904 \nCopyright 2005 by Johnny Egeland \u003cj*TBQ* notify disable done in timer func\nohnny@rlo.org\u003e\n*TBQ* tbq backlog is cleared\nDistributed unde*TBQ* tbq disabled\nr the GNU GENERAL PUBLIC LICENSE, Version 2 - check GPL.txt\n\nupdate_hwnat_setting 383:/proc/hw_nat now is 0 \nroute: SIOCDELRT: No such process\n[multiwan_set_route_single_wan][1308][luminais] add_default_route_success\n[getAllWanDns][125]wan1.manual.dns.en = 0\n[getAllWanDns][187]dns_buf =  -s 192.168.3.1\nargv[0] = dnrd\nargv[1] = -t\nargv[2] = 3\nargv[3] = -M\nargv[4] = 600\nargv[5] = --cache=off\nargv[6] = -b\nargv[7] = -R\nargv[8] = /etc/dnrd\nargv[9] = -r\nargv[10] = 3\nargv[11] = -s\nargv[12] = 192.168.3.1\ndnrd\n[lan_wan_ip_conflict_check][707][luminais] wan : 192.168.3.140/255.255.255.0\nNotice: caching turned off\n[lan_wan_ip_conflict_check][722][luminais] br0 : 192.168.5.1/255.255.255.0\n[multiwan_msg_handle][2849]recv_info-\u003eSendPid = 4, recv_info-\u003eSendMid = 4, recv_info-\u003eRecvPid = 5, recv_info-\u003eRecvMid = 5\nopen /dev/flow failed:: No such file or directory\niptables: No chain/target/match by that name.\niptables v1.4.4: Couldn't find target `icmp_access'\n\nTry `iptables -h' or 'iptables --help' for more information.\n*TBQ* tbq is not running\n*TBQ* config size: 278\n*TBQ* Operation not set\n*TBQ* wanid=ffffffff set\n*TBQ* config.Rules[n].IpIncluded not set\n*TBQ* config.Rules[n].UserIncluded not set\n*TBQ* config.Rules[n].AppIncluded not set\n*TBQ* MaxBacklogPackets set to: 9999\n*TBQ* reloading tbq ...\n*TBQ* tbq reloaded\n*TBQ* ------------- TBQ CONFIG (rule count: 1) -------------\n*TBQ* ~~~~~~~~~ TBQ RULE [UI-GLOBAL] ~~~~~~~~~\n*TBQ* global out tokens_per_jiffy: 1280000\n*TBQ* user   out tokens_per_jiffy: 1280000\n*TBQ* global in tokens_per_jiffy: 1280000\n*TBQ* user   in tokens_per_jiffy: 1280000\n*TBQ* max_backlog_packets:  9999\n*TBQ* latency_shift:        7\n*TBQ* disable_timeout:      2\n*TBQ* ------------------------------------------\n*TBQ* tbq enabled\nkillall: xl2tpd-server: no process killed\niptables: No chain/target/match by that name.\niptables: Chain already exists.\niptables: Chain already exists.\niptables: No chain/target/match by that name.\niptables v1.4.4: Couldn't find target `web_wanadmin'\n\nTry `iptables -h' or 'iptables --help' for more information.\niptables: No chain/target/match by that name.\niptables: No chain/target/match by that name.\niptables v1.4.4: Couldn't find target `web_wanadmin'\n\nTry `iptables -h' or 'iptables --help' for more information.\niptables: No chain/target/match by that name.\nminiupnpd.c,871,ver=1.0,osname=Nova,osver=1.0,osurl=http://www.tendacn.com/,manuft=Tenda,descri=Nova\n[hw_nat_msg_handle][245]var-\u003eop 2\n[set_hw_nat_by_guest_network][76]guest network is close!\nhw_nat_config 113: #####################flags = 0\nhw_nat_config 131: ##########enable = 0\n[fill_cloud_info_device_lists_rate][2600][luminais] NULL == g_ip_info\ncat /proc/hw_nat\n[mib_load_manage][472][luminais] GetBasicInfo [0]\n0 \n\n[mib_save_manage][532][luminais] AccoutACK [0]\ndev_mark_list_a(72)\n[dev_mark_list_a][75]\n[upload_local_diff_remark_to_cloud][2270][luminais] all client remark same with cloud.\n[mesh_node_a][242]\n[cloud_mesh_node_handle][3977]\n[save_mesh_node_group_conf][387][kg] groupsn = 181285920113001948\nnot need to write flash,crc:[3d7bd411]\ncommit cfm failed or not need write flash\nnot need to write flash,crc:[3d7bd411]\ncommit cfm failed or not need write flash\n  s_time :1562925999991 \nconfig_time :1562925999991    local_time:1562925999991    \ntelnet_ate_monitor_recv(166)\ntelnet_ate_monitor_recv(166)\n\n[hw_nat_msg_handle][245]var-\u003eop 1\n[set_hw_nat_by_guest_network][76]guest network is close!\nhw_nat_config 113: #####################flags = 1\nhw_nat_config 131: ##########enable = 0\ncat /proc/hw_nat\n0 \n\nNormal startupGive root password for system maintenance\n(or type Control-D for normal startup):\n\n```\n\u003c/spoiler\u003e\nКонсоль приглашает зайти, но без пароля рута не пускает.\n\n## Flash\nКитайская на 146% SPI flash BOHONG BH25Q64 на 8 Мб. [Datasheet](http://www.hhzealcore.com/upload/201807/02/201807021644551022.pdf)\n\n# Прошивка, то бишь firmware\nПрошивку скачать с просторов интернета не удалось. Приложение на телефоне само скачивает прошивки из китайского Tenda облака, причем по своему протоколу, как выяснилось позже. Мои кубики имеют последнюю прошивку, по-этому вынюхать, откуда скачивается прошивка, не удалось.\n\n## Давайте просто снимем дамп с флешки\nСначала попробовал надеть сверху на чип клещи и считать прошивку - но, как и ожидалось, у меня этого не получилось, т.к. запитывая флешку, запустился процессор и пошло поехало. Резать дорожки не хотелось, поэтому решил выпаять. Огородив окрестности ~~Онежского озера~~ окаянного отпрыска китайской промышленности каптоновым скотчем - подогрел феном и выпаял зверушку по-македонски - двумя паяльниками. Ну и хочется динамичности в процессе смены прошивок - подпаял хвостики для кроватки. \n\n![Так удобнее перепрошивать флешку](https://habrastorage.org/webt/1s/lx/5y/1slx5ym__-ijau-wa67juovqtnc.jpeg)\n\n## Чем бы снять дамп?\nФлешки я читаю раз в пять лет, надобности нет, а соответственно - и программаторов для них. В закромах нашел платку FTDI FT2232H, которой я пользовался для отладки ESP32 через JTAG + OpenOCD. Оказалось, она много чего умеет. В том числе и SPI в режиме мастера. Нагуглил на нее даташит и записал распиновку при подключении к первому каналу (порту):\n\n| FT2232H      | Function | Нога на флешке |\n|--------------|----------|----------------|\n| ADBUS0       | SCK      | 6 |\n| ADBUS1       | MOSI     | 5 |\n| ADBUS2       | MISO     | 2 |\n| ADBUS3       | CS       | 1 |\n\nОставшиеся ножки флешки 4 - GND, 8, 3 и 7 - VCC 3.3v.\n\n![Подключение к FT2232H](https://habrastorage.org/webt/-y/8f/if/-y8fifqkmlw-h9i4qjkxgutto1w.jpeg)\n\n### Flashrom\nПараллельно поиску железяк в закромах нагуглил [flashrom](https://flashrom.org) - популярная утилитка для работы с флешками.\n\nЗапускаем...\n```\n$ flashrom -p ft2232_spi:type=2232H,port=A\n```\n...и, вообщем, смотрим в книгу - видим фигу.\n\u003cspoiler title=\"$ flashrom v0.9.9-r1954 on Linux 4.18.0-25-generic (x86_64)\"\u003e\n```\nflashrom is free software, get the source code at https://flashrom.org \n \nCalibrating delay loop... OK.\nFound Generic flash chip \"unknown SPI chip (RDID)\" (0 kB, SPI) on ft2232_spi.\n===\nThis flash part has status NOT WORKING for operations: PROBE READ ERASE WRITE \nThe test status of this chip may have been updated in the latest development \nversion of flashrom. If you are running the latest development version,\nplease email a report to flashrom@flashrom.org if any of the above operations\nwork correctly for you with this flash chip. Please include the flashrom log \nfile for all operations you tested (see the man page for details), and mention \nwhich mainboard or programmer you tested in the subject line.\nThanks for your help!\nNo operations were specified.\n```\n\u003c/spoiler\u003e\n\nК сожалению, флешка черезчур китайская, софтинка её понимать отказалась, а может ли она работать в каком-то \"стандартном\" или \"generic\" режиме я не понял. \n\n### Ардуины спешат на помощь. Ну и esp8266 с ними.\nОпять пошел гуглить. Нагуглил древнюю поделку [доброго человека с сайта Технохрень](http://skproj.ru/programmator-spi-flash-svoimi-rukami/). Комплект из скетча для ардуины и приложения на .NET.\n\nПоразмыслив, что для ардуины придется городить согласование уровней 3.3в и 5в - взял из закромов платку NodeMCU на `esp8266`. Она на 3.3в. \nСкетч запустился без проблем, правда я никак не мог флешку прочитать - после пары научных тыков преподключил флешку ко второму SPI порту, который называется HSPI и выведен на ноги `GPIO 12..14` согласно [официальной документации](https://nodemcu.readthedocs.io/en/master/modules/spi/).\n\n- **NB** Надо сказать, что `flashrom` еще умеет работать с программатором `serprog`, в который собственно можно превратить любую 8-битную AVRку, включая ардуины. Но, к сожалению, быстрый гуглинг порта для esp8266 не дал результатов.\n\n![esp8266 HSPI](https://habrastorage.org/webt/om/sm/wh/omsmwhqfehfvjghfkq_5jqqupde.jpeg)\n\n### Дайте нормальную флешку!\nВообщем, чтобы не париться с китайской флешкой, в небезызвестном своими ценовыми политиками магазине имени двух бурундуков приобрел за огромные деньги в 110 рублей (2 USD) нормальную флешку Winbond W25Q64FV. Куда тут же залил считанный дамп и воткнул в кубик.\n```\n$ flashrom -p ft2232_spi:type=2232H,port=A -w all.bin\n```\nTenda флешку подхватила и запустилась, как ни в чем не бывало. (Хотя, по-моему, она разок перезагрузилась, переписав что-то в конфиге/облаке. Не заметил что именно).\n\n## А ну-ка, давай-ка\nВ прошивке что-то есть. По крайней мере, binwalk нашел всякого. Как я понял - достаточно стандартно для таких железяк.\nПопробуем раскопать, что-нибудь исправить и закопать обратно.\n\n\u003cspoiler title=\"$ binwalk all.bin\"\u003e\n```\nDECIMAL       HEXADECIMAL     DESCRIPTION\n--------------------------------------------------------------------------------\n35096         0x8918          CRC32 polynomial table, little endian\n36192         0x8D60          gzip compressed data, maximum compression, from Unix, last modified: 2018-04-20 02:17:42\n206872        0x32818         LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 6890804 bytes\n2261010       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\n6160384       0x5E0000        JFFS2 filesystem, little endian\n```\n\u003c/spoiler\u003e\n\nСразу распаковывать не стал. Еще первый раз в bootlog-е видел, что мелькала разбивка флешки на разделы - сначала разбил командой `dd` на соответствующие куски, а потом уже играл с `binwalk`.\n\n\u003cspoiler title=\"bootlog : mtd partitions\"\u003e\n```\nflash vendor: BOHONG\nm25p80 spi0.0: BH25Q64 (8192 Kbytes) (55000000 Hz)\nm25p80 spi0.0: change speed to 55000000Hz, div 2\nKernel code size:0x1f8012\n9 rtkxxpart partitions found on MTD device m25p80\nCreating 9 MTD partitions on \"m25p80\":\n0x000000000000-0x000000800000 : \"ALL\"\n0x000000000000-0x000000020000 : \"Bootloader\"\n0x000000020000-0x000000030000 : \"CFG\"\n0x000000030000-0x0000005c0000 : \"KernelFS\"\n0x000000228012-0x0000005c0000 : \"RootFS\"\n0x0000005c0000-0x0000005d0000 : \"CFM\"\n0x0000005d0000-0x0000005e0000 : \"CFM_BACKUP\"\n0x0000005e0000-0x0000007f0000 : \"LOG\"\n0x0000007f0000-0x000000800000 : \"ENV\"\n```\n\u003c/spoiler\u003e\n\nПример вырезания RootFS из файла прошивки `all.bin`: \n```\n$ dd if=all.bin of=RootFS.bin bs=1 skip=$((0x228012)) count=$((0x5c0000-0x228012))\n```\n\nЯ не специалист, но мне кажется странным, что согласно разметке раздел RootFS находится внутри KernelFS.\n\nКроме того, устройство ядра для меня загадка, поэтому его трогать не стал.\n\nВесть процесс загрузки, как я понял, почти прямолинеен:\n - сначала процессор отображает флешку к себе в память,\n - запускает bootloader,\n - bootloader проверяет, не хочет ли кто-то по TFTP загрузить новую прошивку,\n - после чего он грузит уже ядро.\n\n## RootFS\nРаспаковать файловую систему элементарно - `unsquashfs RootFS.bin`. В результате работы появляется папка `squashfs-root` с деревом папок/файлов. \n\n- Тут уже есть, что посмотреть! - подумал я.\n\n\ncat `/etc_ro/passwd`\n```\nroot:$1$nalENqL8$jnRFwb1x5S.ygN.3nwTbG1:0:0:root:/:/bin/sh\n```\ncat `/etc_ro/shadow`\n```\nroot:$1$OVhtCyFa$7tISyKW1KGssHAQj1vI3i1:14319::::::\n```\ncat `/etc_ro/inittab`\n```\n::sysinit:/etc_ro/init.d/rcS\nttyS0::respawn:/sbin/sulogin\n::ctrlaltdel:/bin/umount -a -r\n::shutdown:/usr/sbin/usb led_off\n```\n\n\u003cspoiler title=\"В `/etc_ro/fstab` ничего интересного.\"\u003e\n```\nproc            /proc           proc    defaults 0 0\n#none            /var            ramfs   defaults 0 0\nnone            /tmp            ramfs   defaults 0 0\nmdev            /dev            ramfs   defaults 0 0\nnone            /sys            sysfs   defaults 0 0\n```\n\u003c/spoiler\u003e\n\n\u003cspoiler title=\"Впрочем, ничего интересного я не нашел и в `/etc_ro/init.d/rcS`.\"\u003e\n```\n#! /bin/sh\n\nPATH=/sbin:/bin:/usr/sbin:/usr/bin/\nexport PATH\n\nmount -t ramfs none /var/\n\n\nmkdir -p /var/etc\nmkdir -p /var/media\nmkdir -p /var/webroot\nmkdir -p /var/etc/iproute\nmkdir -p /var/run\nmkdir -p /var/debug\n\ncp -rf /etc_ro/* /etc/\ncp -rf /webroot_ro/* /webroot/\nmkdir -p /var/etc/upan\nmount -a\n\nmount -t ramfs /dev\nmkdir /dev/pts\nmount -t devpts devpts /dev/pts\nmount -t tmpfs none /var/etc/upan -o size=2M\nmdev -s\nmkdir /var/run\necho 1 \u003e /proc/sys/vm/panic_on_oom\necho 1 \u003e /proc/sys/kernel/panic_on_oops\n\n\necho '/sbin/mdev' \u003e /proc/sys/kernel/hotplug\n#echo 'sd[a-z][0-9] 0:0 0660 @/usr/sbin/autoUsb.sh $MDEV' \u003e\u003e /etc/mdev.conf\n#echo 'sd[a-z] 0:0 0660 $/usr/sbin/DelUsb.sh $MDEV' \u003e\u003e /etc/mdev.conf\n#echo 'lp[0-9] 0:0 0660 */usr/sbin/IppPrint.sh'\u003e\u003e /etc/mdev.conf\n#wds rule start\necho 'wds*.* 0:0 0660 */etc/wds.sh $ACTION $INTERFACE' \u003e /etc/mdev.conf\n#wsd rule end\necho 'sd[a-z][0-9] 0:0 0660 @/usr/sbin/usb_up.sh $MDEV $DEVPATH' \u003e\u003e /etc/mdev.conf\necho '-sd[a-z] 0:0 0660 $/usr/sbin/usb_down.sh $MDEV $DEVPATH'\u003e\u003e /etc/mdev.conf\necho 'sd[a-z] 0:0 0660 @/usr/sbin/usb_up.sh $MDEV $DEVPATH'\u003e\u003e /etc/mdev.conf\necho '.* 0:0 0660 */usr/sbin/IppPrint.sh $ACTION $INTERFACE'\u003e\u003e /etc/mdev.conf\nmkdir -p /var/ppp\n\ninsmod /lib/modules/dhcp_options.ko\n#insmod /lib/modules/gpio.ko\ninsmod /lib/modules/phy_check.ko\n#insmod /lib/modules/fastnat.ko \ninsmod /lib/modules/bm.ko\n#insmod /lib/modules/ai.ko \ninsmod /lib/modules/mac_filter.ko \n#insmod /lib/modules/ip_mac_bind.ko\n#insmod /lib/modules/privilege_ip.ko\ninsmod /lib/modules/nos.ko\n#insmod /lib/modules/url_filter.ko\n#insmod /lib/modules/loadbalance.ko\n#insmod /lib/modules/app_filter.ko\n#insmod /lib/modules/port_filter.ko\n#insmod /lib/modules/arp_fence.ko\n#insmod /lib/modules/ddos_ip_fence.ko\n#/etc/gpio_conf\necho \"enable 0 interval 0\" \u003e/proc/watchdog_cmd\nchmod +x /etc/mdev.conf\nmkdir -p /tmp/log\nmkdir -p /tmp/log/crash\nmkdir -p /tmp/log_print\n\nln -sf /proc/port1 /var/port1\nln -sf /proc/port3 /var/port0\n\necho 'kern.* /tmp/log/kernel.log' \u003e\u003e  /etc/syslog.conf\necho '*.* /tmp/log_print/message.txt' \u003e\u003e  /etc/syslog.conf\n\nklogd -n \u0026\nsyslogd -f /var/etc/syslog.conf -s 50 \u0026\n\nmonitor \u0026\nsh /usr/bin/ugw_watchdog.sh 2\u003e/tmp/log_print/ugw_watchdog.log\u0026\n#sh /usr/bin/mesh_op.sh \u003e /dev/null \u0026\n```\n\u003c/spoiler\u003e\n\nЮзеров не много, ttyS0 можно было бы и не на `/sbin/sulogin` натравливать, а на `/bin/login -f root` или `/bin/sh`.\n\n# Вторая наивная попытка войти\n\nПопробуем поправить `/etc_ro/inittab`.  Заменил `ttyS0::respawn:/sbin/sulogin` на `ttyS0::respawn:/bin/login -f root`.\n\nЗапаковал обратно squashfs с помощью `mksquashfs` - файл стал в 1.5 раза больше и перестал влезать в раздел. Заметил, что оригинальный файл был пожат алгоритмом `xz`, а утилита по-умолчанию использует `lzma`. Переделал файл с нужным алгоритмом компресии - все стало ок. Подсмотрев в содержимое оригинального дампа раздела RootFS добил свой новый файл до размера раздела байтом `0xff`. С помощью `dd` скопировал новый раздел на место старого. Записал всё на флешку. Потираю ручки, включаю кубик...\n\n\u003cspoiler title=\"Booting...\"\u003e\n```\ninit_ram\n 00000202 M init ddr ok\n\nDRAM Type: DDR2\n        DRAM frequency: 533MHz\n        DRAM Size: 128MB\nJEDEC id EF4017, EXT id 0x0000\nfound w25q64\nflash vendor: Winbond\nw25q64, size=8MB, erasesize=64KB, max_speed_hz=29000000Hz\nauto_mode=0 addr_width=3 erase_opcode=0x000000d8\n=\u003eCPU Wake-up interrupt happen! GISR=89000004 \n \n---Realtek RTL8197F boot code at 2018.04.20-10:17+0800 v3.4.11B.9 (999MHz)\nMac addr:04-95-e6-1a-96-e0\nlan_wan_isolation Initing...\nconfig: lan port mask is 0x000000f7\nconfig: wan port mask is 0x000000e8\nlan_wan_isolation Initing has been completed.\nlan_wan_isolation Initing...\nconfig: lan port mask is 0x000000f7\nconfig: wan port mask is 0x000000e8\nlan_wan_isolation Initing has been completed.\nwait for upgrage\nport[0] link:down\nport[1] link:down\nport[2] link:down\nport[3] link:down\nport[4] link:down\nirq:0x00008080\nrootfs checksum error at 00228012!\n\u003cRealTek\u003e\n```\n\u003c/spoiler\u003e\n**Какой мощный фейл!** Как я вообще мог не подумать про CRC.\n\nСмотрю еще раз `binwalk` - bootloader не UBoot, гуглинг подсказывает, что RealTek - ребята скрытные. В общем доступе описания нет, кроме того, под каждый девайс свои сигнатуры призывают делать, чтобы неповадно реверсить было... Эх.\n\nДля UBoot и ряда других случаев может помочь древний заброшенный проект [firmware-mod-kit](https://code.google.com/archive/p/firmware-mod-kit/), либо есть гордый потомок - наикрутейший [Firmware Analysis Toolkit](https://github.com/attify/firmware-analysis-toolkit)\n\nПогуглил по темным закоулкам интернета - нашел относительно свежий RealTek SDK года 2015-го. Архив на 600 Мб. Одним глазом поглядел на процесс построения финального образа прошивки и расчет CRC - плюнул и закрыл. Пока что жалко мозг. И время. Может быть потом как-нибудь.\n\n# Еще попыточка\nКонечно же, я с первого раза заметил, что при загрузке кубик выдает подозрительную надпись в логе:\n```\nargv[0] = netctrl\nnetctrl\nprod_change_root_passwd(83)\n```\n\nЗапускается процесс `netctrl` и меняет пароль.\n\nНу давайте поиграем. Вспомнил, как 20 лет назад писал софт по ZX Spectrum на ассемблере и ломал игрушки, чтобы жизней было побольше и бесконечные патроны. \nБольше к ассемблеру не притрагивался, не считая того факта, что на 3-4 года позже благодаря ему я попал на первую работу. Фиксал ~~KDE под FreeBSD~~ драйвера для виндовского setup-загрузчика.\n\nБерем IDA PRO в долг у приятеля.\n\n## Куда же посмотреть сначала?\nНаверное надо найти, где же выводится данная надпись. Ищем текст `prod_change_root_passwd` по файлам - в результатах много исполняемых файлов, включая тот самый `/bin/netctrl`, а также одна библиотека `/lib/libcommonprod.so`. Нам повезло - судя по всему и функция и текст вывода на экран совпадают, а сама реализация - в файле библиотеки.\n\n## Вспомнила бабка первый поцелуй\nЗапускаем IDA PRO, который я вижу первый раз в жизни. Как и MIPS ассемблер.\n\nОткрываем `/bin/netctrl`. Система сразу любезно открыла нам функцию `main`. Ничего не понятно, но, судя по всему, вначале очищаются буферы и инициализируются локальные переменные. А потом, скорее всего, из конфига считывается параметр `sys.role` и на основе его значения программа либо засыпает, либо ... вызывает внешнюю функцию с тем самым подозрительным названием. Параметров вроде никаких нет. Как я понял, параметры передаются в регистрах $a0..$a3.\n\n![IDA PRO - netctrl](https://habrastorage.org/webt/uz/om/r0/uzomr0xmqm6h5zxsy5uej2v-jwo.png)\n\nОткрываем `/lib/libcommonprod.so`, а в нем - искомую функцию. Она тоже начинает работу с зачистки буферов, потом считывает параметры из конфига и... ** О, БОЖЕ** берет пароль от wifi, кодирует его в base64 и меняет на это пароль рута. \n\n![вот где собака порылась](https://habrastorage.org/webt/ol/1p/a0/ol1pa0dybm6vteko7rjjnb7pgky.png)\n\n## А-а-лилуйя!\nВообщем, при каждой загрузке пароль рута устанавливается в base64(пароль от wifi). После сброса настроек - это пароль со стикера на самом роутере.\n```\nNormal startupGive root password for system maintenance\n(or type Control-D for normal startup):\nSystem Maintenance Mode\n~ #\n~ # uname -a\nLinux NOVA-xxxxxxxxxxxx 3.10.90 #4 Mon Jul 2 10:57:35 CST 2018 mips GNU/Linux\n```\n\n## Мы внутри\nВообщем, сильно много интересного внутри нет. Всё разделы r/o, по-этому все в RootFS и текстовых конфигах на отдельном разделе.\n\n\u003cspoiler title=\"~ # cat /proc/cpuinfo\"\u003e\n```\nsystem type             : RTL8197F\nmachine                 : Unknown\nprocessor               : 0\ncpu model               : MIPS 24Kc V8.5\nBogoMIPS                : 666.41\nwait instruction        : yes\nmicrosecond timers      : yes\ntlb_entries             : 64\nextra interrupt vector  : yes\nhardware watchpoint     : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]\nisa                     : mips1 mips2 mips32r2\nASEs implemented        : mips16\nshadow register sets    : 4\nkscratch registers      : 0\ncore                    : 1\nVCED exceptions         : not available\nVCEI exceptions         : not available\n```\n\u003c/spoiler\u003e\n\u003cspoiler title=\"~ # ls -l /sys/class/gpio/\"\u003e\n```\ntotal 0\n--w-------    1 root     root         16384 Jan  1  1970 export\nlrwxrwxrwx    1 root     root             0 Jan  1  1970 gpio18 -\u003e ../../devices/virtual/gpio/gpio18\nlrwxrwxrwx    1 root     root             0 Jan  1  1970 gpio19 -\u003e ../../devices/virtual/gpio/gpio19\nlrwxrwxrwx    1 root     root             0 Jan  1  1970 gpio58 -\u003e ../../devices/virtual/gpio/gpio58\nlrwxrwxrwx    1 root     root             0 Jan  1  1970 gpiochip0 -\u003e ../../devices/virtual/gpio/gpiochip0\n--w-------    1 root     root         16384 Jan  1  1970 unexport\n```\n\u003c/spoiler\u003e\n\u003cspoiler title=\"~ # ls -l /sys/devices/platform/\"\u003e\n```\ntotal 0\ndrwxr-xr-x    2 root     root             0 Jul 18 21:12 alarmtimer\ndrwxr-xr-x    2 root     root             0 Jul 18 21:12 rtl819x_8367r_i2c_pin.1\ndrwxr-xr-x    2 root     root             0 Jul 18 21:12 rtl819x_8367r_i2c_pin.2\ndrwxr-xr-x    2 root     root             0 Jul 18 21:12 rtl819x_8367r_reset_pin.0\ndrwxr-xr-x    2 root     root             0 Jul 18 21:12 rtl819x_btn.0\ndrwxr-xr-x    2 root     root             0 Jul 18 21:12 rtl819x_led.0\ndrwxr-xr-x    2 root     root             0 Jul 18 21:12 rtl819x_led.1\ndrwxr-xr-x    2 root     root             0 Jul 18 21:12 rtl819x_led.2\ndrwxr-xr-x    3 root     root             0 Jan  1  1970 serial8250\ndrwxr-xr-x    3 root     root             0 Jan  1  1970 spi-sheipa.0\n-rw-r--r--    1 root     root         16384 Jul 18 21:12 uevent\n```\n\u003c/spoiler\u003e\n\u003cspoiler title=\"~ # ps\"\u003e\n```\nPID   USER     TIME   COMMAND\n    1 root       0:01 init\n    2 root       0:00 [kthreadd]\n    3 root       0:40 [ksoftirqd/0]\n    4 root       0:00 [kworker/0:0]\n    5 root       0:00 [kworker/0:0H]\n    6 root       0:01 [kworker/u2:0]\n    7 root       0:00 [khelper]\n    8 root       0:00 [kworker/u2:1]\n   75 root       0:00 [writeback]\n   78 root       0:00 [bioset]\n   79 root       0:00 [crypto]\n   81 root       0:00 [kblockd]\n   84 root       0:01 [spi0]\n  102 root       0:00 [kworker/0:1]\n  106 root       0:00 [kswapd0]\n  154 root       0:00 [fsnotify_mark]\n  708 root       0:00 [mtdblock0]\n  713 root       0:00 [mtdblock1]\n  718 root       0:00 [mtdblock2]\n  723 root       0:00 [mtdblock3]\n  728 root       0:00 [mtdblock4]\n  733 root       0:00 [mtdblock5]\n  738 root       0:00 [mtdblock6]\n  743 root       0:00 [mtdblock7]\n  748 root       0:00 [mtdblock8]\n  802 root       0:00 [deferwq]\n  860 root       0:03 klogd -n\n  862 root       0:00 monitor\n  863 root       1:55 sh /usr/bin/ugw_watchdog.sh\n  869 root       0:00 syslogd -f /var/etc/syslog.conf -s 50\n  914 root       0:15 cfmd\n 1030 root       0:00 [jffs2_gcd_mtd7]\n 1032 root       0:11 timer\n 1033 root       0:00 logserver\n 1034 root       0:14 netctrl\n 1069 root       0:01 device_list\n 1071 root       3:20 sh /usr/bin/mesh_op.sh\n 1530 root       0:10 pann\n 1531 root       0:00 gpio_ctrl\n 1532 root       0:00 mesh_status_check\n 1534 root       0:19 network_check\n 1570 root       0:00 redis-server /etc_ro/redis.conf\n 1571 root       0:01 cmdsrv -l tcp://0.0.0.0:12598 -R tcp://127.0.0.1:6379\n 1572 root       0:00 [kworker/0:1H]\n 1573 root       0:05 confsrv\n 1599 root       0:01 dhcps -C /etc/dhcps.conf -l /etc/dhcps.leases -x /etc/dhc\n 1931 root       0:00 ucloud -l 4\n 1962 root       0:00 sntp 1 28800 43200\n 2370 root       0:00 ftd -br br0 -w wlan0 wlan1 -pid /var/run/ft.pid -c /tmp/f\n 2375 root       0:00 pathsel -i wlan-msh -P -t 9\n 2387 root       0:00 multiWAN\n 2488 root       0:00 dhcpcd_wan1 -c /etc/wan1.ini -m 1 eth1 -h NOVA-0495e61a96\n 2567 root       0:00 dnrd -t 3 -M 600 --cache=off -b -R /etc/dnrd -r 3 -s 192.\n 2955 root       0:00 miniupnpd -f /etc/miniupnpd.config -w\n 2991 root       0:00 igmpproxy\n10388 root       0:00 -sh\n12125 root       0:00 sleep 5\n12155 root       0:00 sleep 1\n12156 root       0:00 ps\n```\n\u003c/spoiler\u003e\n\n# Access granted, root\nСобственно, рутовый доступ получен. Позитивные эмоции получены. Приятно же иметь доступ ко всему, чем владеешь. А то эта эпоха всё позакрывать и выдавать черные ящики с сюрпризами мне очень не нравится.\n\n# А что дальше?\nА дальше хочется вернуться к изначальной проблеме - прибить DHCP сервер. Это для начала.\nДля этого надо будет изучить процессы загрузки, скрипты. Всё это осложняется пока что отсутствием возможности перепаковать образ прошивки - надо копать RSDK.\n\nКроме того, достаточно интересно пощупать на наличие китайских бэкдоров. Ну и, если прошивку не удасться перепаковать, поковырять cloud протокол, чтобы таки получить доступ снаружи.\n\nНо, в любом случае, я получил массу удовольствия в процессе раскопок.\n\n# Ссылки\n1. Все файлы, логи и пр. доступны у меня в репозитории на https://github.com/latonita/tenda-reverse\n2. [Tenda Mesh3-18 (Nova MW6 2018) on wikidevi.com](https://wikidevi.com/wiki/Tenda_Mesh3-18_(Nova_MW6_2018))\n3. [SPI Flash programmer by SKProj на сайте Технохрень](http://skproj.ru/programmator-spi-flash-svoimi-rukami/)\n4. [flashrom homepage](https://flashrom.org/Flashrom)\n5. [firmware-mod-kit (давно заброшен)](https://code.google.com/archive/p/firmware-mod-kit/)\n6. Достаточно интересный проект по эмуляции и анализу linux-based firmware - [firmadyne](https://github.com/firmadyne/firmadyne)\n7. Кладезь для анализа и автоматической перепаковки - [Firmware Analysis Toolkit](https://github.com/attify/firmware-analysis-toolkit)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flatonita%2Ftenda-reverse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flatonita%2Ftenda-reverse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flatonita%2Ftenda-reverse/lists"}