DOS .COM 文件的反编译技术

逆向工程 工具 反编译 反编译器 DOS-COM
2021-07-01 03:47:42

我找到了一个我当时喜欢的 DOS 免费软件游戏的二进制副本(消防员,可下载为FIRE.COM),但源代码不可用。我想使用 Unix 诅咒在 C 或 Python 中重新实现它,虽然我完全有能力完成这部分工作,但我对逆向工程和反编译 DOS .COM 文件二进制文件的工具几乎一无所知。

根据说明 .COM 是无头原始机器代码的文档,我尝试objdump -D -b binary -m i386在其上运行结果看起来无效。objdump -D -b binary -m i8086 –adjust-vma=0×100似乎可以像使用 NASM 一样解决问题,ndisasm -b 16 -a -o 0×100并且这两种方法似乎都可以生成合理的程序集列表。

不过,理想情况下,我正在寻找以as-if-it-were-assembler风格反编译并呈现为 C 的东西,并在 DOS 陷阱上生成变量名称和有用的注释。我知道这样的野兽可能不存在,但我正在寻求建议。

4个回答

我的回答有点晚了;本网站的新人。启动反编译器项目是为了反编译 MS-DOS EXE 和 COM 二进制文件。该项目既有命令行又有 GUI 工具:

https://sourceforge.net/projects/decompiler/

使用以下命令和命令行工具来反编译 COM 程序:

decompile --default-to ms-dos-com myprog.com

在 GUI 中,使用菜单命令File>Open as...打开 COM 文件并指定起始地址,如 0800:0100。

IDA Pro 和许多其他反汇编程序将反汇编您的文件,假设它没有被压缩或以其他方式混淆。但这只是生成可工作的汇编语言程序的第一步,如果要将其翻译成高级语言,则需要这样做。

本质上,您正在查看两个项目。第一个是为您的游戏生成一个可用的汇编语言版本。第二个是将游戏机制和逻辑翻译成 C++ 或其他什么。第一个比第二个容易。

我最近发现了一个 DOS 程序,它可以将 .COM 和 .EXE 变成一个简单的“伪代码”。程序是---exe2c.zip

http://www.codeforge.com/dlpre/201558/cb2e19437871.zip__.html

不是“优秀”的工具,但我发现它很有用。首先执行 ENVMNU.EXE,然后输入 .COM 或 .EXE 文件名。---(提示?)如果需要更好的结果,请使用单个模块(例如 DOS 到 ASM 模块)并手动编辑 ASM 差异,然后将它们提供给 ASM 到 C 模块并观察结果。

——威廉·加兰特

不存在可以反编译 16 位 com 程序的野兽,
如果您更喜欢调试它从 ladsoft 寻找 grdb
也有一份 ralf browns 中断列表的副本,用于所有
int 21 / int 10 SetCursor / GetCursor 调用

还要确保将下载的 exe 重命名为 8dot3 兼容
(名称少于 8 个字符)

GRDB.EXE firefi.com    

Get Real Debugger Version 9.6  Copyright (c) 1997-2009 David Lindauer (LADSoft)
GRDB comes with ABSOLUTELY NO WARRANTY, for details type `?g'
This is free software, and you are welcome to redistribute it
under certain conditions; type `?gr' for details

DPMI Start code hooked
History enabled
eax:00000000 ebx:00000000 ecx:00007500 edx:00000000 esi:00000000 edi:00000000
ebp:00000000 esp:0000FFEE eip:00000100 flag:00000202 NV UP EI PL NZ NA PO NC
ds:1F25 es:1F25 fs:1F25 gs:1F25 ss:1F25 cs:1F25
1F25:0100 E9 25 27       jmp          2828
Size: 00007500
->