逆向华为路由器-part1(翻译)

这是逆向华为HG533路由器的系列教程


首先,这是最基本的逆向工程。我们只是简单地寻找一个串行端口,设计该设备的工程师将其留在电路板上,用于调试和潜在的技术支持。 尽管我会用路由器来解释这个过程,但它可以应用于大量的家庭嵌入式系统。从打印机到知识产权相机,如果有点复杂,很可能运行某种形式的linux。它也可能有隐藏的调试端口,就像我们在这篇文章中要寻找的那样

寻找串行接口
大多数UART有4到6个引脚,通常排列整齐,以某种方式标记在印刷电路板上。它们不适合最终用户,所以它们不会连接引脚或连接器。 查看电路板后,发现有两组未使用的焊盘,无论如何,在我焊接图中的引脚之前,它们是未使用的
Pic of the 2 Potential UART Ports
该设备似乎有两个不同的串行端口与两个不同的集成电路通信。根据电路板上的位置并遵循它们的轨迹,我们可以找出哪一个连接到主集成电路。这是最有可能拥有有趣数据的一个
在这种情况下,我们只需尝试联系他们两个,并找出他们每个人能提供什么。

识别无用引脚
所以我们发现了两行引脚——乍一看——可能是UART端口。你要做的第一件事就是找出这些联系是否无用。我用一个非常简单的技巧来帮助找到无用的焊盘:从印刷电路板的背面闪一个强光,从正上方看。看起来是这样的:

我们可以看到印刷电路板的任何一层是否与焊盘中间的焊料滴接触。

  1. 与某样东西相连接(我们可以看到“两点钟”的痕迹)
  2. 未连接
  3. 100%连接到平面或厚迹线。这几乎可以肯定是一个电源引脚,要么是GND,要么是Vcc
  4. 各方面的联系。这个很可能是另一个电源引脚。调试端口中的数据引脚没有理由连接到4个不同的走线,但是焊盘被一个平面包围可以解释这些连接
  5. 与某样东西连接
易于接触线路的焊接引脚
在上图中,我们可以看到两个串行端口,这些端口中的焊盘是通孔,但是孔本身被非常硬、熔点非常高的焊料块填充。
我试着将引脚焊接在焊盘上,但是他们使用的焊料不容易使用。对于第二个串行端口,我决定用Dremel和针状钻头钻穿焊料块。这样,我们可以将引脚穿过这些孔,并将其正确焊接在印刷电路板的背面。它非常有效。

Use a Dremel to Drill Through the Solder Blobs
识别引脚排列
所以我们有两个连接器,每个只有3个有用的引脚。我们仍然没有验证端口是否工作,也没有识别设备使用的串行协议,但是引脚的数量和排列暗示了异步收发器
让我们回顾一下UART协议。规范中有6种引脚类型:

  • tx[发射引脚。连接到我们的Rx]
  • 接收[接收引脚。连接到我们的Tx]
  • GND·[广场。连接到我们的GND]
  • Vcc董事会的电源线。通常为3.3V或5V。不要连接]
  • CTS 通常未使用]
  • DTR·[通常未使用]

我们还知道,根据标准,默认情况下,发送和接收被拉高(设置为1)。线路(Tx)的发送器负责将其拉起,这意味着如果没有连接,线路的电压将会浮动。
因此,让我们汇编我们所知道的,并得出一些结论:

  1. 每个报头中只有3个引脚可能连接到任何东西。那一定是Tx、Rx和GND
  2. 两个引脚看起来很像Vcc和GND
  3. 其中一个——发射——默认情况下将被拉起并正在传输数据
  4. 第三个Rx将会浮动,直到我们连接到线路的另一端

这些信息似乎足以让你开始尝试不同的从通用异步收发器到通用串行总线的组合,但是随机连接你不理解的引脚是你最终如何爆炸的。
让我们继续挖掘。
万用表或逻辑分析仪足以找出哪个引脚是哪个引脚,但如果你想了解每个引脚到底发生了什么,没有什么能比得上半个像样的示波器:
Channel1=Tx Channel2=Rx
用示波器检查引脚后,我们可以在每个引脚中看到以下内容:

  1. GND和Vcc已验证——引脚2和3中的固态3.3V和0V,如预期
  2. 发送已验证-您可以清楚地看到设备正在发送信息
  3. 其中一个引脚浮动在接近0V的位置。这一定是设备的Rx,它是浮动的,因为我们还没有连接另一端。
现在我们知道哪个引脚是哪个了,但是如果我们想和串行端口通话,我们需要找出它的波特率。我们可以从逻辑分析器的简单协议转储中找到这一点。如果你没有,你必须用最常见的列表来玩“猜波特率”,直到你通过串口得到可读的文本。
这是一个逻辑分析器的转储,我们在其中启用了协议分析,并尝试了一些不同的波特率。当我们点击正确的选项时,我们开始在嗅到的串行数据中看到可读的文本(\ n \ r \ n \ Ru-Boot 1 . 1 . 3(8月...)
Logic Protocol Analyser
一旦我们有了引脚排列和波特率,我们就可以开始与器件通信了:
Documented UART Pinouts
连接到串行端口
现在我们已经在硬件方面获得了所有需要的信息,是时候开始与设备对话了。将任何通用异步收发器连接到你周围的通用串行总线桥上,并开始漫游。这是我的硬件设置,用于同时与两个串行端口通信,并用示波器监控其中一个端口:
All Connected
当我们打开计算机中的串行终端与设备通信时,主通用异步收发器开始输出有用的信息。这些是我用来连接到每个端口的命令以及它们在引导过程中发送的第一行命令:
Boot Sequence
Please choose operation:
   3: Boot system code via Flash (default).
   4: Entr boot command line interface.
 0
命令行界面??我们找到了进入系统的方法!当我们按下4时,我们会得到一个命令行界面来与设备的引导加载器交互。
此外,如果我们让设备作为默认3启动,等待它完成启动并按回车键,我们会收到欢迎使用ATP Cli的消息和登录提示。如果开发人员修改了密码,这一步会有点问题,但是在嵌入式系统中找到默认凭证是很常见的。经过几次手动尝试,凭据管理员: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命令将带我们以根权限直接进入Linux命令行界面:) 这台路由器运行BusyBox,这是一个类似linux的接口,我将在下一篇文章中详细讨论。
下一步

现在我们可以访问BusyBox命令行界面了,我们可以开始搜索软件了。根据您要反转的设备,可能会有纯文本密码、TLS证书、有用的算法、不安全的私有APIs等。等等。等等。 在下一篇文章中,我们将关注事物的软件方面。我将解释引导模式之间的区别,如何转储内存,以及其他有趣的事情,现在你可以直接访问设备的固件。 谢谢你的阅读!:)











评论

此博客中的热门博文

固件逆向-part1

逆向华为路由器-part2(翻译)