我们可以使用Reflector获取应用程序的源代码,然后使用该源代码进行调试吗?

时间:2020-03-06 14:28:38  来源:igfitidea点击:

似乎我们可以使用Relector和Debugger的混搭来调试任何.NET应用程序而无需任何源代码。这可能吗?谁看过这个吗?

解决方案

我很久以前尝试过,但没有成功。从那时起,Reflector有了很大的改进,所以我想今天有可能。

如果我们考虑一下,那实际上有点吓人。有人可以反编译应用并获得完整的代码,然后对其进行修改并分发自己的版本。所有这些都不是开源的。但这又是为什么"他们"创造了混淆器的原因。

我找不到链接,但是有人确实使用了反射器源来编译可以逐步执行的1.1框架的调试版本。我尝试使用2.0框架,但发现了太多错误,因此值得我花时间。

如果我们想尝试此操作,请使用FileDisassembler之类的插件开始。在我的简短经历中,我发现有一些错误可以修复,但不是很糟糕。

对于中小型库,此方法应该非常可行。

在较大的更复杂的应用程序中,这是可能的,但实际上并不实际,特别是当使用了许多最新的结构(例如lambda和初始化器)时(我们会得到一大堆包含美元符号的变量名,例如CS $ 4 $ 0000,必须手动修复) 。即使是简单的switch语句,也会在Reflector中引起一些非常丑陋的意粉代码,其中充满了goto语句。

我有很多运气可以反编译为MSIL并在调试模式下重新编译。然后,我们可以在IL文件中放置断点,并使用VS中所有常用的调试器功能。起初,MSIL看起来有些吓人,但是我们很快就能掌握其窍门。

这篇出色的文章解释了如何做到这一点:
http://www.codeproject.com/KB/dotnet/Debug_Framework_Classes.aspx

不,我们需要属于要调试的应用程序的符号文件(.PDB)文件。

Reflector允许我们从IL转到可读的.NET代码,但它仅保留含义,而不是开发人员编写的确切代码。因此,即使我们拥有PDB和Reflector的源代码,也无法进行调试。

我想我们可以使用反射器的源输出来创建.NET项目并生成我们要调试的程序集的自己的版本。但是,这通常是一个真正的痛苦,在.NET框架的情况下,Microsoft会发布调试信息以供感兴趣的任何人使用。

我记得有一次在Reflector中有一个用于调试的插件,但我永远无法使它正常工作。

配置Visual Studio调试.NET Framework源代码
MSDN:PDB文件

我已经看过并做过。我用它来向我的老板表明我们的应用程序没有像他认为的那样受到保护。拿了一个DLL,得到了源代码,然后bam-他几乎心脏病发作了。

在某些情况下,.Net Reflector发生故障,但很难做到这一点-我知道,因为我已经积极尝试了。好的混淆器会使代码变得难以管理/难以理解(例如,重载" a"函数以根据参数进行大量不同的处理),以至于看到源代码对我们没有好处,但是我们仍然可以调试-祝我们好运到底是怎么回事。

Reflector的Deblector插件使我们可以直接从Reflector进行调试。

Reflector Pro可以让我们做到这一点!