Plaza 新闻汇总

通过MIDI控制合成器播放视频:逆向工程Yamaha PSR-E433

本文记录了作者对Yamaha PSR-E433合成器进行逆向工程的经历,最终实现了通过MIDI消息控制合成器并在其LCD屏幕上播放Bad Apple动画。

**项目背景:**

作者长期拥有Yamaha PSR-E433合成器,出于好奇和清洁目的,拆解了设备并发现了主芯片YAMAHA SWL01U。通过查找资料,作者得知该芯片基于SuperH CPU核心,并具有UART、JTAG等接口。

**逆向工程阶段:**

作者尝试了多种方法访问芯片,包括测试引脚、UART接口和JTAG接口。最终,通过JTAG接口和OpenOCD工具,确认了芯片基于ARM7TDMI核心,并成功读取了芯片的IDCODE。

作者利用GDB工具,成功读取了芯片的Flash存储器,并使用Ghidra工具对固件进行逆向分析。

通过分析,作者发现了固件中存在一个通过MIDI SysEx消息进行交互的Shell。

**Shellcode编写:**

作者发现Shell提供了内存读写功能,并通过编写Shellcode,利用栈溢出技术,实现了在RAM中执行自定义代码的功能。作者编写了一个简单的汇编代码,实现了在LCD上显示“HeloWrld”的功能,并通过MIDI消息将代码注入到合成器内存中并执行,成功验证了Shellcode的有效性。

**图形显示与Bad Apple动画:**

为了在LCD上显示图形,作者分析了LCD控制器ML9040A的特性,并发现CGRAM可以用于定义自定义字符。通过编写Shellcode,作者实现了在CGRAM中写入自定义数据,并在LCD上显示简单的图形,例如棋盘格。

为了播放视频,作者需要抑制固件中不断更新CGRAM的机制。通过分析固件的任务调度系统,作者将任务表复制到RAM中,并修改了任务调度信息,最终实现了禁用CGRAM更新的功能。

作者优化了数据传输方式,显著提高了传输效率,并解决了一系列图像显示问题,最终实现了在LCD上播放Bad Apple动画。

**项目总结:**

本文介绍了通过MIDI控制合成器,并在LCD屏幕上显示图形和动画的过程。作者克服了数据传输效率低等挑战,最终成功实现了世界首个MIDI Shellcode。

文章最后,作者列出了项目相关的链接,包括GitHub项目地址、MIDI规范、USB-MIDI规范等。

原文地址
2025-01-06 06:00:47