Skip to Content
New release 12 available 🎉

Coverage

Dynamic Proxy replaces direct call, callvirt and newobj instructions, covering static, instance, virtual and interface calls, property and event accessors, object construction, calls on generic types (for example List<int>.Add), and generic method calls — including LINQ operators such as Where, Select and OrderBy.

To keep the obfuscated program behaving exactly like the original, a few calls are deliberately not proxied and are left as direct calls:

  • Caller-sensitive methods whose result depends on the calling method or assembly — Assembly.GetExecutingAssembly, Assembly.GetCallingAssembly and MethodBase.GetCurrentMethod. Routing these through a proxy would change the observed caller and return a wrong result.
  • By-reference (ref) returns, which a delegate cannot return.
  • Value-type constructors and delegate constructors.
  • Generic methods on generic types, and generic calls whose type arguments are open, by-reference or pointer types.

These calls run unchanged; every other eligible call is proxied.

Last updated on