我最近加入了一家专门从事风道和通风系统的公司,当我发现他们仍然使用DOS程序来计算特定风道系统的压力损失时,我感到非常惊讶。您会看到,当空气穿过管道系统时,会遇到很大的阻力(弯曲……),一旦您输入系统的所有不同组件,此程序便会计算出阻力的大小。该程序今天仍然可以使用,但是必须在运行Windows XP的虚拟服务器上运行,而且布局还很过时。我想知道是否可以对这个程序进行逆向工程,并放入“现代”外套中,从而实现简单的数据指令。

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

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

该程序可以追溯到1990年,如果我在记事本中打开文件,可以看到它是用TURBO BASIC编写的。我有.DAT和.EXE文件,还有.KAN文件(我认为这些最后一个文件是由该程序专门创建的,称为LUWKAN)。该程序的开发在几年前就已停止,甚至连该公司都不再使用该软件。我认为可以轻松地检查和复制源代码,但我可能太幼稚了。

评论

您已经熟悉哪些工具? DOSBox进行了一些修改(更不用说您可以自己对其进行修改)以调试DOS程序。另外,过去有一个相当不错的IDA插件与(启用了调试功能的)DOSBox接口。通常,任何环境信息都可以在对目标进行RCE时很有价值。同样,在DOS时代,人们使用了很多技巧来应对资源的限制。因此,也许值得一本书,例如“ Programming Pearls”并阅读这些技巧。

#1 楼


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


是的,有可能,但是对于非程序员来说是不可能的。为此,应该检查如何执行计算以及使用精确的公式。然后,获得了这些知识之后,就可以编写一个应用程序,该程序结合了原始程序中使用的技术,为现代处理器工作。复制,但我可能太天真了。


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


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

但是我认为分析和重写它(并添加一些其他功能)并不是一个大问题。特别是如果执行的计算不太复杂。我不能多说了,因为您没有上传可执行文件。

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

我可以推荐的和我用来反转DOS程序的工具是:用于动态分析(在运行时观察程序行为)的DOSBox调试器。 />用于静态分析的IDA(不在运行程序时分析程序)。

但是如上所述,要利用它们,您将需要一些帮助。

#2 楼


文件扩展名通常无济于事-没有真正的标准,周围有1000个.DAT和.KAN文件,它们之间绝对没有关系
仅文件的内容可以给我们任何提示
可执行文件通常不包含源(或类似源的东西),仅包含cpu可以使用的足够信息,几乎不可读-除裂缝外:)
是一个小的命令行工具或完整的图形化应用程序?
您可以将软件上载到某个位置(http://www.tinyupload.com/)-这样我们就可以分析或了解软件的工作方式-或目录列表(屏幕快照或文本文件)以获取文件大小,扩展名等。
该软件是否在Dosbox下运行(在此处下载:https://www.dosbox.com/)
以摆脱VM / Win95依赖性并感受一下软件ist的复杂程度(软件狗,硬件依赖等)。
->您也可以尝试:https://github.com/dmsc/emu2如果程序真的很简单,cmd仅d,如果可以选择使用linux,但是如果程序的大小不是很大,请尝试使用DosBox。
任何形式的视频或可以显示软件如何用数据填充的内容,等会有所帮助(https://www.screentogif.com/)
为什么您认为该exe基于Turbo Basic? den Exe中的信息字符串?
尝试在IDA免费软件5(https://www.scummvm.org/news/20180331/?lang=zh-CN)中打开exe-仅版本5免费软件能够打开DOS。可执行文件-当前版本7免费软件无处可寻
->让我们获得有关可执行文件的更多详细信息
始终备份完整的安装,记事本中的单个保存文件可以杀死您的exe或数据文件-最好使用这个小巧的免费软件十六进制编辑器:https://mh-nexus.de/en/hxd/

我以前做过几个小型到大型的反向工程项目-所以我知道我在说什么关于:)

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

评论


嗨,欢迎来到RE.SE。尽管这些问题是合法的,但将它们发布为答案确实不合适。但是,看到您到目前为止还没有声誉,我可以看到您所遇到的难题。对于原始询问者,将这些问题合并到OP中并内联地回答将是一件好事。

– 0xC0000022L♦
19年7月3日在10:57

谢谢您下次提供的信息会更好,...他自提问以来没有任何回复,也许他未以非注册用户的身份得到更新:(

–llm
19年7月3日在12:08



#3 楼

听起来仍然可以与公司进行沟通。优秀:询问他们对程序的反向意见


对程序进行逆向工程,明确地促进业务的持续进行
在Internet上公开分发程序的二进制副本,进行修改或未经修改,也出于逆向工程的明确目的,以促进操作的继续进行
如果不能公开传播,则与他人私下共享该二进制文件,而无需潜在接收者签名的NDA
进行逆向工程的团队也可以直接重新实现所需的功能,而无需在中间放置无尘室(ref:https://en.wikipedia.org/wiki/Clean_room_design)
(您可以自己回答这个问题)共享许多屏幕快照和/或视频(来自相机或来自obs-studio屏幕录像软件),以了解与程序的交互情况
(如果有.bas文件),并共享可能出现的任何内容骗局私下或公开地发布程序源代码

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

出于合作的利益,您可以提出向供应商发送从您进行的任何逆向工程工作中恢复的任何算法。 (发送的内容可能包括也可能不包括您添加的任何现代化/接口,因为这是您独立进行的独特工作。)当然,只有供应商不提供现代化的上级产品,这样的报价才有价值自己去陆湾。

无论如何,一旦您有明确的答案,您将有一个具体的法律基础可以建立,而不是当前的灰色局面。

如果您可以公开弃置互联网上的二进制文件,这将大大简化事情;转到一些逆向工程论坛,共享该程序,您可能会在几天之内收到极其准确的报价(和ETA)。您可能最终雇用了大约两个人的团队。该程序的视频。报价过程只需要有兴趣的人先对您执行ping操作,并且由于初始分析不会是异步的,因此执行速度会有所降低。

我不确定您要查找哪种费率因为,我本人对此领域没有经验。视频和描述可能会得到不错的初步估计。

对您来说不幸的是,此特定环境的标题功能之一(当时仍是Turbo BASIC时)是它构建了不需要捆绑运行时的本机二进制文件。 />这通常意味着您将不得不走完整的汇编语言反向工程的“困难模式”之路...但是在硬币的反面,而例如有大量工具可以反向到现在(2019年),“编译的” Java或模糊的JavaScript可能会逆转任何工具,例如QuickBASIC的“编译的程序”格式(使用字节码和运行时解释器),或者已经掉到了地上或躲在后面巨大的价格标签。 FWIW真是太好了。

显然,当您寻求RE帮助时,请注意该程序是用Turbo BASIC编写的,将特别有用。可能有人在那里对TB编译器的特性非常有经验。现代”夹克,+便于进行数据指示。


是的。我可以想到两种不同的方法。两者都很复杂,很难说出哪一种方法更容易解决,而又不会因具体情况而引起人们的注意。



可以称为“传统” RE方法将通过诸如静态(IDA Pro,Ghidra,radare2)和动态(CodeView,Turbo Debugger,SoftICE)分析之类的技术将程序带到位,并尝试从程序的其余部分中挑出数学信息。可以直接在其他地方重新实现。

这里的主要风险是该过程是否捕获重要的算法细节或边缘案例处理。这是我要大胆声明的唯一一点:您可以通过提供数十到数百个测试来帮助完成此过程。 (现在就开始考虑这个过程-例如,程序要处理的每种特定情况的10个左右的测试应该是一个好的开始。)

如果程序简单明了并且要进行计算的领域易于识别(在不戳二进制的情况下就不可能说),这应该可以在某种程度上减轻风险。




这种技术非常严格地遵循了您制作“外套”的想法是将程序包装在模拟器(例如DOSBox)中,该模拟器已被修改为“导出”屏幕状态并接受合成的键盘输入-然后在上面添加翻译层快速键入数据并在屏幕上刮取结果。

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




[...]在组件列表上运行程序会容易得多/更快(摘自我们的工程图)软件)。 (这是额外的)


此生成的组件列表的格式是什么?

这可能是琐碎的到复杂的事情。添加此功能的成本将大大低于最初的RE投入。如果您将这个问题带到其他论坛,则可以将链接发送到相关主题,这将非常酷。 :)