dnSpy

Deutschsprachiges X#-Forum – German language forum

Moderator: wriedmann

Post Reply
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

dnSpy

Post by lagraf »

Hallo zusammen,
hat schon mal jemand dnSpy zum Patchen einer C# DLL verwendet? Wie zuverlässig ist das, wenn man eine Methode um ein paar Zeilen ergänzt?
LG Franz
User avatar
ArneOrtlinghaus
Posts: 412
Joined: Tue Nov 10, 2015 7:48 am
Location: Italy

dnSpy

Post by ArneOrtlinghaus »

Ich habe mir nie einfallen lassen, dass man auch Dotnet-Dlls irgendwie patchen können müsste. Gibt es da gar keine Sicherheitsmechanismen, die das verhindern? :( :( :( :) :)

Wir benutzen dnspy zum Debuggen bei Kunden und da funktioniert es toll. Ansonsten kann ich keine Antworten geben.

Gruß
Arne
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

dnSpy

Post by lagraf »

In diesem Fall existiert der Hersteller nicht mehr und ich benötige noch eine Weile um meine Programme auf ein anderes Modul umzustellen. Mit 4 zusätzlichen Befehlen an der richtigen Stelle ist der Fehler behoben und ich kann die Zeit bis dahin noch überbrücken.
User avatar
ArneOrtlinghaus
Posts: 412
Joined: Tue Nov 10, 2015 7:48 am
Location: Italy

dnSpy

Post by ArneOrtlinghaus »

Ich kenne mich zu wenig aus mit diesen Details. Aber meiner Meinung nach kann man nicht den Kode von Assemblies verändern.

Was es gibt, sind die Extension Methods, mit denen man Kode in vielen Punkten erweitern kann durch Kode, den man in eigenen Assemblies schreibt und der dann sozusagen existierende Klassen zur Runtime-Zeit erweitert. Vielleicht wäre das eine Möglichkeit?

Oder geht vielleicht eine Ableitung einer Klasse und hier dann das Überschreiben der Methode? Natürlich in C# programmiert.

Arne
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

dnSpy

Post by wriedmann »

Hallo Arne,
PMFJI, aber mit das geht mit Win32 mit entsprechenden Assembler-Kenntnissen: es gibt Patch-Programme dafür.
Mit .NET und IL ist das noch leichter, weil in manchen/vielen Fällen ein Programm deassembliert und neu assembliert werden kann.
Da gibt es sogar kommerzielle Programme dafür, siehe PostSharp.
Ob uns das als Software-Hersteller gefällt, ist ein anderes Thema.... da kommen dann effektiv Code-Verwürfler ins Spiel, die im Endefekt aber auch nichts anderes machen, als das Programm zu disassemblieren, zu verwürfeln und neu zu bilden.
Wolfgang
P.S. mir hat das mal den A.... gerettet, weil SAP nicht in der Lage war, ein RDD für die aktuellste Vulcan-Version bereitzustellen
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
ArneOrtlinghaus
Posts: 412
Joined: Tue Nov 10, 2015 7:48 am
Location: Italy

dnSpy

Post by ArneOrtlinghaus »

Hallo Wolfgang,

oh wie schön, es gibt doch doch die dreckigen Möglichkeiten von damals. Es ist ja gut, wenn es noch immer ein paar Rettungsanker gibt :cheer:

Dann bist du ja die richtige Person, die sagen kann, was beispielsweise möglich ist.

Meiner Meinung nach kann man mit dnSpy nur versuchen, eine Assembly zu disassemblieren, wenn sie nicht gecrypted ist und muss dann mit VS oder ähnlich den Kode dann weiterbearbeiten.

Gruß
Arne
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

dnSpy

Post by lagraf »

Ich habe mir die Methode rausgesucht, wo der Fehler drin ist, im Menü "Methode (C#) bearbeiten" gewählt. Dann wurde die Methode decompiliert, die Änderungen habe ich eingebaut und mit dem Button "Kompilieren" die Methode wieder kompiliert und anschließend gespeichert. Das hat funktioniert wie ich bei Test gesehen habe.
User avatar
wriedmann
Posts: 3755
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

dnSpy

Post by wriedmann »

Hallo Arne,
soweit ich das aus der Doku verstehe (und der Franz hat das auch so beschrieben), macht das Tool den Dekompilier- und Kompilier-Vorgang alleine und im Hintergrund.
Wenn das Programm/DLL gecryptet ist, dürfte das nach wie möglich sein, halt etwas herausfordender :). Im Endeffekt wird auch ein Crpyting-Tool den Code nur verwürfeln bzw. unlesbar machen.... mehr kann es nicht tun, da das Laufzeitsystem den Code immer noch ausführen muss, außer der Hersteller liefert das Programm nicht als IL aus, sondern als Maschinencode (was ja auch geht).
Wolfgang
(aktuell in Pairdorf)
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
ArneOrtlinghaus
Posts: 412
Joined: Tue Nov 10, 2015 7:48 am
Location: Italy

dnSpy

Post by ArneOrtlinghaus »

Super Möglichkeiten sind das! Vielen Dank.
Gruß an den "Campus" in Pairdorf.
VR
Posts: 102
Joined: Sun Aug 23, 2020 3:07 pm
Location: Italy

dnSpy

Post by VR »

Eventuell hilft dieser Artikel, der das "Monkey Patching" von Dotnet Assemblies beschreibt. Dabei wird die Assembly selbst nicht geändert, sondern nur zur Laufzeit manipuliert.

https://khalidabuhakmeh.com/fix-dotnet- ... y-patching
Post Reply