【假装是大佬系列】教你魔改路由器固件

/ 0评 / 1

只是和像我一样的小白分享故事,高手根本不用看这个帖子,所以勿喷,谢谢。

一般路由器的固件,大体可以分为两个部分(这都是概念性的东西,看看就好):

1、rom区前面的内核部分(kernel)不可修改

2、overlay部分,此空间可以读写,它的文件系统是和rom区重叠的,比如说你要修改rom区的一个配置文件,它会存在overlay分区对rom增加和删除的内容都在overlay分区,这里保存了所有用户设置,删除/overlay下面的所有文件就相当于恢复出厂设置

一般固件都是要编译出来的,里面会包含内核部分。因为一些驱动程序,会编译进去。

但是!今天要说的不是完全编译一个固件,而是直接解包修改

首先,要想解包,得稍微了解以下知识:

1、Linux基本操作(会百度就行)。

2、html+css+js(解出来,你得会修改)

3、能写一点shell脚本(百度就行)

4、会刷路由器固件(如果这个不会,改了干啥用)

Linux可以用自己win10电脑的子系统

我们会用到一个工具:binwalk

我这里有包,可以下载拿去用:https://pan.baidu.com/s/1GWKfegsXJ74OiMEn2t3ZVg 提取码:39sh 

丢到Linux里面去,然后用python3安装一下:

python3 binwalk-2.1.1/setup.py install

如果报:No module named 'distutils.core'

就安装一下python3-distutils

sudo apt-get install python3-distutils

python好像自带的有?如果没有自己手动装一下:apt-get install python3

然后下载一个要修改的固件,到Linux下。以大家熟悉的官改固件为例(A大的官改就是用这种方式修改的):

用binwalk 解包:

binwalk -e k2p_bcm_v16.bin

然后就可以看到,固件的内容都被解出来了,一目了然:

主要的内容在squashfs-root这个文件夹里面,其他的部分可以不用管,主要改这里面的内容

于是你就可以开始研究squashfs-root里面的固件内容,各种修改,用你毕生所学,改!!!!

。。。。。。。

改完了,如果打包呢?这个就要回到最开始我们讲的理论,固件是分两个部分的。

我们改了半天,也都是在改overlay部分,那kernel咋办?

我们先用binwalk分析一下这个固件:

binwalk k2p_bcm_v17.d.bin

可以看到如下布局:

上图可以看到,有3个部分:

1、TRX firmware header

2、LZMA compressed data

3、Squashfs filesystem我们把前两个区域用dd命令切出来

dd if=/home/haodada/k2p/k2p_bcm_v17d.bin of=/home/haodada/k2p/head.bin bs=1 skip=0 count=1819880 

#if是原固件,of是输出文件,bs是单位长度,skip是偏移量,count是分区大小

count参数可以通过第三部分的第一个数字(偏移量)得来。

然后就是打包后面的部分:

mksquashfs /home/haodada/k2p/squashfs-root /home/haodada/k2p/rootfs.bin -comp xz

#squashfs-root指定目录,rootfs.bin指定输出文件,-comp xz 说明压缩方式为 xz ,视binwalk的输出而定。

于是就生成了一个rootfs.bin的文件

剩下的工作,就是把头和尾拼接到一起:

cat /home/haodada/k2p/head.bin /home/haodada/k2p/rootfs.bin > /home/haodada/k2p/haodadak2p.bin

这个输入的haodadak2p.bin就是最终的固件了

好了,我们的固件就打包完了~哈哈哈,

是不是超级简单,其实主要还是在于怎么去改固件的内容,这个就要看需求而定了,shell脚本写起来还是很简单的,看看大神的代码都能看懂。

再说几个过程中遇到的问题:

1、shell(.sh)脚本一定要给执行权限 chmod 755 xx.sh

2、如果在windows下编辑的sh脚本,可能是dos格式的,需要vim下set ff=unix,不然会有奇怪的事情发生。

我也是通过这种方式,魔改了K3和K2P的估计,现在你们用的官改里面,酸酸乳订阅、ping、阿里云ddns啥的,都是我做上去的,哈哈哈。成就感十足啊。

发表评论

邮箱地址不会被公开。 必填项已用*标注