我正在尝试为电视机顶盒使用固件,该固件基于GX3201芯片,该芯片基于C-sky CPU(我认为是CK610M)。

我有以下几点建议:


我无法正确识别CPU体系结构(可能是MIPS)。
我无法正确识别复位向量地址以将引导加载程序加载到IDA pro中。 />
有人对这些芯片有经验吗?

更新


SDK和源Ftp服务器中断
CPU指令集在头文件
指令集头文件

更新2

使用CPU的工具链并拆解lib目录中找到的vectors.o,这给了我:

00000458 <__reset_vector>: 
458:    711b lrw        r1, 0xA2A25441 
45a:    0f21 cmpne      r1, r2 
45c:    e802 bf         0x462 
45e:    1082 mfcr       r2, ss2 
460:    1093 mfcr       r3, ss3 
00000462 <skip_SS_ATAG>: 
462:    0f21 cmpne      r1, r2 
464:    e003 bt         0x46c 
466:    7218 lrw        r2, 0x0 // from address pool at 0x4c8 
468:    35f3 bseti      r3, r3, 31 
46a:    9302 st r3, (r2, 0)



objdump -i输出:

elf32-csky-big
 (header big endian, data big endian)
  csky
elf32-csky-little
 (header little endian, data little endian)
  csky
elf32-little
 (header little endian, data little endian)
  csky
elf32-big
 (header big endian, data big endian)
  csky
srec
 (header endianness unknown, data endianness unknown)
  csky
symbolsrec
 (header endianness unknown, data endianness unknown)
  csky
verilog
 (header endianness unknown, data endianness unknown)
  csky
tekhex
 (header endianness unknown, data endianness unknown)
  csky
binary
 (header endianness unknown, data endianness unknown)
  csky
ihex
 (header endianness unknown, data endianness unknown)
  csky

 elf32-csky-big elf32-csky-little elf32-little elf32-big srec 
 csky elf32-csky-big elf32-csky-little elf32-little elf32-big srec   

 symbolsrec verilog tekhex binary ihex csky symbolsrec verilog tekhex binary ihex 


评论

信息太少。什么是STB型号/制造商?固件下载?他们提供GPL来源吗? binwalk输出?

机顶盒信息:6605-dvbs2 CHIp = GX3201 CPU系列= CSLY该芯片由nationalchip.com/en
制造
我在此链接链接中找到了同一设备的源代码跟踪,但ftp服务器目前已关闭。我唯一拥有的是适用于ecos操作系统的cksy工具链,我发现带有指令集之类的mips头文件ck_opcodes.h试图用此文件中的操作码编写radar2插件。

我很确定r2已经支持MIPS,为什么还要编写插件?

当我对csky-ecos工具链的lib文件运行binwalk时,我得到了。 ELF,可重定位的32位LSB,摩托罗拉RCE,版本1(SYSV)binwalk -A不输出任何内容....!

#1 楼

该芯片确实很可能是MIPS,因此任何MIPS反汇编程序都可以使用。记住要尝试小尾数法和大尾数法。要查找入口点,请参见此处:逆向工程MIPS Bootloader
请注意,可能打包或加密了固件(请检查binwalk的熵分析);在这种情况下,可能有必要直接从闪存芯片读取它。
编辑:因此,显然该代码毕竟不是MIPS。通过objdump输出,该指令集似乎是Motorola / Freescale MCORE(以前是Motorola RCE)的派生产品,即使它们将其称为“ csky”。您应该能够通过将二进制文件格式和体系结构指定给objdump来反汇编原始二进制文件,例如:
objdump -D -b binary -m csky file.bin

如果无法获得良好的结果,请尝试添加-EB-EL强制使用大端或小端顺序拆卸。请注意,有时在数据与代码混合的情况下,您可能会胡说八道。(-D强制整个文件进行反汇编)。提交消息说:

V1是从MCore架构派生的,而V2基本上是
不同,具有混合的16位和32位指令,一个更大的寄存器,一个不同(但重叠)的ABI等。

EDIT3:Radare2逆向工程框架中添加了C-SKY和Motorola MCore体系结构支持。您可以将其与-a mcore Radar2开关一起使用,它也应该直接在ELF文件中识别体系结构。

评论


谢谢您的提示,引导加载程序没有打包,我可以看到所有字符串,我找到了带有交叉编译器的完整工具链,这对我有什么帮助?

–Steavebba
17年2月8日在19:15

如果工具链具有objdump,请尝试使用它来拆卸固件。

–伊戈尔·斯科钦斯基♦
17年2月8日在19:17

我无法使用objdump(未知文件格式)直接拆卸固件,但是在lib目录中拆卸vectors.o时得到了这样的信息:'00000458 <__ reset_vector>:458:711b lrw r1,0xA2A25441 45a:0f21 cmpne r1,r2 45c:e802 bf 0x462 45e:1082 mfcr r2,ss2 460:1093 mfcr r3,ss3 00000462 :462:0f21 cmpne r1,r2 464:e003 bt 0x46c 466:7218 lrw r2,0x0 //来自地址池0x4c4 0 bseti r3,r3,31 46a:9302 st r3,(r2,0)'

–Steavebba
17-2-8在23:19



@Steavebba,请将此信息添加到问题中,以及“ objdump -i”的输出

–伊戈尔·斯科钦斯基♦
17年2月8日在23:23

如果BF指令属于MIPS指令集,我可以在M-CORE文档中找到它,那么必须检测到一条分支指令(BR,BT,BF),该分支指令的反向分支距离在4到64条指令之间。此简短的向后分支指令称为sbb。

–Steavebba
17年2月8日在23:56

#2 楼

为了阐明该线程:C-Sky CPU是SoC和PoC包中的16/32位可变长指令集ISA,看起来像MIPS,可以切换为在Windows中执行代码。大端或小端。 CK610M是v1 ISA,具有MMU,因此它能够运行Linux,其中包含自v4.19开始的支持。

当前(自2018年10月起)售价为6美元的C- Sky Development SBC在NationalChip生产的gx6605s SoC封装中支持CK610M。 QEMU支持启动C-SKY v1和v2 ISA。

https://c-sky.github.io/docs/gx6605s.html