反编译一个16位的DOS应用程序

5

我有一个非常古老的应用程序,大约15年前购买,由5个.exe文件组成,用于存储患者的档案和信息。问题在于,这个应用程序是编程为在特定计算机上运行的。
由于我对破解知之甚少,我试图使用win32dasm将其反汇编,但没有关于字符串引用的信息,尝试使用Hiew将JE替换为JNE,在多次尝试后,其中一个可执行文件可以工作,但我未能修补其他文件。
有没有办法找到确切的跳转并进行修补?
谢谢 ;)


那台“特定的电脑”还能用于运行这个应用程序吗?如果可以的话,您可以在这台电脑上运行该应用程序并在另一台电脑上调试它们,看看它们的行为何时出现分歧。如果不能,恐怕您的问题无法回答。 - Alexey Frunze
很遗憾,计算机在启动时显示“磁盘I/O错误”,我认为这个错误是致命的,但我有该硬盘的镜像。 - Romeo Allen
1
它可能已经安装并锁定到那台旧计算机上,使用硬件指纹。在纯DOS下运行时是否显示任何消息?如果您没有DOS,请尝试在DOSBox下运行它。 - Jay
是的,它显示了一个未授权的消息,我的目标现在是像我对第一个执行文件所做的那样破解其他执行文件。当我在hiew中按Alt-F6时,它会显示包括启动消息在内的字符串列表,但我不知道如何找到它的引用,有什么想法吗? - Romeo Allen
1个回答

0

有一个方法,总会有方法。如果你可以运行代码,你就能够修改它。

然而,如果代码被授权在特定的计算机上工作,你可能没有合法地在另一台计算机上使用它的权利。你应该做的第一件事情是弄清楚你要尝试的东西是否合法。

话虽如此,我之前用过OllyDbg来做这种工作。这不是犯罪,只是因为代码在内存较多的机器上出现了问题——结果证明它使用了有符号比较指令,而不是无符号的。

基本思路是在运行失败的机器上记录字符串输出,然后在内存中找到该字符串,并观察任何引用它的代码。然后你应该能够从那里回溯,找到带你到达那里的条件跳转并修补它,使得它不再(例如,用nop字节替换整个jCC指令)。

但是,我强调一下,这需要一些调查研究,它不是你按下一个按钮就能解决的事情。你可能需要深入研究汇编语言才能理解它是如何工作的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接