下面将会介绍逆向一个路由器的过程,准确的说是一台华为 HG533路由器。
本文仅代表原文作者意图,同时文章中介绍的工具、技术带有一定的攻击性,请合理合法使用。
前面的思路也比较简单就是寻找串口,而这个串口也是预留性质的一个串口,主要是为了后期调试以及升级设备时使用。而对于路由器你可以看做是一个小型的嵌入式设备,从打印机到智能相机都可以这么看待,而串口有时候是隐藏起来的,我们的目的就是找到这个串口然后调试设备。利用串口可以访问路由器的CFE、观察boot和调试信息、通过一个Shell与系统进行交互异步串行通信。下文需要注意的是关于路由器串口的描述,在没有特殊说明的情况下,都是指UART。
这里需要注意一下,在路由器中,我们要寻找的串口不是指通常所见的RS232,而是指UART(通用异步收发器),它是路由器设备中比较常见的一种接口。在寻找UART过程中一定要注意在路由器主板上那些单行具有4~6个引脚的位置,大多数情况还是有用的,但少数情况例外。这个不是为用户准备的,所以有些时候是闲置的,同时也没有用到其引脚。在看到拆解之后的电路板后,有两处地方引起了我的注意。(见下图)
目测这个设备有两个不同的串口以及两处不同的电路构成,同时利用这两部分完成设备的通信任务。现在就有一个思路了,我们可以根据电路板接线情况,来找到主电路,而最后也可以得到我们需要的信息。
我们在这里发现两排引脚(见图),根据前面的判断这就应该是UART。现在找到了目标,第一件事情就应该是看看哪些是有用的,哪些是没有用的,我使用一个简单的技巧来判断,这是从电路板正面拍的照片,我们来一起看一下。
在这里我们需要注意PCB电路板上面的焊锡点之间的连接。
1.好像连接到了什么东西(注意两点钟方向的位置)
2.没有连接
3.如果焊点连接了很多地方,那么很有可能是GND或VCC引脚,但这不是万能的方法。需要补充一点的是,VCC引脚通常被做成方形,路由器主板上可以看到较宽的走线,那么该引脚极有可能也是VCC引脚。
4.GND引脚通常存在多条走线连接到周围的地线,所以看到周围的地线就需要注意了。而在这里就看到了这种情况,所以就可以判断出这个是GND引脚了。
5.连接到什么东西
在上面的图片我们看到了两个串口。那么现在就开始在上面进行焊接,虽然比较困难,我尝试从焊点正面突破,然后穿透焊点到背面去,但很明显这是非常困难的。而第二个串口,我打算利用 Dremel电动打磨机来达到前面的目的,这样就可以在PCB电路板的背面将其焊接好,这个工作量还是比较大的。
前面已经得到了三个有用的引脚,但我们还没有具体利用UART。这里需要强调的是UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。让我们来回顾一下UART:
TX【发送引脚,Tx 上发送的数据将被Rx 输入端接收】
Rx【接收引脚,Rx 输入端接收】
GND 【接地,该引脚电压通常为0】
Vcc【电源电压。该引脚电压较稳定,通常3.3V ~5V,不要尝试连接】
CTS【允许发送,同时CTS 是对RTS 的应答,通常情况下使用】
DTR【通常情况下使用】
CTS和RTS是串行通讯中流控制的两个引脚,简单介绍一下,就是当接收方(UART2)认为可以接受UART数据时,将RTS置为有效位。发送方(UART1)的 CTS引脚接收到此信号后,才将数据进行发送。一般来说,当UART数据接收缓存大于两个字节空余时,就可以将RTS置为有效接收。用举例的方法解释就是,A向B发送RTS信号,表明A要向B发送若干数据,B收到RTS后,向所有基站发出CTS信号,表明已准备就绪,A可以发送。而UART 可以进入一个内部回环(Loopback)模式,用于诊断或调试。在回环模式下,从Tx 上发送的数据将被Rx 输入端接收。而Tx以及Rx设置值时(默认值1),这时候电压也会出现浮动。
因此我们来总结一下,都得到了什么结论:
1.此前的三个引脚看来就是,TX、RX和GND。
2.一个看起来很像GND(正对着的第4个位置处)
3.Tx-被用于数据传输
4.Rx-与另外一处有关联
当然为了验证的话,我就需要尝试不同的排列组合方式,那么就需要USB-UART ,即下位机将USB的数据转换为UART的数据。下面可以利用示波器和万用表来了解每个引脚是什么情况了。
现在使用了示波器来验证每个引脚的具体情况:
1.GND-固定在0V所以肯定是接地
2.Tx -你可以在图片中看到发送的信息
3.在0v之间波动,那么一定是 Rx,那是因为还没有出现更大的浮动。
现在我们已经了解了引脚的情况,下面就需要分析串口情况了,那么就需要知道串口通信时的速率(波特率),就需要用到逻辑分析仪。如果没有,那么就需要尝试之前的排列组合方式了,
我已经开始利用分析仪分析了波特率的情况,现在就可以看到这些数据(/n/r/n/rU-Boot 1.1.3 (Aug…)。
一旦了解到串口以及波特率的情况,下面就开始与设备连接
现在已经得到了设备的硬件信息,下面就需要与设备建立通信关系。下面就开始USB-UART,然后利用两个串口进行通信,并用示波器查看其情况
当开始使用串口之后,计算机与设备之间也开始发送信息,这是当时的信息,下面是发送的第一行信息
Please choose operation:
3: Boot system code via Flash (default).
4: Entr boot command line interface.
0
命令行界面??当我按下4之后,就得到了这个。此外当我们按下3之后,等待Flash校验完成之后,再按下回车,就会看到“Welcome to ATP Cli ”信息以及一个登陆提示。经过尝试之后就可以利用默认密码 admin:admin成功登陆。
——————————-
—–Welcome to ATP Cli——
——————————-
Login: admin
Password: #Password is ‘admin’
ATP>shell
BusyBox vv1.9.1 (2013-08-29 11:15:00 CST) built-in shell (ash)
Enter ‘help’ for a list of built-in commands.
# ls
var usr tmp sbin proc mnt lib init etc dev bin
在命令行页面利用shell 命令就可以获取root权限了。而该路由器还运行了BusyBox,这些会在以后介绍。
现在都已经得到BusyBox了,在下面将会着重于软件,例如密码、一些应用程序等问题来介绍。当然还会介绍一些比较有意思的事情,敬请期待。。。。。。。
*参考来源: jcjc-dev .,饭团君投递,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)