腾达AC9官方固件结构及改造 | 您所在的位置:网站首页 › ac9路由器刷固件 › 腾达AC9官方固件结构及改造 |
先激活0元购,再拆机 先拆外面两个螺丝,然后用工具从左下角凹槽处撬开 里面是无螺丝设计 焊接ttl插针:
波特率为115200,上电后可以看到串口启动信息:
分区信息: [ 0.830000] Creating 7 MTD partitions on "bcmsflash": [ 0.830000] 0x000000000000-0x000000800000 : "All" [ 0.840000] 0x000000000000-0x000000040000 : "Bootloader" [ 0.840000] 0x000000040000-0x0000007d0000 : "KernelFS" [ 0.850000] 0x0000001cb48c-0x0000007d0000 : "rootfs" [ 0.850000] 0x0000007d0000-0x0000007e0000 : "CFM_BACKUP" [ 0.860000] 0x0000007e0000-0x0000007f0000 : "CFM" [ 0.860000] 0x0000007f0000-0x000000800000 : "nvram" ~ # cat /proc/mtd dev: size erasesize name mtd0: 00800000 00010000 "All" mtd1: 00040000 00010000 "Bootloader" mtd2: 00790000 00010000 "KernelFS" mtd3: 00604b74 00010000 "rootfs" mtd4: 00010000 00010000 "CFM_BACKUP" mtd5: 00010000 00010000 "CFM" mtd6: 00010000 00010000 "nvram"
启动完成,提示: Normal startupGive root password for system maintenance (or type Control-D for normal startup): 要密码
刷美版固件(US_Acrux1200-AC_V15.03.2.14_EN_NEX01.bin),开telnet
计算机(192.168.1.100)上开tftp服务器,备份cfe cd /tmp cat /dev/mtd1 > /tmp/Bootloader.bin tftp -p -r Bootloader.bin -l /tmp/Bootloader.bin 192.168.0.100 备份整个固件: cd /tmp cat /dev/mtd0 > /tmp/all.bin tftp -p -r all.bin -l /tmp/all.bin 192.168.0.100 不用tftp也可以备份,插上U盘,U盘路径为: /var/etc/upan/sda1 ~ # mount rootfs on / type rootfs (rw) /dev/root on / type squashfs (ro,relatime) devtmpfs on /dev type devtmpfs (rw,relatime,size=62816k,nr_inodes=15704,mode=755) none on /var type ramfs (rw,relatime) proc on /proc type proc (rw,relatime) none on /tmp type ramfs (rw,relatime) none on /sys type sysfs (rw,relatime) mdev on /dev type ramfs (rw,relatime) devpts on /dev/pts type devpts (rw,relatime,mode=600) none on /var/etc/upan type tmpfs (rw,relatime,size=2048k) /dev/sda1 on /var/etc/upan/sda1 type ufsd (rw,relatime,nls=utf8,force) 备份bootloader:
cat /dev/mtd1 > /tmp/Bootloader.bin cp /tmp/Bootloader.bin /var/etc/upan/sda1/Bootloader.bin
备份整个固件: cat /dev/mtd0 > /tmp/all.bin cp /tmp/all.bin /var/etc/upan/sda1/all.bin
AC9的FLASH分区图如下: 用binwalk对美版固件进行分析: 可以发现固件分为4个部分:0x40字节的头部、TRX Header、linux kernel(LZMA压缩)、squashfs文件系统 TRX Header的内容如下(0x40-0x5b): TRX Header的定义: struct trx_header { uint32_t magic; /* "HDR0" */ uint32_t len; /* Length of file including header */ uint32_t crc32; /* 32-bit CRC from flag_version to end of file */ uint32_t flag_version; /* 0:15 flags, 16:31 version */ uint32_t offsets[3]; /* Offsets of partitions from start of header */ }; magic:HDR0 length:7860224 (0x77f000) crc32:0xF1B2C209 flag_version:0_1 trx header offset:0x1C kernel LZMA offset:0X18b48c filesystem offset:0 0X5C-0X18B4cB:linux kernel区,lzma压缩,解压后的尺寸:4100320z字节
0X18B4cc-最后:squashfs文件系统区
根据上面的描述,分离出linux kernel和squashfs文件系统,分别命名为kernel.bin和fs.bin,然后找一个openwrt SDK的trx执行程序,通过此程序可以自动生成trx头文件: ./trx -o b.bin -m 7860288 -f kernel.bin -f fs.bin -m参数指定最大长度,只要大于固件长度即可 生成的文件为b.bin,其头部与原始的固件一致:
此固件可以在CFE下面刷写了,但还不能在WEB页面刷写,需要再加上原固件最开始的0x40字节 最开始0x40字节的分析 #define IH_MAGIC 0x27051956 /* Image Magic Number */ typedef struct image_header { uint32_t ih_magic; /* Image Header Magic Number */ uint32_t ih_hcrc; /* Image Header CRC Checksum */ uint32_t ih_time; /* Image Creation Timestamp */ uint32_t ih_size; /* Image Data Size */ uint32_t ih_load; /* Data Load Address */ uint32_t ih_ep; /* Entry Point Address */ uint32_t ih_dcrc; /* Image Data CRC Checksum */ uint8_t ih_os; /* Operating System */ uint8_t ih_arch; /* CPU architecture */ uint8_t ih_type; /* Image Type */ uint8_t ih_comp; /* Compression Type */ uint8_t ih_other[32]; /* Image Name */} image_header_t;
腾达在正常头部信息中增加了0X20开始的16字节定义,此处原来是用于描述固件名称 正常的生成固件头的命令: ./mkimage -A arm -a 0x80000000 -e 0x80008000 -C lzma -d ac9.bin ac9_new.bin
修改固件: 先解包squashfs文件系统 sudo unsquashfs -d squashfs-root fs.bin 修改后打包: sudo ./mksquashfs4 ./squashfs-root ./newsecondchunk.bin -noappend -root-owned -comp xz -b 128k -processors 1 ./trx -o new.bin -m 7929856 -f kernel.bin -f newsecondchunk.bin ---------------------------------------------------------------------------------------------------------------------------------- 上述为固件解包及打包过程,下面对固件进行定制。 首先看可疑进程: jsprocess为网购比价进程,与K2的一样 ucloud_v2与business_proc不知道是啥东西 查看网络进程:
tcp: 除了ucloud_v2与business_proc,还有一个app_data_center 也处于网络连接状态 udp: 重新 更新到最新V15.03.05.14多国语言版本进行定制。 1、首先增加telnet服务,方法是修改/etc_ro/init.d/rcS 在最后增加: telnetd & echo -e 'admin\nadmin' | passwd root 设置telnet密码为admin 2、增加定制版本号 修改/webroot_ro/js/main.js
3、增加广告屏蔽界面 修改/webroot_ro/main.html,增加如下部分: 修改后的界面如下: |
CopyRight 2018-2019 实验室设备网 版权所有 |