逆向工程(非常)旧的DOS计算程序

逆向工程
2021-07-07 10:17:33

我最近加入了一家专门从事空气管道和通风系统的公司,当我注意到他们仍在使用 DOS 程序来计算特定管道系统的压力损失时,我感到非常惊讶。你看,当空气穿过管道系统时,它会遇到很大的阻力(弯曲,……),一旦你进入系统的所有不同组件,这个程序就会计算阻力的大小。

该程序今天仍然有效,但必须在运行 Windows XP 的虚拟服务器上运行,而且布局相当......过时。我想知道是否可以对该程序进行逆向工程并将其放入“现代”夹克中,+启用简单的数据指令。

例如,今天您必须手动输入系统中的每个组件,但在组件列表(从我们的绘图软件中提取)上运行程序会更容易/更快。(这是额外的)

我不是程序员,但我看到了这个线程,这是一个非常相似的问题,最终找到了解决方案。

该程序可追溯到 1990 年,如果我在记事本中打开文件,我可以看到它是用 TURBO BASIC 编写的。我有 .DAT 和 .EXE 文件,还有 .KAN 文件(我认为最后那些文件是由程序专门创建的,称为 LUWKAN)。这个程序的开发在几年前就停止了,甚至公司也没有这个软件了。

任何帮助或指导将不胜感激?我认为源代码可以很容易地检查和复制,但我可能太天真了。

3个回答

我想知道是否可以对该程序进行逆向工程并将其放入“现代”夹克中,+启用简单的数据指令。

是的,这是可能的,但不适用于非程序员为此,应该检查计算的执行方式和使用的确切公式。然后,在获得了这样的知识之后,就可以编写一个应用程序,结合原始程序中使用的技术,为现代处理器工作。

我认为源代码可以很容易地检查和复制,但我可能太天真了。

它应该很容易检查,特别是如果应用程序不是很复杂(我认为这是真的,因为它是一个旧DOS应用程序)。但是,这里有几个细微差别:

  1. 您从可执行文件中获得的不是应用程序的源代码它是从用人类可读的高级编程语言编写的源代码到所谓的机器代码的翻译,这是一种计算机可以理解的语言,其中包含的指令由CPU.
  2. 它必须被重写,即你不能只是复制代码。其背后的原因之一是自该软件发布以来,操作系统和程序之间的交互方式发生了变化。
  3. 即使您拥有此应用程序的源代码,它也无济于事,应该以任何一种方式重写(查看上面的点)以与现代操作系统兼容。

但我认为,分析和重写它(+ 添加一些其他功能)不会是一个大问题,尤其是如果在那里执行的计算不太复杂。我不能说更多,因为你没有上传可执行文件。

然而,可以说的是,非程序员不会那样做;你需要一些帮助,因为它需要编程和 RE 知识,但它似乎是可行的。

我可以推荐并用于逆向DOS程序的工具是:

  • 用于动态分析的DOSBox 调试器(在运行时观察程序行为)
  • 用于静态分析的IDA(在不运行程序的情况下分析程序)。

但正如我上面所说,要利用它们,您需要一些帮助。

  1. 文件扩展名通常没有帮助 - 没有真正的标准,有 1000 个 .DAT 和 .KAN 文件,绝对没有关系,只有文件的内容可以给我们任何提示

  2. 可执行文件通常不包含源代码(或源代码之类的东西),只有足够 CPU 可以使用它的信息,几乎不是人类可读的 - 除了裂缝:)

  3. 是一个小的命令行工具还是一个完整的图形应用程序?

  4. 你能把软件上传到某个地方吗 ( http://www.tinyupload.com/ ) - 这样我们就能够分析或了解软件的工作方式 - 或目录列表(屏幕截图或文本文件)以获取文件大小、扩展名等等。

  5. 软件是否在Dosbox下运行(下载地址:https ://www.dosbox.com/ )摆脱VM/Win95依赖,感受一下软件的复杂程度(加密狗、硬件依赖等)->你也可以尝试:https : //github.com/dmsc/emu2如果程序真的很简单,只有 cmd 并且如果 linux 是一个选项,但之前尝试 DosBox

  6. 如果程序的大小不是很大,它是非常可行的

  7. 任何形式的视频或显示软件如何填充数据、计算等的内容都会有所帮助(https://www.screentogif.com/

  8. 为什么你认为这个exe是基于Turbo Basic的?den Exe 中的信息字符串?尝试在 IDA 免费软件 5 ( https://www.scummvm.org/news/20180331/?lang=en ) 中打开 exe - 只有第 5 版免费软件能够打开 DOS 可执行文件 - 当前第 7 版免费软件无处可去 - > 获取有关可执行文件的更多详细信息

  9. 始终备份您的完整安装,记事本中的单个保存文件可以杀死您的 exe 或数据文件 - 最好使用这个小巧的免费软件十六进制编辑器:https ://mh-nexus.de/en/hxd/

我以前做过几个从小到大的逆向工程项目——所以我知道我在说什么:)

!!!给出 9 个问题/陈述 => 需要 9 个答案/反馈!!!

听起来还是可以和公司沟通的。优秀:询问他们的意见

  • 对程序进行逆向工程,明确促进业务运营的继续

  • 在互联网上公开传播程序的二进制副本,修改或未修改,也用于逆向工程的明确目的,以促进操作的继续

  • 如果不同意公开传播,私下与其他人共享二进制文件,而不需要潜在接收者签署 NDA

  • 允许执行逆向工程的同一团队也直接重新实现所需的功能,而无需在中间设置洁净室(参考:https : //en.wikipedia.org/wiki/Clean_room_design

  • (您可以自己回答这个问题)分享obs-studio与程序交互的许多屏幕截图和/或视频(来自相机,或来自屏幕录制软件)

  • (如果您有任何.bas文件)私下或公开分享任何可能构成程序源代码的内容

本质上,您是在要求稍微重新安排您的原始许可协议:)。我认为这有点像保修:您的软件完全超出了维护的所有原始定义,以及可能被当代视为合理的售后维护。供应商的观点在这里可能会有所不同。

为了合作,您可以提议将您从您所做的任何逆向工程工作中恢复的任何算法发送给供应商。(发送的内容可能包括也可能不包括您在顶部添加的任何现代化/接口,因为这是您独立做出的独特努力。)当然,如果供应商不提供现代替代品,这种报价只会对供应商有价值给 LUKWAN 自己。

无论如何,一旦你有了一些明确的答案,你就会有一个具体的法律基础来建立,而不是你现在所处的灰色海洋。

如果您可以在互联网上公开转储二进制文件,那将大大简化问题;去寻找一些逆向工程论坛,分享该程序,您可能会在几天内收到极其准确的报价(和 ETA)。您最终可能会雇用两个左右的团队。

如果您可以在没有 NDA 的情况下私​​下共享该程序,则可以达到 90% 以上的良好情况,尤其是如果您可以共享该程序的图像/视频。报价过程只需要感兴趣的各方先 ping 您,并且由于初始分析不会是异步的,所以速度会稍微慢一些。

我不确定你会看到什么样的费率,因为我自己没有这方面的经验。视频和描述可能会得到一个很好的粗略初步估计。


我查看了https://en.wikipedia.org/wiki/PowerBASIC,这就是 Turbo BASIC 变成的样子。

对您来说不幸的是,这个特定环境的主要功能之一(当它还是 Turbo BASIC 时)是它构建了不需要捆绑运行时的本机二进制文件。

这通常意味着您将不得不走完全汇编语言逆向工程的“硬模式”之路……但另一方面,虽然有大量工具可以例如逆向“编译” “ Java 或混淆的 JavaScript,到目前为止(2019 年),任何可以逆转例如 QuickBASIC“编译程序”格式(使用字节码和运行时解释器)的工具都可能已经从地球边缘掉下来,或者隐藏在巨大的价格标签。所以这是一件好事,FWIW。

当您寻找 RE 帮助时,清楚地注意到该程序是用 Turbo BASIC 编写的,这将特别有用。可能有些人对 TB 编译器的特性非常有经验。


我想知道是否可以对该程序进行逆向工程并将其放入“现代”夹克中,+启用简单的数据指令。

是的。我可以想到两种不同的方法。两者都很复杂,如果不仔细观察具体情况,很难说哪个更容易解决。

  1. 可能被描述为“传统”的 RE 方法是通过静态(IDA Pro、Ghidra、radare2)和动态(CodeView、Turbo Debugger、SoftICE)分析等技术将程序分解为位,并尝试梳理数学从程序的其余部分中删除,可以在其他地方直接重新实现。

    这里的主要风险是该过程是否没有捕捉到重要的算法细节或边缘情况处理。这是我要加粗的唯一一点:您可以通过提供数十到数百个测试来帮助此过程。(现在开始考虑这个过程——比如说,对程序处理的每种特定情况进行 10 次左右的测试应该是一个好的开始。)

    如果程序很简单,并且完成计算的区域很容易识别(不戳二进制就不可能说),这应该会在一定程度上降低风险。

     

  2. 一种非常接近于制作“夹克”概念的字面翻译的技术会让您将程序包装在已修改为“导出”屏幕状态并接受合成键盘输入的模拟器(例如 DOSBox)中- 然后在顶部添加一个翻译层,可以快速输入数据并在屏幕上抓取结果。

    这种方法的主要风险是程序可以显示的屏幕数量,以及所涉及的复杂性(是否需要滚动以获取所有数据?根据屏幕上显示的指示,下一步要执行的操作是否明确?)信息。


[...] 在组件列表(从我们的绘图软件中提取)上运行程序会更容易/更快。(这是额外的)

这个组件列表是以什么格式生成的?

这可能是从琐碎到稍微复杂的任何事情。添加此功能的成本将大大低于最初的可再生能源工作。


我很想知道这个项目进展如何!如果你把这个问题带到其他论坛,如果你能把链接放在相关线程上,那将是非常酷的。:)