分析路由器的bin文件以及ART提取

不同芯片,甚至不同厂家的分析略有不同,下面分开介绍。

分析Atheors芯片设备

分析Flash内容

下面以TP-Link WR842N v7.0的Flash为例。

首先用WinHex打开上面读出的Flash镜像。

1.png


可以看到都是0x10开头的16进制数字。这是因为mipsCPU的跳转指令为0x10开头,这部分都是一些跳转指令。mips CPU在一上电时,会把该区域作为中断向量表来读取。具体请参考《see mipsrun》这本书。

这个开头的位置其实就是uboot了。然后向后查看,会发现到一个位置全部是0xFF的数据了,这就是uboot结束了。因为Flash在擦除后,没有写内容时,默认为0xFF

2.png


试一下:WR842N v7.0的固件是有两级uboot的,你可以试着找出第二个uboot的位置。

在设备的背面一个标签,写着设备的MAC地址,可以使用WinHex的“搜索→查找16进制数值”的功能,找到MAC地址在Flash中记录的位置。我的这个设备的MACEC:26:CA:FF:B1:40,所以查找:EC26CAFFB140。发现它是在Flash0x20000位置。

3.png


设备出厂的MAC地址一般都保存在Flash相对靠前,或靠后的位置,而且会离对齐的地址位置比较近(如能被0x1000整除的位置)。如果出现在中间,而且在Flash中不只出现这一次的,很可能这里只是一个配置文件。接下来需要查看校准信息的位置。对于AR934x/QCA953x/QCA955x/QCA956x的芯片来说,它们的校准信息一般以0x0202开头,信息头后面的内容密度比较低(就是0x00很多),然后再出现一大堆重复的数字(这部分是不同频率的校准功率)。如下面这个:

4.png

所以,WR842N v7.0的校准信息的位置是Flash的0x20810位置。

提示:PCIE设备是以2字节长度,2字节CRC开头,然后一般是0x0202(11N芯片)或0x0203(11AC芯片,一般长度是0x4408,就是0x844长)。

其它部分对于刷SuperWRT来说就是没用的了。你可以自由分区,不过SuperWRT的tiny版本的firmware至少要保证0x1d8000大小的分区,配置则至少保证大于0x6000。

上面查找WR842N v7.0第二个uboot的位置的问题,可以在这里揭晓答案,是0x28000的地址上。

再看0x21000位置的内容,猜测可能是配置文件。

5.png

所以,对于WR842N v7.0的官方分区结构应该是这样的。

0x000000-0x01ffff                 uboot

0x020000-0x020fff                 MAC地址和WLAN校准信息

0x021000-0x027fff                 配置文件

0x028000-0x1fffff                 firmware



这里,还要介绍一下SuperWRT的分区建议:

        对于支持4k擦除功能的Flash(winband和GD的Flash都是支持的),uboot的大小为0x1c000,然后是0x1000或0x4000大小的SBI分区,用于保存sbi(SuperWRT Board Info)。

        不支持4k擦除功能的Flash,uboot的大小为0x20000,直接将SBI包含在内。

        至少存在一个config分区,用于存放配置,分区大小不小于0x6000。

        一个firmware分区,分区大小不小于0x1d8000。

        原来设备的校准信息用CAL分区名,如果校准信息不是连续在一个区域内(如MAC地址写在了Flash前面,校准信息写在了Flash后面),可以用CAL2的分区,依次类推。

        建议增加一个custom分区,用于定制化初始配置。

        如果Flash较大,还可以增加config2分区,与config分区分配相同大小,用于保护配置文件在异常时,可自动恢复上一次配置。


所以,我们可以使用一样分区结构来适配SuperWRT:

0x000000-0x01bfff                 uboot

0x01c000-0x01dfff                 SBI

0x01e000-0x01ffff                 custom

0x020000-0x020fff                 CAL

0x021000-0x027fff                 config

0x028000-0x1fffff                 firmware


在SuperWRT在线定制工具中,boot参数替代栏目中,应该这样填写:

bootargs="console=ttyS0,115200

mtdparts=spi0.0:112k(uboot),8k(SBI),8k(custom),4k(CAL),28k(config),1888k(firmware)"

提醒:如果用编程器写Flash,记得先载入原来的Flash内容,然后再用生成的uboot覆盖前面的0x1d000大小。这样可以保持原来的校准信息和MAC地址。

其它常见情况

TP-Link的2M设备,还会常见到这样的分区结构:

0x000000-0x00efff          uboot

0x00f000-0x1dffff           firmware和配置文件

0x1e0000-0x1effff          MAC地址

0x1f0000-0x1fffff             WLAN校准信息(信息位置在0x1f1000位置)


由于SuperWRT的uboot和SBI一起需要至少保证0x1d000大小的开始Flash空间。所以,如果保持MAC地址和WLAN校准信息位置不动,剩余的空间仅为0x1c0000,不够Firmware使用的。在这种设备上,只能移动MAC地址和WLAN校准信息的位置。


注意:下面支持4k擦除的Flash才可以这样操作(Winbond、EON和GigaDevice的2MFlash都可以的)。

新的分区结构为

0x000000-0x01bfffuboot

0x01c000-0x01cfffSBI

0x01d000-0x01dfffCAL

0x01e000-0x01ffffcustom

0x020000-0x027fffconfig

0x028000-0x1fffff firmware

在刷入uboot后,刷入新firmware前,需要先移动MAC地址和WLAN校准信息:

cp.b0x9f1e0000 0x80060000 0x100

cp.b0x9f1f1000 0x80060800 0x800

erase0x9f01d000 +0x1000

cp.b 0x80060000 0x9f01d000 0x1000

这样,在制作uboot时,MAC地址的位置为0x1f01d000,WLAN校准信息的位置为0x1f01d800。boot参数替代栏目中,应该这样填写:

bootargs="console=ttyS0,115200

mtdparts=spi0.0:112k(uboot),4k(SBI),4k(CAL),8k(custom),32k(config),1888k(firmware)"

还有些设备的Flash只有1M,需要更换大Flash,或者用户自己换过更大的Flash,这时就需要对Flash进行重新分区。但建议即使使用了新Flash,仍要保证Flash中是原来的WLAN校准信息和MAC地址(可以分别保证无线通信质量,和手机室内定位时不会漂走)。

4M Flash

建议的分区格式如下:

0x000000-0x01ffff          uboot+ SBI

0x020000-0x3dffff          firmware

0x3d0000-0x3dffff          config

0x3e0000-0x3effff          custom

0x3f0000-0x3fffff             CAL

MAC地址复制到CAL分区的头位置,这里是0x3f0000。WLAN校准信息复制到CAL中的0x1000偏移位置,这里是0x3f1000。如果有第二个WLAN,复制到0x3000偏移位置,以此类推。

对于更大的Flash,扩大firmware分区即可。

分析GPIO连接

分析串口的GPIO

对于AR934x/QCA953x/QCA955x的芯片设备,一般串口的GPIO是固定的,虽然可以更改,但一般没有厂家会改动它。而QCA956x的不同设备串口GPIO可能会略不同。

使用SuperWRT uboot在线生成工具,生成一个相应芯片的uboot,这时你不用配置任何GPIO信息,只配好校准和MAC信息位置即可。

注意:对于QCA956x来说,还是要配置一下串口GPIO的,一般在18-24这几个GPIO里试一下。WR886n就是19为Rx,20为Tx。Atheros官方的参考设计里提供了RX20_TX22、RX18_TX22、RX18_TX20、RX24_TX20、RX19_TX22这几种配置。

SuperWRT支持Atheros芯片的uboot的串口速率为115200bps。

如果串口不能正常工作,你可以用在线工具尝试使用不同的GPIO。

你可以使用原镜像的uboot支持刷入SuperWRT的uboot到Flash中(参考这里),也可以用编程器烧写Flash。

当串口正常工作后,即使网络工作不正常,仍可以用loadb命令通过串口更新uboot,可以减少重新吹焊Flash的操作。(uboot的使用参考这里)

当串口正常工作后,就可以用后面的教程来测试其它GPIO了。

分析其它GPIO

当串口正常后,你就可以进入uboot命令行。使用SuperWRT uboot中提供的gpio命令测试gpio了。

先使用读命令测试出按键的位置:

gpio [测试的号码] 1

(按键后,再重复命令)

gpio [测试的号码] 1

如下面是对WR886n的测试:

ath> gpio 1 2 0

(将GPIO原绑定的功能清除)

ath> gpio 1 1

GPIO(1): 1

(按住Reset键)

ath> gpio 1 1

GPIO(1): 0

所以,WR886n的Reset键是GPIO 1。

注:新版本增加了gpio monitor命令,可监控所有输入的GPIO变化。

先用输入测试,是为了防止两个输出引脚未通过电阻连起来,消耗电流过大。

然后,用输出进行测试,看什么时候LED被点亮,说明该GPIO是控制那个LED的。

gpio [测试的号码] 1 0

gpio [测试的号码] 1 1

对应设备外壳,找出LED灯的功能定义(比如:是WAN口的灯,系统灯)。

使用SuperWRT在线定制工具填入配置,即生成了你设备支持的版本。

设备中直接分析Flash内容

这里强烈建议使用上面读取Flash的方法,因为上面的方法比较安全,是可以恢复的。下面介绍的方法可能会造成设备无法启动,请谨慎使用。

首先,通过连接设备串口,进入原uboot的命令行。如果是TP-Link的设备,可以尝试输入tpl或slp进入。

然后,使用uboot的md命令,确认初始位置的Flash写入是安全的。

md 0x9f000000

每隔0x1000地址查看一次,一直查看到0x9f01c000位置。

确认每一次显示的16进制中,无设备的MAC地址(设备MAC地址的16进制值)及无线校准信息(以0x0202或0x0203开始的)。

确认完上面内容后,就可以将相似设备的uboot烧入Flash中。烧写uboot的方法可以参考安装SuperWRT系统

SuperWRT定制的uboot中,提供了一个mg命令,在更新完uboot后,可以使用该命令来定位MAC地址及无线校准信息位置。

如:设备的MAC地址为EC:26:CA:FF:B1:40,则可以在中查找该值:

mg EC26CAFFB140

查找无线信息也可以同样的方法。如果需要进一步确认位置中的信息是否正确。可以使用md命令查看更长位置中的16进制位。如

md 0x9f3f0000


本文章由作者:佐须之男 整理编辑,原文地址: 分析路由器的bin文件以及ART提取
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资 源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。

相关推荐