如何获取Windows可执行文件的源代码?

27

我有一些旧的Windows可执行文件。我该如何使用Visual Studio 2010编辑它们?有哪些方法可以查看exe文件的源代码?

6个回答

32

你无法从exe文件中获得C++源代码,只能通过反射获得某些版本的C#源代码。


2
我尝试使用Reflector来反编译一个简单的C# VS 2012 Express项目exe,但我已经丢失了源文件。然而,当我打开Reflector导出的代码时,发现有100多个错误。我尝试了其他工具,但只有http://ilspy.net/能够成功 - 不仅没有任何编译错误,而且它似乎保留了变量名,使我能够进行修改并最终生成新的.exe文件。但是,我无法在VS 2012 Express中正确显示窗体,所以我只能通过修改代码来实现更改。我的建议是只进行小的调整。 - user321531
1
只是为了澄清,我也无法获取C源代码,对吗?汇编代码呢? - Santiago Torrabadella

25
如果程序是用C#编写的,您可以使用.NET Reflector以几乎原始的形式获取源代码。您将无法看到注释和本地变量名称,但它非常易读。
如果它是用C++编写的,那就不那么容易了……即使您可以将代码反编译为有效的C++,由于内联函数和难以逆转的优化,它不太可能类似于原始源代码。
请注意,通过反向工程和修改源代码,您可能会违反程序的使用条款,除非您自己编写或获得作者的许可。

谢谢你的回答。它真的很有帮助。我尝试了 .Net 反编译器,但它对我的 exe 没有用。PEiD 说它是 Microsoft Visual C++ 6.0。我认为没有办法获取源代码。无论如何还是谢谢你。 - Ali Demirci

8

如果是本地代码,你可以反汇编它。但你看到的不是程序员编写的原始代码,而是编译器生成的代码。这段代码可能经过了优化,虽然在语义上等效,但比普通汇编语言难以阅读。

如果是字节码(MSIL或Java字节码),有反编译器可以生成相当好的源代码。对于.NET,这将是Reflector。


4

我会使用IDA Pro来反编译可执行文件,它可以生成半完整的代码,你可以将其反编译为汇编或C语言。

如果你有调试符号的副本,请在反编译之前将它们加载到IDA中,这样它就能够命名许多函数、参数等。


1

很抱歉,您无法以可读格式查看它,这是故意的,它将显示解释后的机器代码,没有像.cs/.c文件中通常获得的格式或注释。

这基本上是试错的情况。

已经有人在另一个网站上询问过了。


通常情况下,人们会在没有解释的情况下对其进行负面评价。此外,这个答案并不完全偏离被接受的答案。至少提一下如何改进我的答案,这样可以为我自己和问题的作者带来好处。 - Jamie Keeling
如果你没有删除你的答案,我们本可以。无论如何,你的答案是不正确的;请看其他回答这个问题的人。使用正确的工具,在许多情况下都可以对可执行文件进行逆向工程。 - Michael Petrotta
3
Jamie,我了解你的挫败感,但恕我直言,如果你能够自己找到答案被踩的原因,就不需要其他人评论了。当你开始收到踩的时候,应该看看其他的答案。你的回答与排名靠前的答案直接相矛盾。"无能为力"并非"如果是.NET,你可以轻松实现,如果是本机代码,将更加困难"。 - Michael Petrotta
抱歉,我的意思是有时候代码是无法阅读的,你无能为力。谢谢你为我解答,我说的是基于我的经验,我能够使用C#和Reflector来做到这一点,但不能用C++或C语言。 - Jamie Keeling
3
我有点同意Jamie。是的,他的答案与其他人相矛盾并且可能是错误的。所以可以给他投反对票,但是按照SO的要求告诉他为什么:“最重要的是要诚实。如果你发现了错误信息,请投反对票。插入评论说明具体哪里有问题。更好的做法是编辑和改进信息!提供更强、更快、更优秀的答案!” - RoLYroLLs
显示剩余2条评论

-1

对于任何用任何语言编写的 *.Exe 文件,您都可以使用 hiew(或黑客视图)查看源代码。您可以在 www.hiew.ru 上下载它。这将是演示版本,但仍然可以查看代码。

之后,请按照以下步骤操作:

  1. 按 alt+f2 导航到文件。

  2. 按 Enter 键查看其汇编 / C++ 代码。


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