0

如何查看由 Delphi 或 C++ 编译的可执行文件的源代码?

请帮我。

编辑后:

我有一个程序。当我启动这个程序时,它会显示一个对话框并要求输入密码。此密码保存在源代码中。我想快速轻松地获取此密码。

4

6 回答 6

12

你不能。

当编译器将人类可读的文本源代码缩减为机器可执行代码时,会丢弃大量信息。局部变量不需要机器代码中的名称,例如,它们只是指令操作码中的寄存器位。

这就是为什么调试已编译的可执行文件以逐行遍历原始源文件的原因只有在您有编译器调试符号与可执行文件一起使用时才能完成。

有一些实用程序试图将机器代码逆向工程为源代码,但在我看来,结果对人类的可读性不如原始机器代码。机器生成的函数名称、机器生成的局部变量和参数,而且很多时候实用程序必须猜测参数和局部变量的确切数据类型。(这个 arg 是有符号整数还是无符号整数?很难判断它何时只是一个堆栈槽或机器寄存器)

编译成中间表示,就像在 Java 和 .NET 中所做的那样,提供了更多的可逆性,因为大部分原始代码的类型和符号名称都被保留了。例如,Reflector 可以发出非常接近原始人类编写的源代码的 C# 源代码。

于 2010-07-15T18:08:12.697 回答
2

你不能。编译器获取源代码并将其转换为机器指令,留下原始源代码的“无痕迹”。

有一些程序称为反编译器,但它们基本上只是自动化逆向工程,它们实际上无法访问原始源代码,因为那早已不复存在。

于 2010-07-15T18:02:03.103 回答
1

通过使用反汇编器或反编译器。但是,您永远无法从二进制文件中获取原始源代码。该信息丢失。

于 2010-07-15T18:02:29.567 回答
1

如何查看Delphi或C++编译的执行文件源代码?

你不能,因为编译的 Delphi/C++ 程序中不存在源代码。

我有一个程序。当我启动这个程序时,显示一个对话框并询问密码。这个密码保存在源代码中。我想快速轻松地获取这个密码。

试图破解一些东西,嗯?
密码很可能没有保存在源代码中。可以对密码使用哈希函数来检查它是否有效,而无需将密码存储在源代码中。即使你找到了一个哈希,也不容易从中得到密码。

您可以使用反汇编程序(Ida Pro、OllyDBG 或类似工具)从程序中获取汇编程序列表。即使没有源代码,您也可以调试程序,尽管您会看到纯汇编。AFAIK,存在“反编译器”,但我从未使用过其中之一,并且怀疑它们对 C++/Delphi 代码(编译为本机应用程序的代码)有用。

有一些简单的技术可以破解程序并绕过密码检查(如果满足某些条件,程序作者没有进入安全性,保护很容易等),但我不确定这是否允许讨论主题在stackoverflow上。

无论如何,如果您对出于法律目的的逆向工程感兴趣,您可以尝试一本名为“逆向:逆向工程的秘密”的书。

于 2010-07-15T18:26:18.813 回答
0

当您说“执行”时,您的意思是“可执行”吗?如果是这样,反编译只会让你组装。一些反编译器会尝试将程序集转换为更易读的形式,但是除非您将源代码实际编译到文件中,否则没有通用的方法可以从 exe 获取源代码。

于 2010-07-15T18:04:08.587 回答
0

首先,密码没有保存在源代码中。编译过程是单向的;成品不会改变其来源。(或者它的二进制文件,至少在大多数情况下。)密码很可能保存在某个地方的数据文件中。如果程序的作者完全有能力,密码会以某种方式散列或加密。反编译程序对你没有多大帮助。

此外,正如 InsertNickHere 所提到的,我们不是这里的黑客网站。我们是可敬的编码人员,他们互相帮助解决构建合法软件所涉及的复杂性。请把你的可疑问题带到别处。

于 2010-07-15T18:27:32.817 回答