分类: 嵌入式
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== |