JustDecompile/dotPeek tonen me de broncode van een assembly. Hoe kan ik het wijzigen?

Ik kan de originele broncode zien met de decompilers, maar hoe pas ik de broncode aan en compileer ik de .DLL naderhand?

7

2 antwoord

Eerst en vooral zie je de originele broncode niet; je ziet een reverse-engineered broncode.

Als u geïnteresseerd bent in het programmatisch wijzigen van een assembly, bekijk dan deze projecten: * De Common Compiler Infrastructure (CCI) Metadata en CCI AST projecten op CodePlex. Dat is precies waar ze voor zijn.

"[CCI] allows applications to efficiently analyze or modify .NET assemblies, modules, and debugging (PDB) files." — from the project's website

IIRC, CCI Metadata werkt op een vrij laag niveau van abstractie. Als je code wilt wijzigen of invoegen, moet je Intermediate Language (IL) gebruiken. CCI AST biedt abstracties op een hoger niveau (abstracte syntaxisbomen).

(Btw.) Ik veronderstel dat CCI je niet toestaat te knoeien met sterk benoemde (gesigneerde) vergaderingen, omdat dat hun doel zou verslaan.)

  • Mono.Cecil. It was developed for Mono, but works on .NET too:

    "In simple English, with Cecil, you can load existing managed assemblies, browse all the contained types, modify them on the fly and save back to the disk the modified assembly." — from the project's website

Trouwens, er is hier een vraag over Stack Overflow die vraagt ​​om een vergelijking van de twee .

Andere gerelateerde bibliotheken/frameworks:

  • Roslyn. This project's focus is on the representation of source code as abstract syntax/parse trees, and allows you to do e.g. source code analysis and manipulation. It's also supposed to be able to compile source code for you. However, Roslyn is not specialized on assembly manipulation. (To summarise, you could think of Roslyn as a mix of System.CodeDom and System.Linq.Expressions, but much more powerful than either of these.)

  • Kevin Montrose has written an IL-emitting library called Sigil which is "A fail-fast, validating helper for DynamicMethod and ILGenerator."

  • You can use the ildasm (IL disassembler) and ilasm (IL assembler) to do something called "round-tripping" (read about it e.g. on Mike Stall's blog):

    Round-tripping is where you decompile an app (perhaps via ILDasm), potentially edit the IL, and then recompile it (perhaps via ILAsm). This is the backbone for rewriting an assembly [...].

  • A last option is the System.Reflection and System.Reflection.Emit functionality in the .NET Base Class Library (BCL). The former allows you to inspect assemblies. The latter provides functionality to generate & save new assemblies to disk. As with CCI, you'll have to deal with raw IL. Also, I don't think they allow you to modify an existing assembly easily.

15
toegevoegd
@ user101579, ik heb mijn antwoord bijgewerkt.
toegevoegd de auteur stakx, de bron
Ik ken ILSpy niet, maar waarom probeer je het zelf niet en kijk of het voldoet aan je vereisten?
toegevoegd de auteur stakx, de bron
Dus, wanneer ik deze tools gebruik, veronderstel ik eerst de broncode te genereren en deze te compileren met een andere tool? Of kan ik gewoon nieuwe code invoegen met die hulpmiddelen?
toegevoegd de auteur user101579, de bron
Ik hoorde hierover ILSpy 2.0 Ik kan het project decompileren tot een Visual C# -project, is dat een goed product? Het heeft wel type of naamruimte niet gevonden fouten.
toegevoegd de auteur user101579, de bron

Met een plugin voor JustDecompile kunt u assembly's bewerken. Ga naar het gedeelte Assembly Editor Plug-in .

2
toegevoegd