我想稍微修改一下exe。

使用ILSpy,我可以看到所有需要的代码,但是我不知道如何修改代码。

我尝试了导出.cs文件的ILSpy上的“保存代码”,但是当我在Visual Studio中打开.cs文件并更改代码时,我无法编译或运行修改后的代码。

是否存在

PS
我读到可以在汇编中更改代码,但我不知道汇编,因此如果有办法,我必须在较高级别上进行。

评论

您无法使用ILSpy修改exe文件,而应该在每次扩展或缩短代码以获取更多信息时操纵CFF资源管理器并在标头中修补CS和DS的新地址)

感谢您的评论,但我是该领域的新手,并且只有在反编译器为我展示所有具有高级语言(例如C#)的代码的情况下,我才能进行修改。我正在尝试使用.Net Reflector和Reflexil,但是在注释之外显示有一些麻烦。

#1 楼

您可以按照以下模式进行操作:


将代码以.cs文件的形式保存在ILSpy(或Reflector)中(如前所述)。该代码中的项目
在Visual Studio中进行所有修改。
如果VS编译代码,则它也应该在ILSpy和/或Reflector中打开。
如果不是,则很可能是不完整和/或不正确的。在这种情况下,您可以简化代码,直到获得可编译的东西,以识别“缺少的链接”。
这样,我就能够重新编译更复杂的
软件。首先静态地做所有事情,直到有了在VS中创建代码的地方。然后对其进行测试和扩展。

可以在IL中导出未在ILSpy或Reflector中重新编译的代码部分(它们各自都有其优点和缺点),并且可以手动重新排列以在工具中重新编译,在Visual Studio中进一步处理。不幸的是,VS不允许使用内联的IL汇编代码。例如,Reflector通过无用的跳转来保护自己(包括混淆等方法)免受无用的跳转,从而使重新编译器混乱。 ILSpy通常可以解决这个问题。例如,ILSpy无法重新编译子类(即,一个类中的类)。在C#视图中,它们只是不显示在类树中。在IL视图中,您会看到所有这些视图。

评论


谢谢回复。您的意思是:ILSpy不会生成完整/正确的项目,因此在VS中我看到了要编辑的代码,但是在编译VS时会产生很多错误。不幸的是,我不知道软件的完整“设计”,所以我不知道必须重新安排哪一部分。

– sivlab
15年7月19日在12:36

IL视图中的ILSpy以及IL视图中的Reflector或ILDASM输出-应该为您提供完整的“设计”。尤其对于非平凡的程序集,很可能可以识别VS项目的错误原因并将其链接到IL视图。可以从C代码中将IL代码手动转换为C#来重建丢失或错误的部分。这比其他语言中的从汇编到HL的过程相似但更简单,在HL视图(如C#)中理解“设计”要容易得多。

–乔什
15年7月19日在14:48

#2 楼

当前,无法使用ILSpy直接修改二进制文件。唯一的解决方案是您描述的解决方案,导出源代码并重新编译。

评论


我尝试使用带有Reflexil插件的.NET Reflector,但进行了一些改进。但是一旦找到要修改的方法,我就会选择“用代码替换所有内容”,但是Reflexil会显示为空。所以我不能修改它。一些帮助?

– sivlab
15年6月21日在6:45

Reflexil是一种出色的工具。要学习它,您可以查看由Reflexil的发明者在codeproject.com中创建的教程。 “用代码替换全部”有意为您提供了一种空方法,旨在用您自己的方法完全替换给定的方法。

–乔什
15年7月19日在14:52

#3 楼

对于那些仍在寻找该问题答案的人员,我建议尝试使用dnSpy-它可以使您完全执行请求者的要求-修改高级代码并重新编译。 '我们能够对内部exe进行一些小的更改,而我们所拥有的内部exe没有最新的源代码(心怀不满的员工,不要问)。 dnSpy

#4 楼

几年前,我使用了一款软件,该软件允许直接在工具本身中对生成的代码进行有限的编辑,但是当我说“有限”时,我的意思是有限的。实际上,此功能实际上已从该软件的更多
版本中删除。具有此功能的旧版本不再可用,但它仍然是一款不错的免费.NET反编译器,因此,如果要对其进行检查,则称为DotNet Resolver。用于Reflector的Reflexil插件(已经提到过,但是它也不可靠且受限制)。与Visual Studio一起安装。

我知道您希望能够仅编辑高级代码,但这并不十分可行。您可以使用Reflector将从
反汇编的.NET应用程序生成的源代码导出为项目,但随后会出现错误,缺少
依赖项等问题。

使用ILDASM和ILASM,您将直接编辑MSIL,但这实际上是修改.NET应用程序的最佳方法。 MSIL实际上很简单
,您不必处理由
此外,您通常不必担心混淆。在99%的情况下,您始终可以将.NET应用程序分解为MSIL
,然后重新组装它们而不会出现任何问题。如果您不熟悉MSIL,则可以了解它。祝你好运!

评论


非常感谢。正如我在上面的评论中所写,是的,反编译器生成了我感兴趣的代码,但是当我将其导出到VS时,由于多个错误,编译失败。如果没有对软件的完全了解,就不可能纠正错误(至少对我而言)。我将在您提到的直接修改MSIL的VS中尝试该工具。

– sivlab
15年7月19日在12:42