我有几十年前由一个古老的16位DOS应用程序编写的一些关键数据。没有文档,没有来源,也没有关于作者的信息。只是16位exe。我想是时候该学习如何反编译内容了,因为这似乎是还原文件格式的唯一方法。我已经尝试过OllyDbg,它看起来确实很棒,但是它不能16位。
是否存在能够使用此类可执行文件的反汇编程序/调试器?

我知道DOSbox,该应用程序可以在其中运行。问题是,我不需要运行它,我需要了解它写入数据的文件格式。您是否认为在DOSbox中启动一些旧的16位DOS调试器/反编译器听起来像一个主意?如果是,请给一个合适的DOS调试器命名吗?

谢谢。在问。如果违反规定,请删除它。

评论

您可以共享一个或最好是多个数据文件吗?反编译整个可执行文件需要大量工作。如果您大致了解要查找的内容(魔术值,常量,数据结构等),则可以仅专注于相关部分,而无需拆解一些庞大的例程,而该例程原来仅计算对话框的宽度。

听起来好像您是在低估这项任务,因此,我的评论是:根据书面数据的复杂性(主要是文本与大量混合二进制数据)以及文件格式反转的预期精度,为实现目标而进行的预期投资可能会轻易超过一个月的辛苦工作。

我建议使用Turbo Debugger作为@Ange的答案。因为TD的UI与您喜欢的OllyDbg相似。下载链接:phatcode.net/downloads.php?id=280

#1 楼

2个强大的拆装商,让您迷失了时间。特别适用于DOS和16位程序。他们是当时的IDA PRO ...


WCB(非常罕见,难得。永远不会错过例程的开始。永远不会)
SOURCERER(如果找到它。专业人士想要反汇编任何文件时要使用的反汇编程序。工业实力,更多选项,您可以投入使用,非常有用。请不要忘记下载INTERRUPT LIST解释和COLLECT INTERRUPT末尾)。

IDA很好。在这两个方面还不够好。

我个人的选择--- SOURCERER。

SYMDEB.EXE,来自Microsoft FOR DOS的符号调试器。 Turbodebugger ---没那么多。

希望有所帮助。

匿名。

评论


您确定不是V Communications的Sourcer吗?我没有提及它,因为它无法像IDA那样记录和操作它们。

–天使
13年11月23日在10:34

看起来WCB代表“ Windows CodeBack”。它的自述文件指出:“当前版本不包括对常规DOS .EXE文件的支持”。

– ScumCoder
13年11月23日在14:07

好吧,大多数DOS工具都不再出售;)

–天使
13年11月29日在8:23

看来您想针对WCB搜寻「wcb105a.zip」。实际上是惊人地可发现的。如果1.05不是最新版本,不胜感激。

– i336_
17年9月17日在10:50

确实有可能找到wcb。对于我特定的旧dos .exe,它说我需要dll文件,而我没有。

– Dorien
18年4月24日在4:33

#2 楼


对于16b DOS afaik,没有合适的反编译器。
Dosbox具有集成的调试器,否则请尝试TurboDebugger-并同时在IDA中打开文件以随时进行记录。还要查看有关这种情况的最新博客文章。


评论


当然是:github.com/wjp/idados

– 0xC0000022L♦
13年11月28日在21:54

#3 楼

我知道这个问题很旧,但可供将来参考。您可以下载DOSBOX调试版本。它将为您提供一个不错的调试窗口,您可以在其中调试汇编代码。只需运行debug.exe program.exe并在应用程序运行时按alt + pause。您需要了解汇编程序才能理解输出,但是通过程序代码查看它是一个非常强大的实用程序。

评论


我已经做到了,但是无论哪种方式都感谢您的回答。 (此外,恕我直言,没有“老问题”之类的东西-即使OP已经解决了他的问题并且不需要您的回答,它也可能会帮助其他偶然发现该问题的人通过网络搜索)。

– ScumCoder
17年2月18日在19:46

#4 楼

如果您不关心动态分析,则应尝试使用radare2(一种免费软件),它可以(除其他外)很好地分解16bit DOS二进制文件。

评论


不过,拆卸是倒车的最低要求。

–天使
13年11月29日在10:49



#5 楼

我想到了两个有用的DOS调试器:


SoftIce
DeGlucker。

SoftIce是商业产品,DeGlucker是免费软件。

编辑:Gametools(G3X)也是用于DOS的非常有用的TSR调试器。 Gametools中最好的功能是它的内存扫描器,它可以扫描内存中的确切值,比以前更大的值和比以前更少的值。然后,您可以在匹配的内存地址上设置硬件内存断点(当您剩下的内存地址足够少时,通常在几轮之后),这样您就可以找到访问这些内存地址的基本例程。如果必须对DOS应用程序进行反向工程,那么我肯定会从Gametools开始。

#6 楼

Ghidra(免费)能够分解x86 16位应用程序,甚至可以将它们反编译为C(这是IDA不能做到的)。

评论


有关使Ghidra正确反编译DOS API调用的任何提示?我喜欢Ghidra,但默认情况下会反编译MOV AH,0x30; INT 0x21到pcVar8 =(code *)swi(0x21);我宁愿将其反编译为更易于阅读的内容,例如dosAPICall(0x30),也不要删除0x21。

– RedDragonWebDesign
9月8日9:37

#7 楼

我的回答有点晚了。这个网站的新手。为了反编译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。

#8 楼

Reko Decompiler会定期更新,并且适用于16位DOS可执行文件。

它可以从反汇编中生成C代码。

它是用C#/。NET编写的,因此如果要在linux或macOS上运行它,则需要mono。