HackPluto's Blog

使用firmware-mod-kit修改路由器固件

字数统计: 1.3k阅读时长: 5 min
2020/09/27 Share

firmware-mod-kit 使用教程

firmware-mod-kit工具包可用于提取固件中的文件系统,然后进行进行修改,并重新打包成固件。
我们可以使用它对固件做定制化的修改,但是也有可能被恶意地用作固件中添加后门等,所以在下载固件时应到官方网站下载,并检查固件是否被修改过。

官方文档

环境配置

1
sudo apt-get install git build-essential zlib1g-dev liblzma-dev python-magic

clone代码

1
git clone https://github.com/rampageX/firmware-mod-kit.git

编译安装

1
2
cd firmware-mod-kit/src
./configure && make

常用功能

解包固件

使用以下命令解包固件,firmware.bin为需解包的固件,working_directory为解包结果存储位置。

1
./extract_firmware.sh firmware.bin working_directory /

这是此目录的子文件夹:

1
2
3
4
5
6
rootfs /
这是文件系统所在的位置,在此处进行修改。
image_parts /
这是存储中间文件的位置。如果需要替换内核(不建议),可以通过在此处替换适当的文件(通常为segment2)来替换。
installed_pa​​ckages /
如果使用ipkg_install.sh工具,则此位置将是您在固件解压缩后安装的软件包的位置。

安装软件包(.IPK)

使用示例:

1
./ipkg_install.sh some_package-1.2.5.ipk working_directory /

some_package-1.2.5.ipkg 是软件包的文件名。
working_directory 与提供给extract_firmware.sh脚本的工作目录相同。

ipkg_install_all.sh脚本也可用于安装软件包的整个文件夹。

已安装软件包的集合将存储在

/ installed_pa​​ckages```中。
1
2
3
4
5
6
7
8

### 删除软件包(.IPK)

要删除软件包,使用ipkg_remove.sh脚本。

使用示例:
```sh
./ipkg_remove.sh some_package-1.2.5.ipk working_directory /

some_package-1.2.5.ipkg将是软件包的文件名。

working_directory与您提供给extract_firmware.sh脚本的工作目录相同。

ipkg_remove_all.sh脚本也可用于安装软件包的整个文件夹。

如果成功,将更新存储的

/ installed_pa​​ckages```的已安装软件包的集合,以反映更改。
1
2
3
4
5
6
7
8


### 重新打包固件
修改完解包后的文件系统后,使用build_firmware.sh重新打包固件,新生成的固件将存在output_directory目录下。


```shell
./build_firmware.sh output_directory / working_directory /

使用哪个构建脚本取决于使用哪个提取脚本。如果使用

1
2
3
4
5
6
7
8
9
10

### 目录树差异和&模糊散列
当我们发现下载的固件是被修改过时,可以使用[binwally](https://github.com/bmaia/binwally)将修改过的固件与原版固件对比,从而发现具体修改内容。

### DD-WRT固件相关脚本
```ddwrt-gui-extract.sh```从提取的DD-WRT固件中提取Web GUI文件。
使用extract-firmwware.sh提取DD-WRT固件映像后,可以通过运行以下命令提取Web文件

```shell
./ddwrt-gui-extract.sh

这将创建一个名为“ www”的目录,并将其中的Web文件解压缩。可以按照自己喜欢的任何方式修改文件,但是不能添加或删除文件。

完成编辑后,可以通过运行以下命令来重建Web文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
将修改后的Web GUI文件还原到提取的DD-WRT固件。

## 所有功能
### src/asustrx
ASUSTRX的扩展版本,可以构建“正常” TRX文件,也可以构建附加了ASUS addver样式标头的文件。它也可以唯一地强制TRX中的段偏移(带有-b开关),以与Marvell ASUS设备(例如WL-530g)兼容。该工具替代了“普通” trx工具和addver。当前版本是:0.90 beta。

### src/addpattern
用于将Linksys样式的HDR0标头预先添加到TRX。

### src/cramfs-2.x/cramfsck
CRAMFS文件系统检查器和提取器。

### src/cramfs-2.x/mkcramfs
构建一个cramfs文件系统映像。

### src/cramfsswap/cramfsswap
交换CramFS映像的字节序。

### src/crcalc/crcalc
修补给定固件映像中的所有uImage和TRX标头

### src/squashfs-2.1-r2/mksquashfs
构建一个squashfs文件系统映像。同src/squashfs-3.0/

### src/motorola-bin
该程序为Motorola设备WR850G,WA840G,WE800G的TRX 映像添加8个字节的标头

### src/splitter3
用于扫描和提取固件映像的组成部分。

### src/tpl-tool/src/tpl-tool
tpl-tool是用于提取和重建官方TP-Link路由器产品的固件映像的工具。

它已经成功测试了来自七个不同的产品的二十四个不同的映像。然而它应与任何官方或第三方固件映像一起使用,使用与OpenWrt映像相同的格式。

命令格式:
```SHELL
tpl-tool <option> <file> [-o <file>]

-s <file> 以易于阅读的形式显示映像头部信息

-x <file> 将映像的各个部分提取到文件。

<file>-header

<file>-bootldr (when present)

<file>-kernel

<file>-rootfs


-b <file> 从提取的各个部分重建映像 with -x

<file>-header

<file>-bootldr (when present)

<file>-kernel

<file>-rootfs

其中<file>是输入文件名,输出文件<file> 用-new或-o指定


-o <file> 指定备用输出文件名

src/uncramfs

提取cramfs文件系统映像的备用工具,但是尽可能使用cramfsck。

src/uncramfs-lzma

提取LZMA压缩的cramfs文件系统映像的替代工具,例如OpenRG使用的映像。

CATALOG
  1. 1. firmware-mod-kit 使用教程
    1. 1.1. 环境配置
    2. 1.2. 常用功能
      1. 1.2.1. 解包固件
      2. 1.2.2. 安装软件包(.IPK)
      3. 1.2.3. src/uncramfs
      4. 1.2.4. src/uncramfs-lzma