欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

对基于Philips TriMedia CPU的网络摄像机进行逆向工程(二)

来源:本站整理 作者:佚名 时间:2020-03-03 TAG: 我要投稿

对基于Philips TriMedia CPU的网络摄像机进行逆向工程(一)

飞利浦TriMedia CPU
TriMedia微处理器最初由飞利浦制造,目前名为NXP(Nexperia)半导体(高通公司于2016年宣布收购NXP)。它是VLIW(超长指令字)处理器家族,这意味着它们可以使用哈佛架构同时并行执行给定数量的指令,其主要用途是用于DSP(数字)信号处理)。
一开始,TriMedia处理器的名称是“PNX”,后来改为“TM”。
TriMedia微处理器运行一个实时操作系统,称为pSOS。此外,也有人尝试将2.6 Linux内核分支移植到TriMediacpu上运行。
为了编写TriMedia微处理器的代码,需要用官方的SDK,它包含了你需要的所有东西(库、编译器、调试器、模拟器等),但是除了那些销售使用TriMedia处理器的大公司(例如D-Link和2Wire)之外,它是不可用的。但是,有一些兼容TriMedia的SDK,如Streaming Networks提供的IADK(集成应用程序开发工具包),专门为PNX1300系列设计。
另外,如果你想使用该处理器,还有一些配备TriMedia CPU的开发板,例如Streaming Networks提供的TriREF开发板。但是,这种包括IADK的板并不便宜。实际上,我联系了Streaming Network并向他们要了TriREF板,大约为5000美元,太贵了,我买不起。
在撰写本文时(2019年1月),我又有了其它选择,但其中不包括SDK。
在本文中,我将主要使用TriMedia PNX1300EH微处理器。
逆向TriMedia CPU的信息源
对TriMedia处理器进行逆向工程并不是一件容易的事,主要是由于缺少相关文档和工具。 互联网上关于TriMedia体系结构的文档很少,指令集文档很少,并且现有工具私有且昂贵。无论如何,我们可以使用一些旧的信息资源来开始我们的逆向工作。
开始研究的第一条信息来源是数据表,本文档包含有关处理器所有体系结构的信息。我们可以了解芯片中不同组件的主要思想,它们之间的相互作用方式,控制器使用的特定指令集等。如果你要从右边的引脚入手,则必须阅读数据表。
尽管专门针对JTAG研究,但另一个很好的信息来源是http://hackingbtbusinesshub.wordpress.com。即使该博客不再可用,仍然有一些副本存储在web.archive.org中。这个家伙在反转基于TriMedia CPU的2Wire路由器方面做得非常出色,并创建了一些出色的工具,例如2wiglet(基于urjtag,它是用于2Wire路由器和tm32dis的JTAG wiggler工具),这是TM32系列的TriMedia反汇编程序。
现在我们谈论JTAG,在上一节中,我提到了Monumental Data System提供的用于TriMedia CPU的JTAG PCI调试器。飞利浦还提供了一个官方的JTAG调试器,但是它比较特殊。TriMedia JTAG工具仅设计用于专有的JTAG电缆。 “电缆”实际上是一种复杂的编程设备。它是一个通过NetChip NET-2282外围控制器连接到PC的USB设备。编程器从其自己的EEPROM启动,并由带有NOR闪存和DRAM内存的Philips PNX1502 CPU驱动。
显然, IDA工具必不可少。 IDA从4.x版本(特别是4.21版本)开始就支持TriMedia CPU。
New features in version 4.21 (19/04/2002)
Processors
Trimedia (upon special request only)
[..]
如上所述,处理器模块仅在有特殊要求时才可用。我从HexRays请求了处理器模块,但他们不再提供。
最后,在这项研究期间,我收集了有关TriMedia(文档、工具)的各种信息,并将其存储在github中。
接下来,我将讨论TriMedia架构本身。
TriMedia PNX1300EH CPU
在本文中,我将不对CPU上的每个组件进行非常详细的描述,因为这没有任何意义。该处理器的最高速度为143MHz,可在2.5V电压下工作。它的内核称为DSPCPU,是通用的32位CPU,它还实现了某些媒体标准,例如MPEG-1和MPEG-2。以下是PNX1300的所有组件的框图:

我们已经看到DSPCPU使用了VLIW指令集,这使得每个时钟周期可以同时执行5个操作。 DSPCPU具有不同的“issue插槽”,总共五个,每个“issue插槽”具有不同数量的“功能单元”,总共27个,每个指令中包含的每个操作都可以将其作为目标。由于每个VLIW指令编码5个独立的操作,相对于其他指令,理解每个指令有点困难,跟踪控制流并不容易。
关于PNX1300的寄存器模型,它有128个32位通用寄存器,从r0到r127。在这128个寄存器中,有两个具有固定值。它们是分别包含整数值0和1的r0和r1,且主要用作布尔值TRUE或FALSE,不允许程序员写入r0或r1。
还有一个用于程序计数器(PC)的寄存器和四个特殊寄存器:PCSW(程序控制和状态字),DPC(目标程序计数器),SPC(源程序计数器)和CCCOUNT(自复位以来的时钟周期计数)。 PCSW通常用作包含标志的寄存器,例如32位和64位Intel平台中的EFLAGS和RFLAGS。重要的是要说明PNX1300 CPU具有可切换的bytesex(单位)。通过将BSX标志(位大小)写入PCSW寄存器,由软件完成bytesex切换。这意味着可以在同一执行中找到小端字节排序和大端字节排序。例如,加载和存储操作会观察PCSW寄存器中的BSX标志,以了解该操作应按小端还是大端顺序进行。如果BSX标志等于1,则使用小端字节排序。如果BSX标志为0,则使用大端字节排序。
DPC和SPC是用于异常处理的寄存器, CCOUNT寄存器是PNX1300中唯一的64位寄存器,用于循环计数,它计算自上次重置事件以来的时钟周期。
关于内存和MMIO,如数据表中所述,PNX1300在32位地址空间中定义了四个孔:内存孔,DRAM,MMIO和PCI孔。 DRAM从DRAM_BASE中指定的地址映射到DRAM_LIMIT寄存器中的地址。最大大小为64 MB。 MMIO位于MMIO_BASE处,固定大小为2 MB。 DRAM和MMIO的值是在BIOS引导时设置的。内存孔从地址0映射到0xFF,因此为256个字节。最后,所有未标记为DRAM,MMIO或内存孔的空间都应考虑在PCI孔中。以下是PNX1300中的内存映射图:

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载