Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Exe-Crypter (https://www.delphipraxis.net/134454-exe-crypter.html)

Linguini 22. Mai 2009 13:02


Exe-Crypter
 
//Ich hoffe mal das Thema darf hier behandelt werden...

Um das PE Format besser zu verstehen, dachte ich, ich versuche mich mal an einem .exe Crypter.

Einen einfachen XOR Crypter bekomme ich bereits hin...

Jedoch benutze ich dabei sehr viele PE Unit's die die meiste Arbeit machen...

Mich würde nun interessieren wie andere Crypter funktioniert.
Beispiel:
Ich habe einen String "Beispiel".
Nun vertausche ich die Buchstaben nach einem bestimmten Muster, dass z.B. : "spieielB" herauskommt.
So müsste es doch auch Möglichsein die OP Codes einen Programms in einen String zu speichern z.B.

inc eax,
dec edx
INC Byte ptr ds:[eax]

hat ja die Opcodes:

40 4A FE 00

So müsste es doch möglich sein, die OpCodes(Disassembly) in einen String einzulesen, und diesen dann wie oben das "Beispiel" auch zu vertauschen.
Danach muss man noch die Entschlüsselunsroutine anhängen(neue Section wäre wohl am klügsten? )
Und den EntryPoint umbiegen.

So in der Theorie klappt das wunderbar...
Nur praktisch fehlt mir ein Punkt an dem ich anfangen kann.

Tipps/Ratschläge/Verbesserungsvorschläge/Beispiele wären super =)

Linguini

Fridolin Walther 22. Mai 2009 13:37

Re: Exe-Crypter
 
Ich würde Dir ernsthaft empfehlen einfach mal selbst eine PE Unit zu schreiben, mit denen Du bestimmte Grundfunktionen implementierst (IAT, EAT, Sections enumerieren und editieren; Header auslesen und modifizieren). Zum einen weil die PE Unit die Du derzeit verwendest, einfach nur schlecht ist und zum anderen weil Du nicht lernst wie das PE Format aufgebaut ist, wenn Du fremde Sourcen änderst ;).

Ansonsten wäre das Anhängen einer neuen Section bzw. das Vergrößern der letzten Section der "Standardweg". Die anderen Sections kannst Du prinzipiell als "array of byte" sehen und entsprechend Deines "Vertauschalgorithmus" lustig die Bytes hin und her tauschen.

Ich sag aber gleich, daß sehr viele AV Programme Deine produzierten Dateien via Heuristik als infiziert flaggen werden.

Linguini 22. Mai 2009 14:03

Re: Exe-Crypter
 
Zitat:

Zitat von 0xF30FC7
Ich würde Dir ernsthaft empfehlen einfach mal selbst eine PE Unit zu schreiben, mit denen Du bestimmte Grundfunktionen implementierst (IAT, EAT, Sections enumerieren und editieren; Header auslesen und modifizieren). Zum einen weil die PE Unit die Du derzeit verwendest, einfach nur schlecht ist und zum anderen weil Du nicht lernst wie das PE Format aufgebaut ist, wenn Du fremde Sourcen änderst ;).

Ich werde das auf jedenfall mal machen. Auch wenn es sich (für mich) ziemlich schwer anhört.
Aber ich änder ja keine fremden Sourcecodes, ich verwende sie ja, um z.B. das finden einer Section oder ähnliches zu vereinfachen.
@Schlechte Pe Unit

Wie gesagt es sind ja mehrere, untPeFile,PEUtils,peformat
Eine davon wird wohl nicht schlecht sein :D


Zitat:

Zitat von 0xF30FC7
Ansonsten wäre das Anhängen einer neuen Section bzw. das Vergrößern der letzten Section der "Standardweg". Die anderen Sections kannst Du prinzipiell als "array of byte" sehen und entsprechend Deines "Vertauschalgorithmus" lustig die Bytes hin und her tauschen.

Das hört sich schonmal gut an.

Zitat:

Zitat von 0xF30FC7
Ich sag aber gleich, daß sehr viele AV Programme Deine produzierten Dateien via Heuristik als infiziert flaggen werden.

Ich hab ja keinenfalls vor, diese Programme damit zu schützen/verteilen :D. Mich treibt eher die Neugier an.

Delphi-Quellcode:
function FileToStr(const FileName:String):String;
var
Stream:TFileStream;
begin
Stream:=TFileStream.Create(FileName,fmOpenRead);
SetLength(result,Stream.Size);
Stream.Read(result[1],Stream.Size);
Stream.Free;
Wenn ich richtig liege, sollte sich doch jetzt die Datei als String in "result" befinden oder mach ich was falsch?

Und mir ist noch nicht ganz klar, wie ich die decrypt Routine in die Datei schreiben soll, ich muss ja den neuen EntryPoint und die StartDeCrypt und EndDeCrypt Adressen festlegen...

Danke für dein Hilfe.

Fridolin Walther 22. Mai 2009 14:15

Re: Exe-Crypter
 
Zitat:

Zitat von Linguini
Ich werde das auf jedenfall mal machen. Auch wenn es sich (für mich) ziemlich schwer anhört.

Es ist eigentlich recht einfach, sobald man einmal die Strukturen verstanden hat.

Zitat:

Zitat von Linguini
Delphi-Quellcode:
function FileToStr(const FileName:String):String;
var
Stream:TFileStream;
begin
Stream:=TFileStream.Create(FileName,fmOpenRead);
SetLength(result,Stream.Size);
Stream.Read(result[1],Stream.Size);
Stream.Free;
Wenn ich richtig liege, sollte sich doch jetzt die Datei als String in "result" befinden oder mach ich was falsch?

Komm von dem String Gedanken weg. Strings sind dafür völlig ungeeignet und je nach Delphi Version holst Du Dir damit jede Menge zusätzliche Effekte ins Boot, die Du so gar nicht möchtest. Benutz ein array of byte. Normalerweise benutzt man für die Modifikation von PE Dateien noch nicht mal irgendwelche Arrays, sondern den File Mapping Mechanismus von Windows.

Zitat:

Zitat von Linguini
Und mir ist noch nicht ganz klar, wie ich die decrypt Routine in die Datei schreiben soll, ich muss ja den neuen EntryPoint und die StartDeCrypt und EndDeCrypt Adressen festlegen...

Den Decryptor Stub packst Du Dir in ein Byte Array oder Record oder was auch immer, modifizierst die Adressen und schreibst ihn dann in die neu geschaffenen Platz innerhalb der "neuen" Executable.

mr_emre_d 22. Mai 2009 14:23

Re: Exe-Crypter
 
Lade dir mal den CFF Explorer runter.
Anfangs hat es mir sehr geholfen. Es sagt einem viel über die Struktur / Aufbau
einer PE-Datei (exe/dll).

MfG

TurboMartin 22. Mai 2009 14:49

Re: Exe-Crypter
 
Redet doch nicht immer um den Brei herum ;)

Fridolin Walther 22. Mai 2009 15:04

Re: Exe-Crypter
 
Ich hab ihm längst gesagt er soll ne eigene Unit fürs PE Format schreiben. Das man dazu die Dokumentation zum Format benutzt, versteht sich irgendwie von selbst wie ich finde.

Linguini 22. Mai 2009 15:15

Re: Exe-Crypter
 
@0xF30FC7

Ist es mit dem File Mapping Mechanismus auch möglich einfach Bytes hinundher zu verschieben?
Denn FileMapping, "mappt" ja eben immer nur einen Teil der Date (soweit ich weiß).
Delphi-Quellcode:
function Datei in Array(Filename: String): Cardinal; //von mr_emre_d
var
  myFile: File of Byte;
  RawFileData: TByteArr;
begin
 
  AssignFile( myFile, Filename );
  Reset( myFile );
  SetLength( RawFileData, FileSize( myFile ) );
  BlockRead( myFile, RawFileData[0], Length(RawFileData) );
  CloseFile( myFile );
Diese Funktion ließt jetzt eine Datei in ein Byte Array ein.
So dann befindet sich die Datei in "RawFileData".

Wie kann ich nun etwas mit den Bytes etwas "jonglieren".
Stringfunktion wie Insert etc. dürften da ja wohl eher nicht funktionieren oder :D?

Und ich werde auf jedenfall eine eigene PE Unit schreiben. Aber das braucht halt auch seine Zeit.



@mr_emre_d

Sehr interessantes Tool Danke =)

@TurboMartin

Also ich finde die Informationen bisher sehr nützlich.

brechi 22. Mai 2009 16:45

Re: Exe-Crypter
 
Hier mal eine Beispielimplementation:
http://uall.cheat-project.com/execrypt/execrypt1.3.txt

Assertor 22. Mai 2009 17:03

Re: Exe-Crypter
 
Hi brechi/ogc,

Zitat:

Zitat von brechi
Hier mal eine Beispielimplementation:
http://uall.cheat-project.com/execrypt/execrypt1.3.txt

Hast Du eigentlich den 1.5 Source nochmal irgendwo gefunden? Warst doch auf der Suche im Februar...

Gruß Assertor


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:50 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