AC86U nexmon CSI 安装和提取

前期准备

  1. AC86U 固件版本:3.0.0.4.382_15098
    (曾使用过3.0.0.4.384_81992,虽然自带iperf3方便,但insmod内核有问题)
  2. 虚拟机: Ubuntu 16.04 LTS 64位

硬件准备

进入主页 http://router.asus.com/ 设置账号和密码
账号名建议设置为admin(nexmon代码中默认使用admin ssh连接)

无线网络设置遵循:静态原则(关闭smartconnect,确定信道,确定带宽等等,便于分析)

同时需要开启ssh服务(连接的账号和密码为主页的后台管理账号和密码)

nexmon_csi固件安装

(期间任何步骤出错,请仔细查明或查看本文最后的“常见问题”)

  1. 安装一些依赖项:
    sudo apt-get install git gawk qpdf flex bison

  2. 安装i386库(仅64位 Ubuntu需要):

sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libc6:i386 libncurses5:i386 libstdc++6:i386
  1. 克隆 nexmon 基础存储库:
    git clone https://github.com/seemoo-lab/nexmon.git

  2. cd当前目录到之前克隆的 nexmon 目录并执行source setup_env.sh以准备环境变量

  3. 运行make以从原始固件中提取 ucode、templateram 和 flashpatches

  4. cd到 patch/bcm4366c0/10_10_122_20/ 并克隆此存储库以安装nexmon_csi:
    git clone https://github.com/seemoo-lab/nexmon_csi.git

  5. 用任一个LAN口连接到你的AC86U(安装nexmon_csi固件后会启动新的dhd.ko,此时默认将eth5、eth6也就是2.4G和5G无线网络关闭掉,用无线连接此步骤会中断)

  6. 进入创建的子目录 nexmon_csi 并运行 make install-firmware REMOTEADDR=<ip address of your rt-ac86u>
    编译的固件补丁并将其安装到您的 RT-AC86U 路由器

至此,固件安装完毕

编译相关测试软件放入

由于路由器内存小,无过多动态库,默认使用交叉编译静态文件送入到其中使用
架构为aarch64

nexutil(关键)

  1. 克隆 aarch64 工具链存储库:git clone https://github.com/RMerl/am-toolchains.git

  2. 设置编译的一些环境变量:
    export AMCC=$(pwd)/am-toolchains/brcm-arm-hnd/crosstools-aarch64-gcc-5.3-linux-4.1-glibc-2.22-binutils-2.25/usr/bin/aarch64-buildroot-linux-gnu-
    export LD_LIBRARY_PATH=$(pwd)/am-toolchains/brcm-arm-hnd/crosstools-aarch64-gcc-5.3-linux-4.1-glibc-2.22-binutils-2.25/usr/lib
    (请再三确认路径是否正确)

  3. cd返回nexmon存储库根目录,编译并安装nexutil:

cd utilities/libnexio
${AMCC}gcc -c libnexio.c -o libnexio.o -DBUILD_ON_RPI
${AMCC}ar rcs libnexio.a libnexio.o
cd ../nexutil
echo "typedef uint32_t uint;" > types.h
sed -i 's/argp-extern/argp/' nexutil.c
${AMCC}gcc -static -o nexutil nexutil.c bcmwifi_channels.c b64-encode.c b64-decode.c -DBUILD_ON_RPI -DVERSION=0 -I. -I../libnexio -I../../patches/include -L../libnexio/ -lnexio
scp nexutil admin@<ip address of your rt-ac86u>:/jffs/nexutil
ssh admin@< ip address of your rt-ac86u> "/bin/chmod +x /jffs/nexutil"

iperf3(次要,可选)

  1. 下载静态aarch64架构已编译好的iperf3

  2. 与nexutil同理,
    scp iperf3 admin@<ip address of your rt-ac86u>:/jffs/iperf3
    都丢入jffs目录中使用

tcpdump(重要)

  1. 下载静态aarch64架构已编译好的tcpdump

  2. 与nexutil同理,
    scp tcpdump admin@<ip address of your rt-ac86u>:/jffs/tcpdump
    都丢入jffs目录中使用

使用nexmon_csi

  1. (虚拟机完成)cd至nexmon_csi下的utils/makecsiparams/makecsiparams,使用
    ./makecsiparams -c 161/80 -C 1 -N 1 -m <MAC address of your rt-ac86u> -b 0x88
    这句话的意思是生成在161信道,80Hz,收发天线1*1下的开头为0x88的编译码

例如,m+MBEQGIAQDUXWR6rNQAAAAAAAAAAAAAAAAAAAAAAAAAAA==

(以下均用路由器完成)

  1. 配置提取器
    nexutil -Iwlan0 -s500 -b -l34 -vm+IBEQGIAgAAESIzRFWqu6q7qrsAAAAAAAAAAAAAAAAAAA==
    wlan0为你需要提取的网卡,一般eth5为2.4GHz,eth6为5Ghz

  2. 确保网卡打开并调为monitor模式,此时将丢失SSID无法用无线网连接
    ifconfig查看网卡打开情况
    wl -i eth6 up
    wl -i eth6 radio on
    wl -i eth6 chanspec 161/80
    wl -i eth6 monitor 1
    ifconfig eth6 up

  3. 使用tcpdump抓包并保存
    tcpdump -i eth6 -v dst port 5500 -w /sdcard/1.pcap -c 1000

至此已经完成csi使用,后续的分析可使用CSIKIT快速分析和画图

常见问题

  1. 在make install等有相关ssh连接时后显示认证失败,大概率因为Ubuntu不会自动更新公私钥文件,而你又修改了AC86U的ssh内容(例如reset后)
    ssh-keygen -R <ip address of your rt-ac86u>

  2. _nex_driver_io: error ret=-1 errno=95 #2
    主要因为重启路由器后,路由器默认加载原本的dhd.ko,需要进入到jffs中
    重新加载nexmon的dhd.ko
    rmmmod dhd
    insmod /jffs/dhd.ko
    使用后eth5,eth6会被关闭,需要重新打开

  3. insmod /jffs/dhd.ko卡住不动或报错
    一个是固件版本不支持或安装了nexmon固件后修改路由器设置而导致(安装好后请勿随意修改无线设置)
    请reset后重新进行以上步骤

参考

https://blog.csdn.net/LonlyForever/article/details/133325497
https://github.com/seemoo-lab/nexmon_csi/issues/17
https://github.com/seemoo-lab/nexmon_csi/issues/34
https://github.com/userdocs/iperf3-static
https://github.com/seemoo-lab/nexmon_csi/files/5635574/tcpdump.zip

posted @ 2024-03-23 14:01  i_Corner  阅读(840)  评论(0)    收藏  举报