JustDecompile / dotPeek向我展示了程序集的源代码。我怎么修改它?

时间:2012-06-23 20:14:08

标签: .net decompiling

我可以看到反编译器的原始源代码,但是如何修改源代码并在之后重新编译.DLL?

2 个答案:

答案 0 :(得分:15)

首先,您没有看到原始源代码;你看到反向工程的源代码。

如果您对以编程方式修改程序集感兴趣,请查看以下项目: * CodePlex上的Common Compiler Infrastructure (CCI) MetadataCCI AST项目。这正是他们的目的。

  

[CCI]允许应用程序有效地分析或修改.NET程序集,模块和调试(PDB)文件。” - 来自项目的网站

IIRC,CCI元数据的抽象水平相当低。如果要修改或插入代码,则必须处理中间语言(IL)。 CCI AST提供更高级别的抽象(抽象语法树)。

(顺便说一下。我想CCI不会允许你篡改强名(签名)集会,因为那会破坏他们的目的。)

  • Mono.Cecil。它是为Mono开发的,但也适用于.NET:

      

    “简单地说,使用Cecil,您可以加载现有的托管程序集,浏览所有包含的类型,动态修改它们并将修改后的程序集保存回磁盘。” - 来自项目的网站

顺便说一下,Stack Overflow上有一个问题要求a comparison of the two

其他相关的库/框架:

  • Roslyn。该项目的重点是将源代码表示为抽象语法/解析树,并允许您进行例如源代码分析和操作。它也应该能够为您编译源代码。但是,Roslyn 专门用于装配操作。 (总而言之,您可以将Roslyn视为System.CodeDom和System.Linq.Expressions的混合体,但比其中任何一种都强大得多。)

  • Kevin Montrose编写了一个名为 Sigil 的IL发射库,它是“DynamicMethod和ILGenerator的快速失败,验证帮助器。”

  • 您可以使用ildasm(IL反汇编程序)和ilasm(IL汇编程序)执行称为“round-tripping”的操作(阅读它,例如on Mike Stall's blog):

      

    Round-tripping是您反编译应用程序的地方(可能通过ILDasm),可能编辑IL,然后重新编译它(可能通过ILAsm)。这是重写程序集的主干。

  • 最后一个选项是.NET基类库(BCL)中的System.ReflectionSystem.Reflection.Emit功能。前者允许您检查装配。后者提供了生成&的功能。将新程序集保存到磁盘。与CCI一样,您将不得不处理原始IL。另外,我认为它们不允许您轻松修改现有的装配体。

答案 1 :(得分:2)

plugin for JustDecompile允许您编辑装配体。转到 Assembly Editor Plug-In 部分。