AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Exe... mal wieder!

Ein Thema von ShadowCaster · begonnen am 26. Mai 2003 · letzter Beitrag vom 28. Mai 2003
Antwort Antwort
ShadowCaster

Registriert seit: 19. Mai 2003
71 Beiträge
 
Delphi 5 Enterprise
 
#1

Exe... mal wieder!

  Alt 26. Mai 2003, 08:19
Hallo Leute,

ich hab ein neues Problem. Nehmen wir an ein Programm überschreibt den Entrypoint des PE-Headers in meinen Exe-Files. Jede Exe sollte ja eine .idata-Section besitzen. In dieser Section sitzt in der Regel der Entrypoint. Jetzt würd mich interessieren, wie ich den diesen Eintiegspunkt der Exe-Datei ermitteln kann.

Noch ein Problem: Ich hab zu Hause diverse Exe-Dateien disassembliert und mir den Entrypoint angeschaut wie ihn mir der Assembler angegeben hat und wie er im PE-Header aussieht. Die Werte haben nie übereingestimmt. Jetzt meine Frage: Ist das vielleicht ein Offset für irgendwas oder brauch ich eine Formel um den richtigen Einstiegspunkt anhand dem des Headers zu finden? Wenn ich die wüsste, hätte ich zweiteres Problem gelöst.

Also wer sich damit auskennt, dem wäre ich sehr verbunden, wenn er mir helfen würde. Auch Homepages wo das drinnen steht oder Informationen dazu zu finden sind, sind willkommen.

Vielen Dank
  Mit Zitat antworten Zitat
ShadowCaster

Registriert seit: 19. Mai 2003
71 Beiträge
 
Delphi 5 Enterprise
 
#2
  Alt 26. Mai 2003, 14:45
Naja, danke Leute, auch wenn ihr nicht geantwortet habt. Das zeigt mir, dass ich wohl der einzigste bin, der sich mit dem Thema beschäftigt. Hab die Frage bereits in einem Asm-Forum gestellt aber dort keine Antwort und nachdem ich 1000 Seiten bei google durchsucht hab und keine Antwort gefunden hab, frag ich mich wie es überhaupt ein Betriebssystem geben kann oder Software die läuft, wenn es nicht mal einen Algorithmus gibt, mit dem man den Einstiegspunkt einer Exe ermitteln kann, ohne dabei auf den PE-Header zurückzugreifen. Diese Frage hab ich in 5 oder 6 Foren gestellt und keine Hilfe. Die Leute ausm Asm-Forum ham mich zurück ins Delphi-Forum geschickt aber hier scheint auch niemand helfen zu können oder zu wollen. Schade eigentlich. So werd ich meinen Virusentferner wohl nicht fertig programmieren können, weil ich nicht mehr den alten Einstiegspunkt ermitteln kann. Schade, bin jetzt irgendwie ziemlich down, weil die ganze 3 Wochen-Arbeit umsonst war und an so einer Kleinigkeit (so nenn ichs jetzt mal) scheitert. Ich fühl mich zum ... hehe
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#3
  Alt 26. Mai 2003, 15:52
Helfen dir denn die Dateispezifikationen auf wotsit.org nicht weiter? Dort müsste doch bestimmt auch stehen, wie man den Einsteigspunkt berechnet, bzw diesen rekonstruieren kann.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.107 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 26. Mai 2003, 16:06
Moin ShadowCaster,

wirklich traurig, dass Du innerhalb von 6 Stunden keine Antwort bekommen hast

Also ich hab' mal bei Google

PE format

als Suchbegriff eingegeben, und erhielt als erste Fundstelle einen, recht umfangreichen Artikel von MS, in dem einiges erklärt wird, und als zweites auf einen Link, von dem aus man sich ein Word Dokument mit der Spezifikation bei MS herunterladen kann.

Zitat von ShadowMaster:
...frag ich mich wie es überhaupt ein Betriebssystem geben kann oder Software die läuft, wenn es nicht mal einen Algorithmus gibt, mit dem man den Einstiegspunkt einer Exe ermitteln kann, ohne dabei auf den PE-Header zurückzugreifen.
Warum sollte das OS am Header vorbei einen Einstiegspunkt finden müssen? Dazu ist der Header mit seinen Angaben doch da.
Du würdest von einem Datenbanksystem doch wohl auch nicht erwarten, dass es ohne die Indizes wie erwartet arbeitet?

Theoretisch müsste der Einstiegspunkt ja am Ende des Headers sein. Angenommen, hier stünde ein Sprung an eine weiter hinten liegende Adresse, so heisst das ja noch lange nicht, dass es sich nicht trotzdem um den unveränderten Orginalcode handelt.
Näher beschäftigt habe ich mich mit dem PE Format noch nicht, aber nach allem was ich dazu bislang gelesen habe, gehört es mit zu den kompliziertesten Formaten. Übrigens liefert Delphi in seinen Demos ein Bespiel mit nämlich beim Resource Explorer.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
ShadowCaster

Registriert seit: 19. Mai 2003
71 Beiträge
 
Delphi 5 Enterprise
 
#5
  Alt 27. Mai 2003, 08:32
Ihr seid Hasen . Kann euch keinen Vorwurf machen, hab mich falsch ausgedrückt. Gehen wir davon aus, ihr habt einen (jaja, zum hundertsten Mal) Virus auf eurem System, der sich an Exe-Dateien hängt und den alten Entrypoint im PE-Header überschreibt. Wie bereinigt man die Exe, wenn der PE-Header nun nicht mehr gilt? wie? Ich hätte nur die Idee dass ich mir jetzt einen Disassembler schreiben muss und alle Jumpadressen durchgehen muss und auf den Block, wo nicht gejumpt wird, das könnte der Entrypoint sein ... Aber das ist auch sehr wage, weil ja auch ein Jump auf darauf stattfinden kann. Das ist mir nur alles zu kompliziert. Die ganzen Spezifikationen von MS und so weiter sind mir alle zu Hauf bekannt. Mittlerweile hab ich ne Sammlung von an die 30 Spezifikationen die ich alle schon durchgearbeitet hab. Hab dazu nichts gefunden. Wenn ich einen Algo dazu hätte, könnte ich jeden Linkvirus einfach so eben entfernen, weil ich in jeder Exe einen Entrypoint ermitteln kann.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6
  Alt 27. Mai 2003, 11:30
Hast du eventuell gerade den Grund entdeckt, warum auch die "Profis" ihn nicht entfernen können?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.107 Beiträge
 
Delphi 11 Alexandria
 
#7
  Alt 27. Mai 2003, 11:38
Moin ShadowCaster,

ich denke mal, für Dein Vorhaben wird Dir die Struktur eines PE Headers auch nicht viel nutzen.
Du müsstest herausbekommen wie der enthaltene Virus funktioniert, was natürlich voraussetzt, dass Du weisst um welchen es sich handelt. Manch einer wird den original Entrypoint auslesen, auf sich selber umbiegen, und diesen dann, nach Ablauf der Schadensroutine selber aufrufen.
In diesem Falle hättest Du eine Chance den original Entrypoint wiederherzustellen. Das dürfte aber längst nicht bei allen möglich sein.
Nicht umsonst sind die bislang auf dem Markt befindlichen Virenscanner nicht bei jedem Virus in der Lage diesen aus der Datei zu entfernen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
ShadowCaster

Registriert seit: 19. Mai 2003
71 Beiträge
 
Delphi 5 Enterprise
 
#8
  Alt 28. Mai 2003, 09:33
Achne, als ob ich nicht wüsste, dass mir der PE-Header nichts nützt. Ich hab doch gesagt, dass der Entrypoint darin auf den Virus zeigt.

Der Virus besteht aus einem Dll-Loader und einer Entschlüsselungsroutine. Erst wird die Dll aus dem infizierten Code entschlüsselt, dann in den RAM geladen und danach springt der Virus an den alten Code zurück. Ich hab drei infizierete Exe-Dateien disassembliert und genau diesen Loadercode extrahiert. Er ist sehr polymorphic, was heißt, dass der Programmierer des Viruses eine intelligente Asmroutine eingebaut hat, die mit dem Code rumspielt und ihn so in jeder infizierten exe unterschiedlich aussehen lässt, jedoch macht er aber das gleiche.

in einem infizierten Teil des Loaders steht z.B.

add eax, 4

in einer anderen infizierten Exe steht

add edx, 2
add edx, 2

Das ist nur ein kleines Beispiel wie er es fast unmöglich macht ohne integrierten Disassembler im Virusentferner den ursprünglichen Eintiegspunkt zu finden.

Eine Möglichkeit ist es, die Exe zu disassemblieren und den Block rauszusuchen, auf den kein Jump stattfindet. Vielleicht findet man 2-3 dieser Blöcke und kann dann testen auf welchem Block die Exe gestartet wird. Allerdings ist das für den Kernel nicht empfehlenswert, wenn irgendwelcher zufälliger Code ausgeführt wird

Was also tun?
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.107 Beiträge
 
Delphi 11 Alexandria
 
#9
  Alt 28. Mai 2003, 15:20
Moin Shadowcaster,

da wirst Du wohl nicht umhinkommen die Objektcodes zu analysieren (per Programm versteht sich), um dann damit dann den Einsprung in den Originalcode zu finden.
Im Prinzip müsstet Du also einen Interpreter für i86 Code schreiben, der dabei denn den Ablauf überwacht.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
ShadowCaster

Registriert seit: 19. Mai 2003
71 Beiträge
 
Delphi 5 Enterprise
 
#10
  Alt 28. Mai 2003, 16:57
erstmal progge ich einen sehr guten PE-Explorer, der dann später DASM-Funktionalität bekommt
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:55 Uhr.
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