gauweiler/tt-homebrew

GitHub: gauweiler/tt-homebrew

tt-homebrew 是一个用 C 语言为 TipToi 点读笔编写自定义游戏的工具,使用户能扩展设备功能并进行深度定制。

Stars: 11 | Forks: 2

# tt-homebrew tt-homebrew 是一个用 C 语言为 TipToi 编写游戏的便捷工具,可完全访问 TipToi 的所有功能。 ## 免责声明 tt-homebrew 与 Ravensburger 没有任何关联。使用该工具可能会导致您的笔变砖,请自行承担风险。在我的所有测试中从未发生过,但您可能会调用覆盖闪存的函数,导致无法再次启动。 ## 入门指南 安装 `nodejs` 和 `gcc-arm-none-eabi`,或直接使用 `nix-shell`。 然后运行 `npm i` 安装依赖。 通过 `node build.js -h` 获取语法帮助。 使用 `node build.js -i gme/Wimmelbuch.gme -o "/run/media/$(whoami)/tiptoi/Wimmelbuch.gme" -n dump_ram -p -b 0` 可以编译您的第一个示例,该示例会在您尝试启动第一个游戏时,将 TipToi 的内存转储到其存储中。您可以通过将笔连接到电脑并在 "dump" 文件夹中找到该文件。 ## 发展路线图 如果您想参与或只是保持更新,请加入 [tt-homebrew Discord](https://discord.gg/bsRAuBnX3j) - [x] 支持 2N 和 3L - [x] 麦克风 / CREATE 支持 - [x] 自动注入二进制文件 - [ ] 创建一个主模板,使脚本工作 - [ ] 无需 tttool 创建文件(即将推出,请查看 gmelib) - [ ] 列出文件和目录 - [x] Uart - [ ] WiFi 支持 - [ ] 添加无法通过 sys_api 访问的固件偏移量函数 ## 知识 - 在 2N 和 3L 上,system_api 似乎是兼容的,但 ``fpAkOidPara`` 不同。 - 主二进制文件处理 gme 内部脚本的执行。如果主二进制表的偏移量为 0,则笔使用固件内部的主二进制文件。 - 在 4E 上从非映射内存读取(0x80 9000 < 崩溃 < 0x82 9000) | 处理器 | 1 | 2N | 3L 及之后版本 (在 4E 上测试,其他固件不同) | ------------- | ------------- | ------------- | ------------- | | 启动 ROM | 待定 | 0x0000 0000 | 0x0000 0000? | | Bios.bin | 待定 | 0x0800 0000 | 0x0080 0000 | | Prog.bin | 待定 | 0x0800 9000 | 0x0082 9000 | | Prog.bin 入口 | 待定 | 0x0800 9100 | 0x0085 ed01 末尾的 1 表示 thumb 模式 / 仅适用于 4E / 在 5E 和 6E 上不同 | | GME bins | 待定 | 0x0813 2000 | 0x0093 0000 | | GME 游戏状态 | 待定 | 0x0814 1000 | 0x0094 0000 | | 分配相关内容 | 待定 | 0x? | 0x0095 0000 | | 返回游戏 | 待定 | | 0x0082 c3c5? 看起来有误 | | 返回主界面 | 待定 | | | | malloc | 待定 | 0x08142000 | | | malloc 长度 | 待定 | 0x00098000 | | sysparam 在 0x00805E50 fpAkOidPara 在 0x00950780 filehandle 在 0x00958640 ## Ghidra 小指南 想要反编译 gme 文件中的二进制文件?这是我的步骤: - 使用 `tttool binaries` 获取二进制文件。 - 使用 `tttool export` 查看按下游戏按钮时启动了哪个游戏。 - 对于 2N 使用 `2_Game`,对于 3L (3L, 4E, 5E, 6E) 使用 `6_Game` 加上 yaml 中的数字。 - 将此文件拖放到 Ghidra 中,并选择 `v5t little endian` 作为语言。 - 点击 `Options` 并输入表格中的 `GME bins` 地址作为基地址。 - 打开文件并转到开头,按 `d`。这将反汇编第一条指令。这将是一个跳转到主函数的指令。 - 用 `f` 声明主函数并将其重命名为 `main`。 - 转到 文件 -> 解析 C 源代码 并导入 `lib/api.h`。 - 现在将主函数的第一个参数声明为此结构体。 - 点击 RAM 符号并为游戏状态添加一个内存区域。将该区域设为可读写,二进制文件设为可读可执行。 - 然后运行自动分析。 - 如果一切正确,您现在应该拥有一个包含 API 名称、正确偏移量且没有红色地址的项目。 ## 注意 二进制文件在 3L 上只能为 65kb (0xffff),在 2N 上为 61kb (0xf000)。 待办:检查是否可以更大,因为 gme 文件具有 32 位大小。
标签:ARM架构, GCC编译器, GNU通用公共许可证, MITM代理, Node.js, TipToi, UART, 二进制发布, 二进制编译, 云资产清单, 固件, 客户端加密, 嵌入式系统, 开源工具, 教育玩具, 游戏开发, 硬件编程, 自动注入, 自定义软件, 设备开发, 逆向工程, 麦克风