mnaberez/m740dasm
GitHub: mnaberez/m740dasm
一款针对三菱 740 系列 8 位微控制器固件的 Python 反汇编器,支持代码与数据自动分离及完全可逆的重汇编。
Stars: 6 | Forks: 5
# m740dasm
## 概述
m740dasm 是一个用于三菱 740 二进制文件的反汇编器,可生成与 [as740](http://shop-pdp.net/ashtml/as740.htm) 汇编器兼容的输出。它可用于反汇编许多 8 位三菱微控制器的固件。16 位和 32 位的三菱微控制器使用不同的指令集,因此不受支持。
开发 m740dasm 是为了反汇编由 TechniSat 制造的 [Volkswagen Gamma V](https://github.com/mnaberez/vwradio) 和 [Volkswagen Rhapsody](https://github.com/mnaberez/vwradio) 汽车收音机的固件。这两款收音机都使用了 [M38869FFAHP](http://6502.org/documents/datasheets/mitsubishi/renesas_3886_group_users_manual.pdf) 微控制器。
## 功能
- 完全一致的重汇编。使用 as740,m740dasm 输出的汇编语言代码可以被汇编成与原始二进制文件逐位完全相同的副本。这已经通过多个真实的固件二进制文件和模糊测试进行了验证。
- 代码/数据分离。从内存顶部的 vector 开始,m740dasm 使用递归遍历反汇编来将代码与数据分离开来。这自动化了大部分反汇编过程,但间接跳转仍需手动解决。
- 符号生成。m740dasm 尽可能避免在输出中写入硬编码地址。它会自动为硬件寄存器和 vector、其他已使用的内存位置添加符号,并为分支和子程序添加标签。
## 安装
m740dasm 使用 Python 编写,需要 Python 3.8 或更高版本。您可以从该 git 仓库下载包,然后使用以下命令将其安装到虚拟环境中:
```
$ git clone https://github.com/mnaberez/m740dasm.git
$ cd m740dasm
$ python3 -m venv ./venv
$ ./venv/bin/pip3 install --editable '.[test]'
```
运行上述命令后,您可以使用 `./venv/bin/m740dasm` 运行反汇编器
或使用 `./venv/bin/pytest` 运行其单元测试。
## 用法
m740dasm 接受纯二进制文件作为输入。该文件被假定为一个应与内存顶部对齐的 ROM 镜像。例如,如果给定一个 32K 的文件,m740dasm 将假定该镜像应位于 0x8000-0xFFFF。加载镜像后,反汇编器会读取内存顶部的 vector 并从那里开始追踪指令。
```
$ ./venv/bin/m740dasm input.bin > output.asm
```
默认的 MCU 类型是 `M3886` 系列。可以使用 `-m` 选项指定其他类型,例如 `-m M37450`。假设该包已如上所示使用 `--editable` 安装,您可以通过编辑 `devices.py` 来添加对新设备的支持。
大多数二进制文件会包含一些计算跳转,m740dasm 无法自行解决。您可以通过将包含代码的地址添加到 `command.py` 中的 [`entry_points`](https://github.com/mnaberez/m740dasm/blob/9dd273a5230fcc265188e145cbda54c8db8afb29/m740dasm/command.py#L51-L52) 列表来告知反汇编器。
反汇编完成后,可以使用 [as740](http://shop-pdp.net/ashtml/as740.htm) 将输出文件重新汇编为完全相同的二进制文件。本仓库中包含一个示例 [`Makefile`](https://github.com/mnaberez/m740dasm/blob/bbf8d3f541e28c48cb05fe2fa6acc8fd8e1304fa/m740dasm/tests/end_to_end/Makefile),其中展示了所需的 as740 命令。
## 相关项目
Keith Monahan 的 [m740recon](https://github.com/keithgh1/m740recon) 是 m740dasm 的一个友好分支,它添加了许多新功能,例如更多的设备定义、配置文件、数据流分析和调用图绘制。
## 作者
[Mike Naberezny](https://github.com/mnaberez)
标签:Python, 云资产清单, 反汇编器, 固件分析, 嵌入式系统, 无后门, 逆向工具, 逆向工程