【问题标题】:Decompiling an old Program反编译旧程序
【发布时间】:2011-01-01 23:24:16
【问题描述】:

我被要求更新一个 1987 年用 Delphi 编写的程序(我猜)。我没有关于这个程序的文档,只有程序员做了一些没有太大意义的附注。

CD 显示这些文件:

尺寸 |文件名 19956 副总裁 142300 副总裁 第404章 126502 VP.RCS 131016 VP.SCR 150067 VP.XEL 101791 vp.exe

这些文件中的任何一个都是数据库吗?如果可以,我可以访问它的数据吗?

我尝试了几个代码反编译器,但它们显示一条消息说它不是 Win32 兼容的应用程序。 该程序在 MS-DOS 下运行。

是否可以获取源代码?我可以以任何方式使用此代码来构建新应用程序吗?

Update01:我可以在 MS-DOS 中运行该程序。该程序共轭动词并显示一个可以使用动词的例句。 GUI 有点混乱,没有帮助菜单,所以我看不到程序的所有功能。

Update02:在与程序所有者的对话中,我们找到了另一个解决方案。他问我是否可以将程序放在服务器中,并且客户端可以使用用户和密码登录并在终端中执行程序。我在我的大学服务器中有一个帐户,我可以通过 ssh 访问该帐户并在其中编译和执行 c 程序。服务器在linux中,所以我无法尝试其中的程序。如果我设置了一个 windows 服务器,我可以让多个人在一个终端中访问和执行程序吗?该程序是一个exe。这不会引发一些安全问题吗?

【问题讨论】:

  • 使用十六进制编辑器检查文件。
  • 你知道程序是做什么的吗?
  • Delphi 在 1987 年还不存在,那么是什么让您认为它是用它编写的?
  • 如果是 Clipper,它会使用 dbf 文件,即使这些文件的扩展名已重命名(例如,改名为 dta)以掩盖这一事实。逆向工程 dbf 文件很容易。尤其是仍然有很多应用程序可以读取 dbf 文件(包括 ms excel 和 ms access?)。您可以简单地尝试使用其中之一读取 dta 文件。可能必须重命名扩展名,因为当前的 Windows 版本通常考虑 dta 文件系统文件。 lex 文件也是此试验的候选对象。

标签: delphi dos decompiler


【解决方案1】:

Delphi 是九十年代中期的,所以这可能意味着 Delphi 的祖先 Turbo Pascal,而不是 Delphi。

有些扩展听起来很熟悉,就像单词的缩写形式:

  ndx = index
  dta = data
  scr = screen (?)
  lex = lexicon (list of words or deduped strings in general) (?)

屏幕有时用于例如helpscreens,一种中世纪形式的帮助文件,它们是典型的 ansi 屏幕,可以直接加载到屏幕内存中

这很有可能是手工制作的,特别是如果那个日期是 1987 年并且一般假设“pascal”是正确的,并且根本不是由某些已知的数据库包生成的。

对文件格式进行逆向工程可能比尝试对应用程序进行逆向工程更有价值。

一个好的开始是使用unix“文件”命令来查看它是否可以识别文件类型。 (file命令搜索文件里面的签名,还有windows端口,我用的是Cygwin的)

在此类问题上有经验的开发人员也可以从 hexdump(特别是文件的第一部分)中看到很多东西

【讨论】:

    【解决方案2】:

    是否可以获取源代码?

    可能不会,您可能想看看IDA Pro 之类的东西,它可以使用Hex-Rays 之类的东西将应用程序反汇编为C。

    【讨论】:

    • 不是“回”到 C,因为它既不是原始的 C,也不是原始的应用程序必须用 C 编写。
    • 好的,它可以将应用程序反汇编成C。
    • 或帕斯卡。您必须指定编写它的编译器,然后它将转换回来。见hex-rays.com/idapro/idaflirtcomp.htm。虽然 IDA 是一个很棒的工具,但是在这样做之前你需要正确地设定你的目标。 (它真的是你所追求的程序,还是只是数据?)
    • 如果我有数据,我可以构建一个新程序,但我认为其中没有数据库。我猜所有的数据都嵌入在代码中了。
    • +1 对于 Ida Pro,它是一个很棒的工具,它确实仍然可以处理 16 位可执行文件。 Hex Rays 插件可以从原始反汇编创建伪 c 代码,编译器生成程序集并不重要,但使用已知编译器并使用 flirt 库时结果通常会更好。
    【解决方案3】:

    您知道应用程序应该是什么吗?

    如果是 ms-dos,您最好还是制定新的需求并进行新的开发。

    【讨论】:

    • 如果数据量很大或很重要,将其十六进制转储并尝试导入原始数据(而不是索引)可能非常值得。
    【解决方案4】:

    寻找 DeDe 对 delphi 编译的程序进行逆向工程。但据我所知,delphi 是一个真正的编译器。所以没有办法反编译它。如果您能够阅读汇编代码,那么您可以尝试反编译它。 Clipper 和 Foxpro(dos 版本)是另一个故事,因为它们不是真正的编译器。

    【讨论】:

    • Clipper 不是真正的编译器?! FoxPro 过去不是现在也不是,但 Clipper 肯定是一个编译器。您可以在它生成的目标文件上使用任意数量的链接器,最终结果是一个独立的可执行文件(根据当时的内存限制需要有或没有覆盖)。
    • 维基百科提到 Clipper 使用 p 代码,由虚拟机执行,并且(出于营销原因)包装在目标代码中,给人的印象是它被编译为本机代码。
    【解决方案5】:

    这绝对不是德尔福。它可能是像 Clipper 1 这样的以数据库为中心的语言之一。 .SCR 可能意味着“屏幕”并定义 I/O 掩码。 .NDX 是表索引,.DTA 表示“数据”。

    如果是clipper,你可能真的很幸运,因为据我记得这些程序是P代码,所以可以反编译它。

    【讨论】:

      【解决方案6】:

      它看起来像 CLipper(NDX 和 SCR)。如果你有一个 DBF 文件,那么它肯定是 Clipper。但是有些人将 DBF 重命名为 DAT 之类的东西。如果是 Clipper,相信有一个反编译器叫 Valkyrie。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-31
        • 1970-01-01
        • 1970-01-01
        • 2013-01-20
        • 1970-01-01
        • 2011-03-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多