腾达AC9官方固件结构及改造

6条评论

2017年4月10日 at 下午10:04分类:其他 阅读: 1,416 次

先激活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 */
};

  • offset[0] = lzma-loader
  • offset[1] = Linux-Kernel
  • offset[2] = rootfs

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,增加如下部分:

修改后的界面如下:

斐讯K2路由编译Padavan华硕固件

没有评论

2017年4月9日 at 下午8:45分类:其他 阅读: 286 次

参考:

https://myskn.github.io/2017/01/18/k2/

环境:

Ubuntu 16.04 64位系统

准备

sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install git autoconf automake bison build-essential flex gawk gettext gperf libtool pkg-config zlib1g-dev libgmp3-dev libmpc-dev libmpfr-dev texinfo python-docutils mc autopoint -y
su
#输入root密码,切换到root用户
cd /opt
git clone https://bitbucket.org/padavan/rt-n56u.git
#等N分钟下载源码
===这里是编译mips工具===
cd /opt/rt-n56u/toolchain-mipsel
./clean_sources
#这里很快就完成
./build_toolchain
#这里要等几十分钟具体看机器,最后会显示ALL DONE相关信息

一:修正K2的GPIO

这里的K2硬件版本为A2
Reset:GPIO 1

LED颜色 GPIO lo hi
8
11
10

编辑 /opt/rt-n56u/trunk/configs/boards/RT-AC54U/board.h文件
并把内容改为如下,注意没有数字参数的请确定前面是“#undef”,否则编译时报错。

粗体为修改部分:

/* ASUS RT-AC54U */

#define BOARD_PID        "RT-AC54U"
#define BOARD_NAME        "RT-AC54U"
#define BOARD_DESC        "ASUS RT-AC54U Wireless Router"
#define BOARD_VENDOR_NAME    "ASUSTek Computer Inc."
#define BOARD_VENDOR_URL    "http://www.asus.com/"
#define BOARD_MODEL_URL        "http://www.asus.com/Networking/RTAC54U/"
#define BOARD_BOOT_TIME        25
#define BOARD_FLASH_TIME    60
#undef BOARD_GPIO_BTN_RESET    
#define BOARD_GPIO_BTN_WPS    1
#undef BOARD_GPIO_LED_ALL    
#define  BOARD_GPIO_LED_WIFI    11
#define BOARD_GPIO_LED_POWER    8
#undef  BOARD_GPIO_LED_LAN
#define  BOARD_GPIO_LED_WAN    10
#undef BOARD_GPIO_LED_USB    
#undef  BOARD_GPIO_LED_ROUTER
#undef  BOARD_GPIO_PWR_USB
#define BOARD_HAS_5G_11AC    1
#define BOARD_NUM_ANT_5G_TX    2
#define BOARD_NUM_ANT_5G_RX    2
#define BOARD_NUM_ANT_2G_TX    2
#define BOARD_NUM_ANT_2G_RX    2
#define BOARD_NUM_ETH_LEDS    0
#define BOARD_HAS_EPHY_L1000    0
#define BOARD_HAS_EPHY_W1000    0

二:调用原厂无线参数

把/opt/rt-n56u/trunk/configs/boards/RT-AC54U目录下”SingleSKU”开头的文件全删除
并编辑/opt/rt-n56u/trunk/configs/boards/RT-AC54U/kernel-3.4.x.config文件
查找并修改为如下内容(主要修正是删除#号,或者将is not set改为=y或=n)

CONFIG_RT_SINGLE_SKU=n
CONFIG_RT2860V2_AP_GREENAP=y
CONFIG_INTERNAL_PA_INTERNAL_LNA=n
CONFIG_INTERNAL_PA_EXTERNAL_LNA=n
CONFIG_EXTERNAL_PA_EXTERNAL_LNA=y
CONFIG_MT76X2_AP_GREENAP=y
CONFIG_MT76X2_AP_INTERNAL_PA_INTERNAL_LNA=n
CONFIG_MT76X2_AP_INTERNAL_PA_EXTERNAL_LNA=n
CONFIG_MT76X2_AP_EXTERNAL_PA_EXTERNAL_LNA=y
CONFIG_RALINK_UART_BRATE=57600

三:修正WAN/LAN顺序

默认情况下,WAN口会变成LAN4口,LAN4口会变成WAN口
编辑/opt/rt-n56u/trunk/configs/boards/RT-AC54U/kernel-3.4.x.config文件
查找WAN=0并修改为如下内容

CONFIG_RAETH_ESW_PORT_WAN=4
CONFIG_RAETH_ESW_PORT_LAN1=3
CONFIG_RAETH_ESW_PORT_LAN2=2
CONFIG_RAETH_ESW_PORT_LAN3=1
CONFIG_RAETH_ESW_PORT_LAN4=0

四:汉化(可选)

编辑/opt/rt-n56u/trunk/user/www/Makefile文件,查找并将RU=后面的内容改为”简体中文”

用下面的文件替代/opt/rt-n56u/trunk/user/www/dict/RU.dict文件

RU.dict

五:默认配置(可选)

 

六:编译

cd /opt/rt-n56u/trunk
./clear_tree
#每次编译都要先运行这句
./build_firmware
#开始编译了
等待结果,如果不出错,最后会显示信息包括固件大小,名字,位置等
2017-04-09 21-25-27
最后固件生成在/opt/rt-n56u/trunk/images下.trx扩展名的。

后续升级源码

git pull
#如果toolchain-mipsel有改过,则要重新编译
cd /opt/rt-n56u/toolchain-mipsel
/clean_sources
/clean_toolchain
/build_toolchain
#再编译更新过的固件
cd /opt/rt-n56u/trunk
./clear_tree
./build_firmware

Ubuntu下设置grub启动顺序

没有评论

2017年4月9日 at 下午2:45分类:其他 阅读: 164 次

sudo gedit /etc/default/grub

其中的“GRUB_DEFAULT=0”就是设置的默认启动项了。

修改完成,保存退出之后,还需要执行一下“sudo update-grub”来重新生成GRUB启动配置项。

斐讯K2 定制版本koolproxy https过滤使用教程

一条评论

2017年4月6日 at 下午3:17分类:其他 阅读: 4,154 次

1、在广告屏蔽打开https

点击“保存”按钮启动

2、生成证书

第一次启动https会自动生成证书,大约需要30秒钟时间:

30秒钟后刷新页面,会出现下载证书的按钮:

3、计算机安装证书

在K2的广告屏蔽页面下载证书,鼠标双击下载的证书,即可安装

存储到本地计算机:

证书存储按如下设置:

导入成功后,即可访问https网站,测试是否可以过滤广告,比如https://v.qq.com

4、IOS手机安装

在K2的广告屏蔽页面下载证书,下载后自动安装:

5、安卓手机安装

在K2的广告屏蔽页面下载证书,下载后自动安装:

 

6、管理计算机上的证书

win键+R,运行命令“certmgr.msc”

在这里可以删除旧的证书:

 

 

利用qemu建立AC9、K3的动态调试环境

没有评论

2017年3月28日 at 下午10:24分类:其他 阅读: 367 次

参考:

https://wiki.openwrt.org/doc/howto/qemu

http://www.cnblogs.com/shangye/p/6196403.html

http://xdxd.love/2016/09/20/逆向路由器固件之动态调试/

http://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458279448&idx=3&sn=1a4b02ddd342a609f528c7b47d758925&scene=2&srcid=0831gY8sVHg6HrLm4pJeunko&from=timeline&isappinstalled=0#wechat_redirect

 

1、安装binwalk
git clone https://github.com/devttys0/binwalk.git

cd binwalk
sudo python setup.py install
sudo apt-get install python-lzma

2、安装qemu
sudo apt-get install qemu qemu-system

sudo apt-get install binfmt-support qemu-user-static

3、解压ac9固件
binwalk -Me ac9.bin

4、运行固件中的程序
进入解压后的./squashfs-root目录,运行
cp $(which qemu-arm-static) ./
sudo chroot . ./qemu-arm-static ./bin/uname -a
sudo chroot . ./qemu-arm-static ./sbin/ifconfig
可以看到固件中uname、ifconfig程序的运行结果

5、运行固件

针对不同平台,openwrt有不同的linux内核

Mips为Malta平台的linux系统内核:

https://downloads.openwrt.org/snapshots/trunk/malta/generic/openwrt-malta-le-vmlinux-initramfs.elf

ARM为realview平台的linux系统内核:

https://downloads.openwrt.org/snapshots/trunk/realview/generic/openwrt-realview-vmlinux-initramfs.elf

由于AC9和K3都是ARM架构的,我们执行下面的命令可以启动openwrt:

sudo qemu-system-arm -kernel openwrt-realview-vmlinux-initramfs.elf -M realview-eb-mpcore -net nic,vlan=0,macaddr=12:22:22:22:22:22 -net tap -nographic

 

现在要把AC9的文件加入进去

1)使用dd创建一个文件
dd if=/dev/zero of=./share.img bs=1M count=35
2)格式化share.img文件
mkfs.ext4 ./share.img
3)然后执行
sudo mount -o loop ./share.img /tmp/share

将ac9的固件内容拷贝到/tmp/share即可

 

再执行如下命令启动qemu:

sudo qemu-system-arm -kernel openwrt-realview-vmlinux-initramfs.elf -M realview-eb-mpcore -net nic,vlan=0,macaddr=12:22:22:22:22:22 -net tap -nographic  -sd ./share.img

-kernel参数指定了内核文件

-M参数指定了需要qemu模拟的平台

-net参数指定了网卡的mac地址

-sd参数就是指定了我们的硬盘镜像文件

-nographic告诉qemu不用另起一个界面视窗,就用当前的控制台

通过如下命令挂载ac9的文件系统:

mount -t ext4 /dev/mmcblk0 /overlay/

然后用chroot /overlay /bin/sh来切换根目录到路由器文件系统。

 

为了能够让QEMU虚拟机和宿主机都上网,并且互通,为动态调试做准备,必须要配置桥接网络
sudo apt-get install bridge-utils uml-utilities

-修改/etc/network/interfaces内容

auto  lo
     iface lo inet loopback
     auto eth0
     iface eth0 inet manual
     up ifconfig eth0 0.0.0.0 up
     auto br0
     iface br0 inet dhcp
     bridge_ports eth0
     bridge_stp off
     bridge_maxwait 1

-修改/etc/qemu-ifup内容

    #!/bin/sh
     echo "Executing  /etc/qemu-ifup"
     echo "Bringing up $1  for bridged mode..."
     sudo /sbin/ifconfig $1  0.0.0.0 promisc up
     echo "Adding $1 to  br0..."
     sudo /sbin/brctl addif br0  $1
     sleep 3