Chinaunix首页 | 论坛 | 博客
  • 博客访问: 137015
  • 博文数量: 57
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 365
  • 用 户 组: 普通用户
  • 注册时间: 2015-04-14 23:29
文章分类

全部博文(57)

文章存档

2018年(3)

2017年(2)

2016年(42)

2015年(10)

我的朋友

分类: 嵌入式

2016-05-16 15:50:49

楼主发此贴的目的是让你们放弃对不拆机刷机的幻想。遇到VxWorks的路由,老老实实拆机硬改吧!!

TP-LINK 的 VxWorks 固件头有两种:

第一种是比较早的,以 TL-WR841N v9 国内版为例:
其特点是整个固件就是一个文件
 


第二种是比较新的,以 TL-WR882N v1 为例:
其特点是固件分为文件系统部分和内核部分
 


以上两个图选中的部分是固件的 MD5 校验。
MD5 校验方式和 Linux 版的检验方式相同,即使用一个固定的 16 字节数据填充选中的部分,再计算替换后的文件的 MD5,将此值覆盖回选中的部分。

楼主用 IDA 对固件进行了逆向分析,得到了那串固定的 16 字节数据:
CC 96 28 EE 8D FB 21 BB 3D EF 6C B5 9F 77 4C 7C

使用此数据就可以成功绕过 MD5 校验。

但是,这还没完!

(P.S. 这个仅部分固件有以下这个校验)
重新计算 MD5 校验后,在 Web 里进行升级,会出现如下提示:
 


这个提示实际上是骗人的,真实的错误是什么呢?
需要看看 TTL 的输出:
 


看最后一行的提示: RSA SIGN is error
这说明固件带有 RSA 签名!

这个数字签名在何处呢?比较一下刷入到 Flash 中的数据和原升级固件,发现升级固件里最后有 0x80 字节没有被写入,这就是 RSA 签名:
 


修改固件内容,RSA 签名就会被破坏。
0x80 字节的数据说明此 RSA 是 1024-bit 的,暴力破解基本无望。
因此,想要通过修改固件头来刷其他固件基本上是不可能的了。

P.S.

在 IDA 里可以看到升级固件的步骤:
 


可以看到系统会依次检查固件头的 Magic、产品ID、固件版本、生产商ID、国家ID、语言ID、固件大小、MD5校验,
最后检查 RSA 签名。

此 RSA 签名的方式应该是先计算固件的 MD5,再对此 MD5 值进行签名。

分析固件可得到3组疑似公钥:

BgIAAACkAABSU0ExAAQAAAEAAQA1Ccyu85b65TawjvSQTaryGNk1gBJVn6kEIJq6m0hagsqkiy32v4ui41ucp6tKfaoqb7AHDBq41dcEMgM6YBF2e3aRKQqZ6EwgCvAi3O81n7UbE97lD+FhvqlYxyqqMbSdvNmCiAoujheUs9DUaOCHq4K3McDxATMVOnCtT1H+wQ==

BgIAAACkAABSU0ExAAQAAAEAAQD7Bk7f7fdnL9drucbr+P9wA2JUlYP/OH4zvIS69eY3KKmUB1fs9ND06EINqTQ4vQ4gCeekU1dRi3WiZLgVjo/UzovplddUezNMWq0gk4TVbsGf/xzXZN+pDWid9zYsSr9qvINId6cnMR+s/wXB1TOE6t6wfzHvnbkJR0r1mqG4yA==

BgIAAACkAABSU0ExAAQAAAEAAQAHNt5fFl0BUlLkPjKJloZFlVFkegFjEsVJCRjwbRD6i646tpvc/Z5MK6SuXcz3yizxDGMnZ6BJdqCR9SJTdd3b11F7Q+pgetcAgX5X9NZTzo1MCvpkKAlEyZG0rXMpSbADNNqtACNT0BLhHu4nyiDBBIIOSZljQAzHiqSquxHDsg==

点评

 
其实不必 得到RSA签名的私钥,如果可以找到公钥的存储位置,可以替换公钥,然后用自己的私钥签名解决。  发表于 2014-7-11 12:43
阅读(1723) | 评论(0) | 转发(0) |
0

上一篇:oepnwrt 文件系统

下一篇:openwrt安全

给主人留下些什么吧!~~