tenda固件分析

tenda固件仿真

版本信息

Firmware version: V15.03.06.47_multi

System:ubuntu 18.04

固件提取

下载固件地址:https://down.tendacn.com/uploadfile/AC10/US_AC10V1.0re_V15.03.06.47_multi_TDE.zip

binwalk -Me US_AC10V1.0re_V15.03.06.47_multi_TDE.bin
固件仿真

获取仿真固件内核以及镜像

wget https://people.debian.org/~aurel32/qemu/mipsel/debian_wheezy_mipsel_standard.qcow2

wget https://people.debian.org/~aurel32/qemu/mipsel/vmlinux-3.2.0-4-4kc-malta

配置网络,qemu安装过程省略

ifconfig ens33 down
## 关闭网卡

vim /etc/network/interfaces

auto lo
iface lo inet loopback
auto br0
iface br0 inet dhcp
  bridge_ports ens33
  bridge_maxwait 0
## 配置网卡网桥,如上

apt install bridge-utils
## 安装网桥管理工具

ifconfig ens33 0.0.0.0 promisc up
ifconfig br0 0.0.0.0 promisc up
## 混合模式打开ens33和br0网卡

brctl stp br0 off
## 关闭生成树协议

brctl setfd br0 1
## 设置br0的转发延迟

brctl sethello br0 1
## 设置br0的hello时间

dhclient br0
## 获取动态ip

tunctl -t tap0
## 创建虚拟网卡

brctl addif br0 tap0
## 将tap0加入br0网桥

ifconfig tap0 0.0.0.0 promisc up
## 以混合模式打开tap0网卡

brctl showstp br0
## 可以通过该命令查看br0网桥信息,来检查配置
系统模式仿真
qemu-system-mipsel -M malta -kernel vmlinux-3.2.0-4-4kc-malta -hda debian_wheezy_mipsel_standard.qcow2 -net nic -net tap,ifname=tap0 -append "root=/dev/sda1 console=tty0" -nographic

## username/password
## user/user
## root/root

进入系统之后,获取仿真系统的ip地址,将从固件中提取出来的文件系统squashfs-root拷贝仿真系统中

cd /root/squashfs-root
## 进入上传的squashfs-root文件夹下

mount -o bind /dev ./dev
## 将仿真系统的dev挂载到固件squashfs-root文件系统dev目录

mount -t proc /proc ./proc
## 将仿真系统的proc挂载到固件squashfs-root文件系统proc目录

chroot . sh
## 将squashfs-root作为根目录执行sh

bin/httpd
## 启动tenda的服务

启动服务时报错如下

查了相关文档,发现tenda服务启动时,存在网络检查函数,检查不通过会进入死循环,这里没有进入死循环而是直接退出了,通过ida分析定位到如下代码

可以看到存在三个检测函数分别为apmib_init、check_network、ConnectCfm,通过ida的插件keypatch修改为如下

keypath插件安装使用

将插件代码git clone下来,将里面的keypatch.py放入ida安装目录的plugins下即可

修改

选中修改行,右击选中如下

导出

在系统模式下启动服务发现,出现如下情况

查询相关文档得知,tenda启动服务文件默认绑定的是br0网卡,并且博主提供了两种解决思路:

1、修改httpd中绑定的网卡名为仿真系统中的网卡名

2、修改仿真系统的网卡名为br0

这里采用的是第二种方法

ifconfig eth0 down

ip link set eth0 name br0

ifconfig br0 up

再次启动即可成功获取ip

用户模式仿真

进入squashfs-root目录,并将qemu-mipsel-static命令复制到该目录下

chroot . qemu-mipsel-static -L . bin/httpd
原文地址:https://www.cnblogs.com/she11s/p/15523184.html