[C#]Ressourcen einer Anwendung auslesen und modifizieren

Hallo Hackerfreunde,

mit dem Programm Resource Hacker(kurz ResHacker) kann man sehr einfach Anwendungen öffnen und die Ressourcen des Programms anschauen und beliebig modifizieren bzw. austauschen ect. Ich habe schon sehr lange nach einer Möglichkeit gesucht genau diese Funktionsweise auch zu implementieren oder nachzuprogrammieren, jedoch habe ich keine Möglichkeit gefunden.

Gibt es irgendwelche API-Funktionen, Klasen oder ähnliches womit es möglich wäre auf die Ressourcen einer Anwendung zuzugreifen und modifizieren?

the_uxreal
 
Hallo Tasmas,

ich glaube, dass du mich nicht ganz verstanden hast. Ich möchte auf die Ressourcen einer Anwendung(keine .NET-Anwendungen!) zugreifen und beispielsweise Bilder(Bitmap) oder Strings auslesen können.

zero_x
 
Hallo CDW,

danke für die Links, jedoch hab ich eine frage: kann ich damit genau den selben Zweck wie das Programm ResHacker erzielen?

zero_x
 
Original von the_uxreal
Hallo CDW,

danke für die Links, jedoch hab ich eine frage: kann ich damit genau den selben Zweck wie das Programm ResHacker erzielen?

zero_x
Das weiß ich nicht. Hatte irgendwie (aus welchen Gründen auch immer) angenommen, es ginnge Dir in erster Linie um modifizierung vorhandener Ressourcen.
Ansonsten schaut es zumindest so aus, dass die Funktionen (mit etwas Aufwand) dasselbe Ergebnis liefern sollten. Z.B mit EnumRessourceTypes erstmal alle Typen sammeln,
(es gibt http://msdn.microsoft.com/en-us/library/ms648009(VS.85).aspx)
RT_ACCELERATOR Accelerator table.
RT_ANICURSOR Animated cursor.
RT_ANIICON Animated icon.
RT_BITMAP Bitmap resource.
RT_CURSOR Hardware-dependent cursor resource.
RT_DIALOG Dialog box.
RT_DLGINCLUDE Allows a resource editing tool to associate a string with an .rc file. Typically, the string is the name of the header file that provides symbolic names. The resource compiler parses the string but otherwise ignores the value. For example,

/* file MyFile.dlg */

1 DLGINCLUDE "MyFile.h"
RT_FONT Font resource.
RT_FONTDIR Font directory resource.
RT_GROUP_CURSOR Hardware-independent cursor resource.
RT_GROUP_ICON Hardware-independent icon resource.
RT_HTML HTML.
RT_ICON Hardware-dependent icon resource.
RT_MANIFEST Microsoft Windows XP: Side-by-Side Assembly XML Manifest.
RT_MENU Menu resource.
RT_MESSAGETABLE Message-table entry.
RT_PLUGPLAY Plug and Play resource.
RT_RCDATA Application-defined resource (raw data).
RT_STRING String-table entry.
RT_VERSION Version resource.
RT_VXD VXD.

dann mit EnumRessourceNames die Namen zu jeweiligem Type. Mit FindRessource (module,name,type) sollte man einen Handle darauf bekommen und mit LoadRessource/LoadImage diese laden (die erwähnten Begin... Update ... EndUpdate können dann zur Modifizierung genutzt werden).

BTW: im Link von Tasmas schaut es so aus, als ob NET einen netten Ressourcemanager bieten würde.
Sonst gibt es noch den Weg für "richtige Männer":
PE Format auswerten, Ressourcen Directory "zu Fuß" einlesen und genauso "zu Fuß" auswerten (zu Fuß=Byte für Byte lesen, irgendwo das Ressourceformat besorgen und nach diesem die Daten auswerten - macht allerdings viel Aufwand und eher weniger Spass ;) ).
 
Hallo CDW,

kannst du mir erklären, wie es genau die "richtigen Männer" machen? Wenn ich nun eine Anwendung Byte für Byte auslesen habe ich eine Reihe von Zahlen, aber wie kann ich herausfinden ob es eine Ressource ist oder es einfach ein Teil des kompilierten Quellcodes ist? Gibt es dazu ein Codebeispiel oder Tutorial?

Ich hab es mittels der API-Funktionen versucht, jedoch funktioniert es seltsamerweise nicht. Kannst du mir einwenig erklären, in welcher Reihnfolge ich die Befehle verwenden soll oder gibt es dazu ein Codebeispiel? Wäre wirklich sehr sehr nett, wenn mir jemand weiterhelfen kann!

the_uxreal
 
Hallo dmesg,

leider sind die beiden Links bzw. Projekte nicht in C# programmiert, sondern in C++. Aber der zweite Link ist genau, dass was ich suche! Gibt es eine Möglichkeit dies in C# umzusetzen? Bei dem ersten Link ist es nur für das auslesen der Icons, das ist nicht das, wonach ich suche. Ich möchte auch Bitmaps, Strings ect. auslesen. Im Grunde eigentlich möchte ich das, was der ResHacker auch kann.

the_uxreal
 
wtf? Ich denk du wolltest das mit dem WinAPI machen? Da ist es doch egal welche Sprache das Programm geschrieben ist, die Befehle aendern sich nicht großartig, sondern nur die Syntax.
 
Ok nochmal zu mitschreiben:

C++ ist nicht WinAPI.

Du kannst auch in C# auf das WinAPI zugreifen.

Das Windows Application Programming Interface (kurz: WinAPI; zu dt. etwa: Windows-Anwendungs-Programmierungs-Schnittstelle) ist eine Programmierschnittstelle und Laufzeitumgebung, welche Windows-Programmierern bereitsteht, um Anwendungsprogramme für Windows-Betriebssysteme zu erstellen.
Vereinfacht: das WinAPI besteht aus Funktionen auf die du unabhaengig der Programmiersprache (hier gibt es natuerlich Einschraenkungen) zugreifen kannst.

So wenn du das verstanden hast, wirst du sehen, dass es keine Rolle spielt ob die Funktionen in C++, C, Asm, Java, Delphi, VisualBasic oder C# aufgerufen werden.

Da ich nun davon ausgehe, dass du nicht ueber die noetigen Kenntnisse fuer den Umgang mit dem WinAPI verfuegst, empfehle ich dir lieber nach irgendwelchen fertigen Klassen, Libs oder sonstwas fuer C# zu suchen, andernfalls wird dir der Spaß am Projekt schnell vergehen!
 
Zurück
Oben