我找到了我很喜欢的DOS免费游戏的二进制副本(Firefighter,可从FIRE.COM下载),但源代码不可用。我想使用Unix curses在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一起使用一样,两者似乎都能产生合理的汇编清单。

理想情况下,我正在寻找反编译并将其渲染为C的东西。 -if-it-we-re-汇编程序风格,在DOS陷阱上生成了变量名和有用的注释。我知道这种野兽可能不存在,但是有机会我正在寻求建议。

评论

欢迎来到RE!您是否已搜索并查看了网站上的现有问题?

在“通常用于逆向工程硬件或软件的工具”下的范围如何?

您是否浏览了现有问题?您是否尝试过已经提供的任何解决方案?现有问题在哪里/为什么失败?这个问题表明以前没有任何研究。

我已经更新了问题;可以取消保留状态吗?

也许您可以在这里获得一些提示program-transformation.org/Transform/MachineCodeDecompilers

#1 楼

IDA Pro和许多其他反汇编程序将对您的文件进行反汇编,前提是该文件未压缩或混淆。但这只是生成可工作的汇编语言程序的第一步,如果要将其翻译成更高的语言,则需要此步骤。

本质上,您正在研究两个项目。首先是产生您游戏的汇编语言版本。第二个是将游戏机制和逻辑转换为C ++或其他形式。第一个比第二个容易。

#2 楼

我的回答有点晚了。这个网站的新手。为了反编译MS-DOS EXE和COM二进制文件,启动了Decompiler项目。该项目同时具有命令行和GUI工具:

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

在命令行中使用以下命令用于反编译COM程序的工具:

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


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

#3 楼

不存在可对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
->  


#4 楼

当我查看您的应用程序(Fire.COM)时,我认为您应该使用某些DOS调试器(例如Turbo Debugger 5.0)来调试和反转该应用程序,因为其中包含加密阶段。如果您想将这些应用程序“反编译”为C代码,这非常困难,我在过去(2008年)曾尝试过一些工具,但没有一个好的工具可以做到这一点。我也有一个C源代码,但是其中有很多内联汇编。

#5 楼

我最近发现了一个DOS程序,它将.COM和.EXE转换为简单的“伪代码”。
该程序是--- exe2c.zip

http://www.codeforge .com / dlpre / 201558 / cb2e19437871.zip __。html

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

-William Gallant