arm环境搭建
mips架构的环境还是很好搭建的,arm架构环境的搭建踩了很多坑,这里做一下记录
参考文章 疑难杂症 这两篇文章主要是教如何搭建摄像头的arm环境,搞得好麻烦。
先是下载linux kernel源码然后make,得到zImage,dtb。然后又下载busybox源码,依据这个制作sd。文章确实都很好,但是和我们最初想要实现漏洞利用的环境搭建并不密切相关。
解压kernel源码 tar -xf linux-5.10.209.tar.xz
修改顶层Makefile的ARCH和CROSS_COMPILE, 修改完后如下 377 ARCH ?= arm 378 CROSS_COMPILE ?= arm-linux-gnueabi-
配置单板的defconfig,生成.config ~/linux-5.10.209$ make vexpress_defconfig
编译kernel内核 编译完的zImage存放在arch/arm/boot/下面 ~/linux-5.10.209$ make zImage -j8
编译kernel modules 编译完的ko文件存放在arch/arm/boot/下面 ~/linux-5.10.209$ make modules -j8
编译设备树 ~/linux-5.10.209$ make dtbs
生成sd
[ -e tty1 ] && sudo rm -f tty1
[ -e tty2 ] && sudo rm -f tty2
[ -e tty3 ] && sudo rm -f tty3
[ -e tty4 ] && sudo rm -f tty4
[ -e console ] && sudo rm -f console
[ -e null ] && sudo rm -f null
sudo rm -rf rootfs
mkdir rootfs
cd rootfs
sudo mkdir lib proc sys dev etc etc/init.d
sudo touch etc/init.d/rcS
sudo chmod 0777 etc/init.d/rcS;
sudo echo "#!/bin/sh" >> etc/init.d/rcS
sudo echo "mount -t proc none /proc" >> etc/init.d/rcS
sudo echo "mount -t sysfs none /sys" >> etc/init.d/rcS
sudo echo "mount -t tmpfs none /dev" >> etc/init.d/rcS
sudo echo "/sbin/mdev -s" >> etc/init.d/rcS
sudo chmod 0755 etc/init.d/rcS;
cd ..
# cp -r /usr/arm-linux-gnueabi/lib/ rootfs/lib/
cp -r /usr/arm-linux-gnueabi/lib/* rootfs/lib/
cp -r busybox-1.36.1/_install/* rootfs
cp -r /home/zp9080/vexpress/squashfs-root rootfs
sudo mknod -m 666 rootfs/dev/tty1 c 4 1
sudo mknod -m 666 rootfs/dev/tty2 c 4 2
sudo mknod -m 666 rootfs/dev/tty3 c 4 3
sudo mknod -m 666 rootfs/dev/tty4 c 4 4
sudo mknod -m 666 rootfs/dev/console c 5 1
sudo mknod -m 666 rootfs/dev/null c 1 3
dd if=/dev/zero of=rootfs.ext4 bs=1M count=256
mkfs.ext4 rootfs.ext4
sudo mount -t ext4 rootfs.ext4 /mnt -o loop
cp -r rootfs/* /mnt
umount /mnt
启动qemu
qemu-system-arm -M vexpress-a9 \
-m 512M \
-kernel ./linux-5.10.209/arch/arm/boot/zImage \
-dtb ./linux-5.10.209/arch/arm/boot/dts/vexpress-v2p-ca9.dtb \
-nographic \
-append "root=/dev/mmcblk0 rw console=ttyAMA0 rootwait rootfstype=ext4" \
-sd rootfs.ext4 \
-net nic -net tap,ifname=tap0,script=no,downscript=no
上述步骤完成后确实可以得到一个arm环境,但是busybox太轻量级,总之很不好用,最后这样解决
wget https://people.debian.org/~aurel32/qemu/armhf/initrd.img-3.2.0-4-vexpress
wget https://people.debian.org/~aurel32/qemu/armhf/debian_wheezy_armhf_standard.qcow2
wget https://people.debian.org/~aurel32/qemu/armhf/vmlinuz-3.2.0-4-vexpress
#通过qemu启动配置完成的Debian-armhf系统
sudo qemu-system-arm \
-M vexpress-a9 \
-kernel vmlinuz-3.2.0-4-vexpress \
-initrd initrd.img-3.2.0-4-vexpress \
-drive if=sd,file=debian_wheezy_armhf_standard.qcow2 \
-append "root=/dev/mmcblk0p2 console=ttyAMA0" \
-net nic -net tap,ifname=tap0,script=no,downscript=no \
-nographic
搭建企业级路由器Tenda-G3v3.0 V15.11.0.20时遇到了一些问题,这样解决的 main 125: g_lan_ip = 0 goahead: 0: Unable to open socket on port 80.
经过逆向分析与溯源,通过以下方式解决
主要是g_lan_ip的值不对,导致建立socket的时候解析都出错了,但是由于是虚拟环境所以GetValue值不对,所以想着直接控制g_lan_ip的值,通过patch解决了这个问题,这个真的困扰了我很久,因为溯源这个过程很考验能力,也得靠点猜测