AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Simpler PE-Crypter
Tutorial durchsuchen
Ansicht
Themen-Optionen

Simpler PE-Crypter

Ein Tutorial von mr_emre_d · begonnen am 20. Feb 2009 · letzter Beitrag vom 29. Jun 2011
Antwort Antwort
Seite 2 von 2     12   
mr_emre_d
(Gast)

n/a Beiträge
 
#1

Re: Simpler PE-Crypter

  Alt 22. Feb 2009, 10:35
Ach ja? Ich dachte mir immer, dass beide im Ram liegen (Programm und Stack).
Wenn das so ist wie du es sagst, ist es wunderlich, dass es überhaupt funktioniert.

MfG
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Simpler PE-Crypter

  Alt 22. Feb 2009, 10:39
Es ist nicht verwunderlich, dass es funktioniert. Windows verwendet Segmentation praktisch nicht, beispielsweise zeigen alle Segmente auf die gleiche Startadresse. ss[eax] ist in diesem Sinne aber erstens irreführend und zweitens kostet es ein Byte im Code. Wenn du nur [eax] schreibst, wird implizit das ds-Segment verwendet und das Segment Override Prefix fällt weg.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.336 Beiträge
 
Delphi 12 Athens
 
#3

Re: Simpler PE-Crypter

  Alt 22. Feb 2009, 10:40
Zitat von mr_emre_d:
Zitat von spawn89:
Guten Morgen,
Irgendwie verstehe ich den Sinn dieser ganzen Angelegenheit nicht.
Das einzige, was ich mir vorstellen könnte wäre es, Programme wie "DeDe" auszutricksen, damit man seine Codeinhalte "versteckt". Stimmt das?
Ja so ca Der Codeinhalt wird nicht versteckt, sondern verschlüsselt.
die "besseren" Decompiler und Co. lesen eh den "Code" aus'm RAM des laufenden Programms aus.
und um die "einfachen" Decompiler zu ärgern, reicht es schon z.B. einige unwichtige Delphitypische Teile zu löschen/verändern.

Und was z.B. das Speichermanagement und die Virenscanner betrifft ... hier gab's schon öfters mal Theman zu Exe-Packern und so.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Xen

Registriert seit: 8. Aug 2008
9 Beiträge
 
#4

AW: Simpler PE-Crypter

  Alt 27. Jun 2011, 19:52
Nennt mich ThreadLeichen-Schänder, aber ich hab da mal ne Frage bzw. ein Problem.

Die Sache mit dieser Assembler Stub finde ich unglaublich spannend!
Wegen dem Tutorial hab ich mich gleich auf Assembler gestürtzt
Deswegen wollte ich nicht den selben Code nehmen wie im Tutorial.
Damit ein wenig spannender wird, wollte ich das ganze etwas komplizierter gestalten, nur geht es jetzt nicht mehr :

Nach dem Tut wird jedes Byte der Section mit dem Key geXORed.
(Funktioniert ja auch wunderbar)

Ich wollte das folgendermaßen machen:

Ich Xore das ERSTE Byte der Section mit dem Key (Magic)
Das 2. Byte Xore ich mit dem Ersten (was ja schon mit Magic Xored ist)
Danach Xore ich das 3. Byte mit dem 2.
Danach das 4. mit dem 3.
usw.
bis ich am Ende ankomme.

Funktioniert soweit.

Zum Entschlüsseln gehe ich der Einfachheit halber von hinten nach vorne durch die Section:

Ich nehme das vorletzte Byte und Xore es mit dem Letzten ( = Letztes Byte jetzt im Klartext)
Ich nehme das vorvorletzte Byte und Xore es mit dem vorletzten ( = Vorletztes Byte jetzt im Klartext)
Ich nehme das vorvorvorletzte Byte und Xore es mit vorvorletzten ( = Vorvorletztes Byte im Klartext)
...
Bis ich beim ERSTEN Byte angekommen bin. Das wiederum Xore ich mit dem Key ( = Ganze Section entschlüsselt)

Das ganze habe ich in Assembler geschrieben:

(Alle $1100.. und $00 Adressen werden nacher durch echte Adressen ersetzt)
Delphi-Quellcode:
asm

                MOV eax, $11000000 // ENDE der Section ImageBase + V.Addr + V.Size
                MOV edx, $11000000 // Echter EntryPoint
                DEC eax // Einen Runter

         @loop: CMP eax, $11000000 // Wenn gößer als der START Imagebase + V.Addr
                JE @lastbyte // Wenn gleich dann Springen

                  DEC eax //Zum Byte davor gehen
                  MOV ecx, [eax] //Byte Davor speichern
                  INC eax //Wieder zu dem noch verschlüsselten zurück
                  XOR [eax], ecx //Mit ECX entschlüsseln

                  DEC eax // Wieder aufs vorige Byte zurück
                  JMP @loop

     @lastbyte: XOR [eax], $00 // Letztes byte mit Key entschlüsseln
                JMP edx // Zum Echten Entry Point springen
end;
Das Funktioniert aber leider nicht. Die Exe ist nacher beschädigt

Hat Irgendjemand ein wenig Ahnung von Assembler und kann mir sagen was ich dort falsch mache?

Die Idee dahinter funktioniert. Ich habe die verschlüsselte Datei mal nacher mit einem "Zeile für Zeile von ASM nach Delphi"-Code entschlüsselt.
Ergebnis: Exe funktioniert. (Ich benutze ein in Delphi geschriebenen Pizza-Timer )

Hier ist der "Zeile für Zeile von ASM nach Delphi"-Code:
Delphi-Quellcode:
                eax := SecEnd; // ENDE der Section ImageBase + V.Addr + V.Size
                Dec(eax);

          loop: if eax = SecStart then // Wenn gößer als der START Imagebase + V.Addr
                  goto lastbyte; // Wenn gleich dann Springen

                  Dec(eax); //Zum Byte davor gehen
                  ecx := FileData[eax]; //Byte Davor speichern
                  Inc(eax); //Wieder zu dem noch verschlüsselten zurück
                  FileData[eax] := FileData[eax] XOR ecx; //Mit ECX entschlüsseln

                  Dec(eax); // Wieder aufs vorige Byte zurück
                  goto loop;

    lastbyte: FileData[eax] := FileData[eax] XOR Magic; // Letztes byte mit Key entschlüsseln
Wie gesagt hier gings nur darum die Funktion des ASM exakt nachzubilden.
Aber es funktioniert.

Jetzt meine Frage:

Was macht mein "Wannabe"-ASM Code richtig, was mein echter ASM Code falsch macht?

Geändert von Xen (27. Jun 2011 um 20:04 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.336 Beiträge
 
Delphi 12 Athens
 
#5

AW: Simpler PE-Crypter

  Alt 27. Jun 2011, 22:03
Wenn du deine beiden Ver-/Entschlüsselungscodes in Funktionen verpackst, dann kannst du sie ganz einfach mal nacheinander im Delphi-Debugger über einen Speicherblock jagen und schauen was wann warum schief läuft.

PS:
Delphi-Quellcode:
DEC eax //Zum Byte davor gehen
MOV ecx, [eax] //Byte Davor speichern
INC eax //Wieder zu dem noch verschlüsselten zurück
XOR [eax], ecx //Mit ECX entschlüsseln
Delphi-Quellcode:
MOV ecx, [eax-1] //Byte Davor speichern
XOR [eax], ecx //Mit ECX entschlüsseln

Wobei du auch von vorne nach hinten gehn kannst.

Delphi-Quellcode:
eax := Startposition
temp := Startwert
loop:
temp2 := [eax]
[eax] := [eax] xor temp
temp := temp2
inc eax
goto loop


PPS: dein Vorgehen ist sogar noch unsicherer
denn alles, bis auf das erste Byte kann ohne Kenntnis des Startwertes (der Verschlüsselung) entschlüsselt werden, da man den Startwert der Entschlüsselung kennt.

OK, bei einer so einfachen Verschlüsselung mit einem 1 Byte-Schlüssel braucht man eh nur durchschnittlich 128 Versuche und man hat es auch so entschlüsselt.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (27. Jun 2011 um 22:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#6

AW: Simpler PE-Crypter

  Alt 28. Jun 2011, 10:26
"Das Funktioniert aber leider nicht. Die Exe ist nacher beschädigt"

Das kann zunächst einmal an folgendem liegen:

1. du packst in EDX die absolute Adresse rein - du solltest aber mit Relativen arbeiten -> ImageBase + relative Adresse
Da die ImageBase von Windows PE Loader geändert werden kann und somit die Image an einem ganz anderen Ort liegt

2. fügst du deinen Stub wirklich in ein Cave und überschreibst keine wichtigen Daten bzw. hat es so funktioniert, wie du es von meinem Tutorial übernommen hast?!
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton (11. Aug 2014 um 17:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Simpler PE-Crypter

  Alt 28. Jun 2011, 10:45
Da die ImageBase von Windows PE Loader geändert werden kann und somit die Image an einem ganz anderen Ort liegt
Was aber bei einer Exe sehr unwahrscheinlich ist.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 08:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz