检查 c-sky elf 应用程序

逆向工程 反编译 奇木
2021-07-03 20:12:25

我是逆向工程的新手,但这些天我在家时,我想破解我的卫星接收器,接收器基于 c-sky v1 架构

搜索论坛,我设法将固件分解(app.squashfs 、 app_rootfs.jffs2 、 loader.bin 、logo.cramfs 、 upgrade_rootfs.squashfs 和 zImage

然后我从 app.squashfs 中提取了一个名为“ dvbapp的文件,我认为这是完成所有工作的主应用程序

它是一个 ELF 文件,但不能被 ghidra 检测到,因为它不支持 c-sky ,radare 也不

我的问题是我还能做些什么?我什至可以检查应用程序的来龙去脉(也许是 qemu?),或者反汇编/反编译它?

c-sky 有一个很大的工具集存储库(这里:https : //github.com/c-sky),但我对 linux 开发不太了解

谢谢

3个回答

是的,这是主要的应用程序,通过网络 telnet 进入 stb,用户 root,没有密码。您会发现 stb 将该块挂载为 /dvb/out.elf,即此文件。

它的主要应用程序,大多数命令行实用程序都在busybox中,还有一些在操作系统启动和网络或USB插入后的脚本。

串行端口(可能未安装到后面板)用于加载固件而不是 tty。

我知道有 2 个版本的 C610 处理器,GX6605s 和 GX6622,它们具有 cat5 和 wifi 支持、更大的闪存和内存。

调谐器/解调器、面板和帧缓冲区 dvb 输出都作为内核模块加载,dvb 应用程序使用这些模块来控制 IO。

还有一个可用的 NFS 客户端,用户是 gx,home 目录是可写的并存储到闪存中,/home/gx 也有一个可用的 bin 目录,您可以在其中找到提到的脚本。

许多不同的制造商出售相同的 OEM 盒,工厂工具允许在相同的操作固件上定义您的用户主题、图像和外观。

我正在考虑重新利用这些盒子,因为它们是一种便宜且完整的 sbc,带有 2 个 I2C 和 SPI,一个盒子只需 20 美元,虽然不如其他 sbc 选择那么强大。

唯一的方法似乎是使用 buildroot 和 Qemu 工具,并使用与盒固件相同的内核等进行设置。我正在尝试使用它为 stb 创建二进制文件,直接从你的 Linux 机器通过 NFS 运行它们。这将是一个学习曲线。假设 dvb 用户是 gx:

mkdir /home/gx/XXX

mount -t nfs -o rw,tcp,nolock 192.168.XXX.XXX:/home/hca/ /home/gx/XXX/

卸载 -f -l /home/gx/XXX

RE ELF,也许从这里开始。https://linux-audit.com/elf-binaries-on-linux-understanding-and-analysis/

binwalk 和 readelf 很有帮助。

希望这可以帮助。

首先,我现在使用的是 GX6622 版本。我有一个 GX6605s 版本,它需要 USB wifi 但尚未通电。仍在最终确定轨道布局并在显微镜下固定。但我的理解是在印度尼西亚这里销售的不同品牌的芯片版本都有 telnet。我看过电路板布局的一些变体,但似乎都具有相同的组件。

GX6622 版本有 100 多个引脚、1gb 外部 DDR、8mb SPI 闪存、RS232、2 个 USB 和 cat5 以太网。GX6605S 版本为 68 针、512mb 内部、4mb SPI 闪存和 2 个 USB。Uart 3v TTL TXD pin 26 RXD pin 27 到板子下面的焊盘(如果不在上面的话)。

还有另一个版本的 GX????,我怀疑使用 16mb SPI 闪存的后一个 cpu 版本。

您的固件映像的大小将确认您拥有的 GX 芯片。由于闪存是 8 针 SOIC SPI 外部,因此可以交换到 16mbyte 闪存并修改代码以使用它。此外,您可以重新刷新闪存 IC,因此您不能将盒子变砖。

我按照 telnet 的默认设置在端口 23 上通过 ip 使用 putty。可能你的固件不一样?我找不到你提到的那些端口在这里打开,只有 23 个。

这里的固件没有ssh,我想知道你开放的端口是做什么用的。序列号是 115200,在我的盒子里,它输出了大约 10 个字符,然后似乎在等待上传程序中的某些内容。

我花了好几个星期用中文和其他语言搜索这个项目,并积累了一些信息。问题是,虽然 Csky C610 处理器记录在 github 上,并且他们的站点非常活跃,支持较新的 Csky cpu,但没有发布由另一家公司生产的其余 Soc 数据。没有 IO 数据表就很难。在他们的 Github 上的 Csky 开发板原理图中有一个有用的引脚排列 Gx 6605s。因此,对代码进行逆向工程以使用 IO 似乎是不可避免的。幸运的是,IO 在模块中是分开的,而不是在主应用程序中。

我发现的一些配置和测试工具表明主应用程序可以与大量 io 设备一起使用,因此希望主 dvb ap 代码具有可能的调谐器和解调代码选项,其中某处将有“数据” " 使用哪个块定义,因为它们可以在闪存中使用配置软件工具进行配置。

这是我拥有的 IO 内核模块的列表,您可能已经找到了,以及我认为它们的作用。

在 /lib/modules/2.6.27.55 av.ko 是视频输出

fe.ko是前端的I2C,可能是Soc中的GX3211 demod和屏蔽下的RDA5815M调谐器芯片。

gpio.ko - 仍在调查连接。

panel.ko 是用于定制芯片的 I2C,我有一份数据表,可驱动多达 4 个 LED、4 个按钮和 7 个 seg 显示器。

rt5370sta.ko 是wifi。

所以我收集了很多这些芯片的固件工具、代码和片段,还有一些 GX 系列设备的数据表。不久我将开始上传它并链接到 github 作为 linux 项目,首先我想把它做成一个 DVB-S2 气象卫星接收器,但在 Soc 中还没有关于 GX3211 解调器的数据。

似乎 I2C 和 Spi Flash 是通过标准的 linux 方法(如 ioctl 和 mtb、闪存工具等)使用的。

一旦我验证了 GX6605s 板的引脚排列和原理图,我将整理并开始上传我整理的所有信息和我所做的工作,并作为我的 github 上的 RE 项目。这也需要一些时间。 https://github.com/vk-hca

顺便说一句,您希望在 STB 上实施什么技巧?

过去几天我一直在摆弄 gx6605s 处理器的 dvb s2 接收器的固件文件。我的初步目的是读取给定固件的隐藏菜单密码。(用于隐藏-取消隐藏菜单的密码) Dump.bin 提取给出了 7 个其他 bin 文件 boot.bin,data.bin,info.bin,kernel.bin,logo。 bin,root.bin,table.bin..

Kernel.bin 是 lzma 压缩的,所以我使用十六进制编辑器删除了 lzma 标头来搜索菜单密码,但找不到它可能是由于外行的方法。我还使用 binwalk 和各种命令来进一步提取片段,但现在不知道下一步要做什么。我请求小组成员帮助我并指导我选择合适的方法。谢谢..

固件链接在https://drive.google.com/file/d/1c2SyGaHu5I9P1jRCWKQomAYNQBYbgmg4/view?usp=sharing下方共享