2010-07-15 63 views
0

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

请帮帮我。

编辑后:

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

+0

密码是英文单词吗?那么它可能很容易使用十六进制编辑器进行识别。给我EXE,我会试试看。 – 2010-07-15 18:09:40

+3

@hosseinsinohe听起来像你想侵入别人的软件,是吧?我们不在hackersguide.com左右。 – InsertNickHere 2010-07-15 18:11:57

+0

@InsertNickHere是的,但我想帮助反编译大会... – 2010-07-15 18:19:51

回答

12

你不能。

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

这就是为什么调试编译的可执行文件逐行扫描原始源文件只能在编译器调试符号与可执行文件一起执行时才能完成。

在我看来,有一些实用程序试图将机器代码反向工程编译为源代码,但结果对于人而言比原始机器代码更不易读。机器生成的函数名称,机器生成的本地变量和参数,以及实用程序多次猜测参数和局部变量的确切数据类型。 (这是一个有符号整数还是一个无符号整数?难以分辨何时它只是一个堆栈槽或机器寄存器)

因为在Java和.NET中完成的中间表示的编译提供了更多的可逆性,因为许多原始代码的类型和符号名称都保留下来。例如,反射器可以发出非常接近原始人类书面源代码的C#源代码。

2

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

有一些程序称为反编译器,但他们基本上是自动化反向工程,他们实际上不能访问原始源代码,因为这已经很久了。

1

使用反汇编器或反编译器。尽管如此,您仍然无法从二进制文件中获取原始源代码。这些信息丢失了。

0

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

1

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

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

我有一个Program.When我开始这个程序,显示一个对话框,并要求输入密码。这个密码保存在源代码CodeGo.net,我想这个密码快速,轻松地。

试图破解一些东西,是吧?
密码很可能未保存在源代码中。 Hash function可用于密码以检查其是否有效没有将密码存储在源代码中。即使你发现一个散列,从它那里得到一个密码也不是一件容易的事。

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

有几个简单的技术,可以破解程序和绕过密码检查(如果满足一些条件,程序作者没有进入安全,保护很容易等),但我不知道这是否在stackoverflow上允许讨论话题。无论如何,如果您对法律目的的逆向工程感兴趣,您可以尝试一本名为“逆向:逆向工程的秘密”的书。

0

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

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