Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Exe-Header und Checksum-berechnung (https://www.delphipraxis.net/4979-exe-header-und-checksum-berechnung.html)

ShadowCaster 19. Mai 2003 13:08


Exe-Header und Checksum-berechnung
 
Hi Leute, ich hab mal eine Frage,

seid längerem versuche ich die Dateien, die von so nem blöden virus bei mir zu Hause infiziert wurden (Das System ist mittlerweile zu 100% clean, nur ein paar infizierte Dateien hab ich "aufgehoben" *grins*) wieder zu cleanen.

Bei den Dateien handelt es sich um Exe-Dateien. Jetzt sieht das folgendermaßen aus. Eine Exe besteht aus einem DOS-Header und einem PE-Header. Jeder der beiden Header hat eine Checksumme. Die des alten Dos-Headers wird offenbar nicht über CRC16 oder 32 berechnet und die des neuen auch nicht. Also die des Dos-Headers ist ein WORD-Wert und die des PE-Headers ist DWORD. Mich würde interessieren wie ich die Checksummen der beiden Header berechne. zu dem Zeitpunkt der Checksummenberechnugn kann ich ja nicht wissen wie das Checksummenfeld selbst aussieht, also kann ich eigentlich die Checksumme nicht berechnen wenn dieses Feld mit dazu benutzt wird. Also welche Teile der exe werden zur Berechnung der Dos-Checksumme und der PE-Checksumme gebraucht? Welche Formel gilt zur berechnung? Die checksummenfelder können ja schlecht zum Zeitpunkt der Berechnung selbst verwendet werden. Wie mach ich das also?

bin für jede Hilfe dankbar. Wenn ich die Lösung hab, muss ich nurnoch den Entry-Point des Viruses ermitteln, der schneinbar in jeder Exe variabel irgendwo in den infizierten Code zu springen scheint. Wenn ich diesen Entrypunkt ermittelt hab, brauch ich nurnoch den Adresspunkt, der wieder an die ursprüngliche Stelle der Exe springt. Sofern ich den hab, kann ich den PE-Header rekonstruieren.


Nachtrag:

Die Checkum des Dos-Exe-Headers wird wohl so berechnet, dass alle Word-Werte der Datei addiert werden. Dann werden sie abgeschnitten (auf 2 Byte Endgröße) und invertiert. Nur, woher soll ich vorher wissen wie große das WORD der Checksumme selbst ist? Wird das auch mit einberechnet? Gibt es da keinen Sourcecode für? Wie wird die PE-Checksumme berechnet? Ich brauch Antworten Ich hab inzwischen über 30 Anfragen mit insgesamt 250 PC's die mit dem Virus infiziert sind und sämtliche kommerziellen Virenremover bauen mist und machen nurnoch mehr am System kaputt. dazu zählt auch Norton.

ShadowCaster 19. Mai 2003 13:43

hey... Leute, ich brauch Hilfe. Wenn ich jetzt einen Assembler hätte dann könnt ich mir mittlerweile schon 500 verschiedene Viren compilieren die ich zum Thema PE bei google gefunden habe :mrgreen: aber das will ich net :angle2: Will doch nur Hilfe!!! Bitte!!! Ich brauch das unbedingt, :freak:

jbg 19. Mai 2003 15:36

Zitat:

Zitat von ShadowCaster
könnt ich mir mittlerweile schon 500 verschiedene Viren compilieren die ich zum Thema PE bei google gefunden habe

Und durch den API Hook Code hast du auch noch die Verbreitungsmethode zur Hand. (AndyB = jbg)

Schau dir mal die vielen EXE-Formate an:
Wotsit

Luckie 19. Mai 2003 16:31

Zitat:

Zitat von ShadowCaster
hey... Leute, ich brauch Hilfe. Wenn ich jetzt einen Assembler hätte dann könnt ich mir mittlerweile schon 500 verschiedene Viren compilieren die ich zum Thema PE bei google gefunden habe :mrgreen: aber das will ich net :angle2: Will doch nur Hilfe!!! Bitte!!! Ich brauch das unbedingt, :freak:

Du läßt uns aber schon etwas länger als eine halbe Stunde Reaktionszeit oder? :x

Und so lange wie du daran rummachst, kommt es auf 3 tage mehr oder weniger wohl auch nicht an.

ShadowCaster 19. Mai 2003 16:36

Leute, ich wollte doch gar keinen Virus proggen. Das sollte ein Scherz sein. Ich will einen Virenscanner schreiben, der unter anderem einige selbstextrahierende Exe-Dateien meiner alten Sicherungen virenfrei macht und dass die dann noch ausführbar sind und nicht wie bei norton antivirus nicht mehr laufen. Naja, ich wüsste zugern wie ich die Checksummen berechne aber wotsit werd ich mir mal reinziehen. Danke schonmal dafür :) :nerd:

ShadowCaster 19. Mai 2003 16:46

danke.. ich hab jetzt noch 5 neben meinen anderen 20 Abhandlungen über Exe udn PE und überall ist von Checksummen die Rede aber es wird nirgends genau erklärt (mit Beispiel) wie sie berechnet werden. Also wer noch mehr Links mit solchen Abhandlungen hat, nur her damit. Ich mach dann bald eine Linksammlung von oder werd mal ein Tut schreiben. Achja... das Tut wird nur nicht beinhalten, wie ich die beiden ach so unwichtigen Checksummen der Datei berechne. Es hängt ja nur... lediglich von diesen Checksummen ab ob das Programm ausführbar ist. :dancer:

also Hilfe wäre angebracht (bitte!!) :mrgreen: Irgendwann setz ich Kopfgeld für sowas aus oder ich spendier ein Kasten Bier ;)

jbg 19. Mai 2003 18:20

Wieso brauchst du eigentlich die CheckSum?
Denn: "CheckSum: Usually, this isn't filled in"


Zudem: Warum das Rad neu erfinden. Nimm doch einfach die Jedi Code Library. In der Unit JclPEImage ist die Klasse TJclPEImage, die neben dem Ermitteln der CheckSum auch deren Berechnung enthält.

ShadowCaster 20. Mai 2003 08:45

Das Problem ist, dass die Checksumme für den PE header der Exe sehr wohl verwendet wird. Ich möchte gern die genaue Formel und nicht eine DX-Library einbinden, wo ich gar kein DX machen will (ist doch einleuchtend, oder?) also nehmen wir an wir wollten für folgende Datei eine Checksumme berechnen, wo ein Feld (DWORD) für die Checksumme mit drinnen ist:

DWORD Checksumme (4 Byte .. ist am Anfang 0)
und dann z.B. 80 Byte Datenstream der folgt.

so jetzt will ich eine Checksumme von der kompletten Datei erstellen, das schließt aber das Feld Checksumme mit ein, was ja noch 0 (NULL, NIL, Nada, nix) ist. Nehmen wir an, die Checksumme wäre F5DA4209. nur wenn wir das Feld Checksumme jetzt auf den wErt setzen, haben wir ein Problem. Die Datei wird ausgeführt und dann vom Kernel gecheckt. Jetzt stimmt der Wert der Checksumme aber nicht mehr. Verstanden? Das ist mein Problem beim PE-Header. Man kann nicht einfach CRC 32 auf die ganze Datei anwenden, wenn man gar nicht weiß, welche Sektionen und welch Bytes des PE-Headers oder der Datei mit in die Checksumme einbezogen werden.

also ich brauch keine DX-Libraries, mit denen man Computerspiele (eigentlich) programmiert, sondern einen Algo und ich muss wissen welche Bytes für die Checksumme benutzt werden. Die Checksumme des MZ-Headers kann ich (hoffentlich) jetzt richtig berechnen. :|

ShadowCaster 21. Mai 2003 09:33

Na schön Leute, vielen Dank dennoch für eure Hilfe und Hilfsbereitschaft. Wenn ne win32-Anwendung keine Checksummen braucht, was offenbar der Fall ist.. dann werd ich das erstmal sein lassen, weil mich das Zeit kostet. Da hilft wohl einfach irgend wann mal ausprobieren, wenn ich Zeit und Lust hab.

Nebenher arbeite ich mich gerade in den Inline-Assembler von Delphi ein und wenn ich demnächst den Virus gescheit aus Exe-Dateien entfernen kann, werd ich glaub ich ein Programm schreiben, was Linkviren selbstständig aus Exe-Dateien entfernen kann (da alle Linkviren nach dem selben Muster arbeiten). Ich müsste nur eine Logik dazu einbauen. Parallel dazu werd ich wohl mal ein gescheites (deutsches) Tut über win23-Exes und deren Benutzung schreiben. Naja vielen Dank nochmal und bis dann :spin:

jbg 21. Mai 2003 10:31

Zitat:

Zitat von ShadowCaster
nicht eine DX-Library einbinden

Wie kommst du jetzt auf DirectX? Nur weil das Jedi-Projekt auch die DirectX Header übersetzt hat, heißt dass doch noch lange nicht, dass alle anderen Jedi-Projekte auf DirectX aufbauen. Die JCL hat, wie auch die JVCL, überhaupt nichts mit DirectX zu tun.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:30 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz