代码之家  ›  专栏  ›  技术社区  ›  jcao219

从理论上讲,是否有可能操纵.NET程序集以使所有内容都公开?

  •  2
  • jcao219  · 技术社区  · 15 年前

    我对CIL不太了解,只是程序集中有记录类型信息的元数据。
    是否可以创建一些能够读取C或VB.NET程序集的反射工具,并更改其元数据,以便所有类成员成为公共的?
    它是直接的吗(例如,为CIL中的每个方法更改一个或两个字节)?

    4 回复  |  直到 15 年前
        1
  •  3
  •   Timwi    15 年前

    是的,这是可能的,但并不总是安全的。在野外,有一些代码使用反射API来查找类型、方法、字段等。如果代码显式地查找非公共的类型、方法、字段等,那么将它们公开将破坏代码。同样,如果代码查找公共代码并期望不包括非公共代码,那么再次使这些公共代码成为公共代码将破坏代码。

    我所知道的最好的工具是 Mono.Cecil 它是一个开放源码库,可以读取、操作和写入.NET程序集。

        2
  •  1
  •   Jon Hanna    15 年前

    举例证明:使用调试器时,可以看到对象的私有成员,包括从其他程序集导入的成员。

        3
  •  0
  •   bbudge    15 年前
        4
  •  0
  •   Kristopher Johnson    15 年前

    如果程序集具有强名称,则无法将修改后的程序集替换为原始程序集。

    推荐文章