ios

RT-AX55环境搭建

N 人看过

启动方式

方式一

sudo chroot . ./qemu-arm-static -E LD_PRELOAD="./libnvram.so" ./usr/sbin/httpd

方式二

  1. 复制 qemu-arm-static 到 squashfs-root 中
where qemu-arm-static
cp /usr/bin/qemu-arm-static ./squashfs-root/
  1. 启动
cd squashfs-root
sudo chroot . ./qemu-arm-static ./usr/sbin/httpd

启动时的错误处理

遇见 openssl 相关错误

错误原因代码:

运行 gencert.sh

在调用 nvram 相关命令时出错,原因不存在 nvram

#!/bin/sh
SECS=1262278080

cd /etc

NVCN=`nvram get https_crt_cn`
if [ "$NVCN" == "" ]; then
        NVCN="router.asus.com"
fi

cp -L openssl.cnf openssl.config

I=0
for CN in $NVCN; do
        echo "$I.commonName=CN" >> openssl.config
        echo "$I.commonName_value=$CN" >> openssl.config
        I=$(($I + 1))
done
........ 以上是部分代码

报错截图:

解决办法

nvram 中保存了设备的一些配置信息,而程序运行时需要读取配置信息,由于缺少对应的外设,因此会报错。要编译 nvram 文件,可以使用 Firmadyne 提供的 libnvram 库,因为其支持很多的 api。

libnvram.so 编译

libnvram 运行中其他错误

运行后,发现仍然缺少一些键值对,

错误截图:

解决方法

返回修改 libnvarm 的 config.h 文件添加对应的键值对

通过 ida 中 strings 搜索对应的 key 进行 value 的查找

time_zone_x

value

PST8PDT

HTTPD_DBG

Value

0 or 1

https_crt_gen

Value

0 or 1

https_crt_save

Value

0 or 1

修改后

错误截图:

解决方法

手动 touch 一个文件进去

touch var/run/nvramd.pid

cp: can’t stat ‘/mnt/libnvram.override/*’: No such file or directory

一样创建一个

mkdir mnt/libnvram.override

ssl 相关错误,例如 lib(2):func(1):reason(2):NA:0:fopen(‘/etc/cert.pem’,‘r’) 等一系列问题

解决方法

根据错误搜索/etc/cert.pem

通过分析上下文 + 本地文件生成可以知道,脚本 gencert.sh 并没有良好工作,需要我们在本地利用 openssl 生成对应的文件并 copy 到 etc 文件夹下即可

  1. 生成 privkey.pem 及 cert.csr
openssl req -new -out /tmp/cert.csr -keyout /tmp/privkey.pem -newkey rsa:2048 -passout pass:password
  1. 生成 key.pem
openssl rsa -in /tmp/privkey.pem -out key.pem -passin pass:password
  1. 生成 cert.pem
RANDFILE=/dev/urandom openssl req -x509 -new -nodes -in /tmp/cert.csr -key key.pem -days 3653 -sha256 -out cert.pem
  1. 生成 server.pem
cat key.pem cert.pem > server.pem
  1. 复制到/tmp/etc/下
cp server.pem cert.pem cert.crt key.pem ./tmp/etc

再次运行 搞定