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
dnSpy
Moderator: wriedmann
- ArneOrtlinghaus
- Posts: 405
- Joined: Tue Nov 10, 2015 7:48 am
- Location: Italy
dnSpy
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
![Sad :(](https://dt9qzg9h465rt.cloudfront.net/phpBB3/images/smilies/icon_e_sad.gif)
![Sad :(](https://dt9qzg9h465rt.cloudfront.net/phpBB3/images/smilies/icon_e_sad.gif)
![Sad :(](https://dt9qzg9h465rt.cloudfront.net/phpBB3/images/smilies/icon_e_sad.gif)
![Smile :)](https://dt9qzg9h465rt.cloudfront.net/phpBB3/images/smilies/icon_e_smile.gif)
![Smile :)](https://dt9qzg9h465rt.cloudfront.net/phpBB3/images/smilies/icon_e_smile.gif)
Wir benutzen dnspy zum Debuggen bei Kunden und da funktioniert es toll. Ansonsten kann ich keine Antworten geben.
Gruß
Arne
dnSpy
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.
- ArneOrtlinghaus
- Posts: 405
- Joined: Tue Nov 10, 2015 7:48 am
- Location: Italy
dnSpy
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
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
dnSpy
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
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
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
- ArneOrtlinghaus
- Posts: 405
- Joined: Tue Nov 10, 2015 7:48 am
- Location: Italy
dnSpy
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
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
dnSpy
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.
dnSpy
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)
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
![Smile :)](https://dt9qzg9h465rt.cloudfront.net/phpBB3/images/smilies/icon_e_smile.gif)
Wolfgang
(aktuell in Pairdorf)
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
- ArneOrtlinghaus
- Posts: 405
- Joined: Tue Nov 10, 2015 7:48 am
- Location: Italy
dnSpy
Super Möglichkeiten sind das! Vielen Dank.
Gruß an den "Campus" in Pairdorf.
Gruß an den "Campus" in Pairdorf.
dnSpy
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
https://khalidabuhakmeh.com/fix-dotnet- ... y-patching