显示Delphi和C ++源代码

时间:2010-07-15 18:00:22

标签: c++ delphi decompiling

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

请帮帮我。

编辑后:

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

6 个答案:

答案 0 :(得分:12)

你做不到。

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

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

有些实用程序试图将机器代码反向工程为源代码,但在我看来,结果对人类的可读性低于原始机器代码。机器生成的函数名称,机器生成的局部变量和参数,以及实用程序多次猜测参数和本地变量的确切数据类型。 (这个arg是一个有符号的int还是一个unsigned int?很难说它只是一个堆栈槽或机器寄存器)

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

答案 1 :(得分:2)

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

有些程序称为反编译器,但它们基本上只是自动化逆向工程,它们实际上无法访问原始源代码,因为它已经很久了。

答案 2 :(得分:1)

使用反汇编程序或反编译程序。但是,您无法从二进制文件中获取原始源代码。这些信息丢失了。

答案 3 :(得分:1)

  

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

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

  

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

试图破解某事,是吗? 密码很可能不会保存在源代码中。可以在密码上使用Hash function来检查它是否有效没有在源代码中存储密码。即使您找到了哈希,也不容易从中获取密码。

您可以使用反汇编程序(Ida Pro,OllyDBG或类似工具)从程序中获取汇编程序列表。你甚至可以在没有源代码的情况下调试程序,尽管你会看到纯粹的程序集。 AFAIK,“反编译器”存在,但我还没有使用其中一个,并怀疑它们对C ++ / Delphi代码(编译为本机应用程序的代码)有用。

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

另外,正如InsertNick所提到的,我们这里不是黑客网站。我们是尊敬的程序员,他们互相帮助解决构建合法软件所涉及的复杂问题。请把别的问题带到其他地方。