https://www.bilibili.com/video/BV1D3411b7XY/?spm_id_from=333.788.recommend_more_video.-1
长亭的大佬们太强了

先看看目标路由器的操作系统相关信息,看能不能找到一些入手点。
这款路由器使用的是VxWorks系统,然后该系统的相关信息如下:

VxWorks

任务调度
  • 为嵌入式设备准备的试试操作系统。与linux不同,该操作系统以task为单位进行运算调度(Linux以线程为单位)

image.png

  • 某个task崩溃或异常会导致整个系统崩溃。

    内存管理与权限管理
  • 没有内存管理(MMU)

  • 没有虚拟内存
  • 所有任务运行在实模式,可以执行特权指令。Linux的运行在用户态的保护模式中。

    代码生成
  • 业务逻辑不单独编译,与内核代码一同编译生成单个二进制文件

  • 所有操作系统功能直接使用函数调用方式调用

然而经过查阅了一些资料之后发现,VxWorks是存在MMU的,只不过可能是因为默认情况下是不开启的或者跟物理地址一 一对应所以这里大佬认为是没有。
image.png

硬件信息

看过操作系统之后采集硬件信息寻找突破口
image.png
tp1900联发科的芯片但是网上找不到任何关于该芯片的信息,很可能是TP-LINK定制的一款芯片。除了芯片左边的UART也值得注意,但是ttl连接之后可以发现只是个串口。

固件获取

从官网上即可下载到该设备的固件
https://service.tp-link.com.cn/detail_download_7989.html

固件分析

binwalk模糊分析

image.png首先第一行就是uImage header,通常用以存储固件或bootloader,binwalk无法自动提取。
然后看第二行,位置靠前且大小很大,而且紧随uImage header,有可能是固件可执行程序。固件后半部分紧凑排列许多文件,怀疑是某种文件系统中的文件。

手工解压uImage

uImage结构:
https://github.com/u-boot/u-boot/blob/master/include/image.h#L266

  1. typedef struct image_header {
  2. uint32_t ih_magic; /* Image Header Magic Number */
  3. uint32_t ih_hcrc; /* Image Header CRC Checksum */
  4. uint32_t ih_time; /* Image Creation Timestamp */
  5. uint32_t ih_size; /* Image Data Size */
  6. uint32_t ih_load; /* Data Load Address */
  7. uint32_t ih_ep; /* Entry Point Address */
  8. uint32_t ih_dcrc; /* Image Data CRC Checksum */
  9. uint8_t ih_os; /* Operating System */
  10. uint8_t ih_arch; /* CPU architecture */
  11. uint8_t ih_type; /* Image Type */
  12. uint8_t ih_comp; /* Compression Type */
  13. uint8_t ih_name[IH_NMLEN]; /* Image Name */
  14. } image_header_t;

获得结构体之后就可以通过编写010 template来便捷的提取出其中的结构和数据。或者新版本的010editor可以直接分析出其中的结构和数据。
image.png
拿到boot-loader我个人感觉也就看个入口点,但是入口点跟加载基址基本上是固定的,而且也不一定用这种方法。确定是boot-loader之后基本上就没必要继续进行分析了