Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Datei im Ram entschlüsseln (https://www.delphipraxis.net/118261-datei-im-ram-entschluesseln.html)

napsterxx 4. Aug 2008 10:33


Datei im Ram entschlüsseln
 
Hallo liebe Delphifreunde,
Ich bin gerade dabei ein Verschlüsslungsprogramm zuschreiben bei welcher der Benutzer die verschlüsselungsart auswählen kann und gleichzeitig mehrere Dateien encrypten kann. Das funktioniert auch prima. Ein freund meinte, es wäre cool wenn man es auch so machen könnte das die verschlüsselte datei in den Ram geladen wird und sich dort selbst entschlüsselt und dann entschlüsselt auf die Festplatte kopiert?!?

Also ich weis nichtmal ob das geht :D aber zumindest klingt es gut ^^
Ich bin mir zwar nicht sicher aber ich denke wenn überhaupt geht es so:
Verschlüsselte Datei an einen Decrypter anhängen
Decrypter in den Ram laden
Decrypter entschlüsselt die angehängte Datei im ram
Decrypter kopiert die nun entschlüsselte Datei auf die platte
nachricht an user

mkinzler 4. Aug 2008 10:36

Re: Datei im Ram entschlüsseln
 
Sollte mit einem Stream gehen

napsterxx 4. Aug 2008 10:59

Re: Datei im Ram entschlüsseln
 
Filestream oder?

Die Muhkuh 4. Aug 2008 11:44

Re: Datei im Ram entschlüsseln
 
TMemoryStream

MrKnogge 4. Aug 2008 12:48

Re: Datei im Ram entschlüsseln
 
Und was ist dazu der Unterschied Zur bisherigen Vorgehensweise ?

napsterxx 4. Aug 2008 13:03

Re: Datei im Ram entschlüsseln
 
Das die Datei im Ram gestartet wird. Ich weis auch nicht sogenau für was das nützlich sein soll. Also Entschlüsseln klappt. Ich habe die Datei in einem Stream, wie starte ich die nun im Ram?

mkinzler 4. Aug 2008 13:05

Re: Datei im Ram entschlüsseln
 
Ein MemoyrStream liegt im Speicher

MrKnogge 4. Aug 2008 13:21

Re: Datei im Ram entschlüsseln
 
Ob du nun die Datei einliest und entschlüsselst speicherst, oder einlist, entschlüsselt in den Ram legst und von dort aus speichert ist somit das gleiche.

Was meinst du mit "in den Ram starten" ?

Zacherl 4. Aug 2008 13:25

Re: Datei im Ram entschlüsseln
 
Er meint einen Crypter / EXE Packer ums mal auf den Punkt zu bringen.

napsterxx 4. Aug 2008 13:30

Re: Datei im Ram entschlüsseln
 
Sowas wie UPX bloß halt schneller und mi na GUI das man gleich ein ganzen Ordner verschlüsseln kann und wenn man möchte einzelne Dateien beim starten entschlüsseln. Also das die eigene EXE geschützt ist, das niemand mt Olly so ohne weiteres da ran rumwerken kann

napsterxx 12. Aug 2008 11:46

Re: Datei im Ram entschlüsseln
 
:( Also ich habe nun die entschlüsselte Datei als TMemoryStream vorliegen ... und jetzt?

helgew 12. Aug 2008 12:22

Re: Datei im Ram entschlüsseln
 
Etwas aus dem Speicher ausführen? Nun da gibt es schon gewisse Probleme. Wenn das eine normale .exe sein soll, musst du das tun, was auch ein Starten aus dem System heraus machen würde: einen Prozess erzeugen, Umgebungsvariablen bereitstellen und dann die main() des Programmes ausführen. Man muss also irgendwie den Code direkt im ram vorliegen haben (oder eben nur den Einsprungpunkt für die main() finden). Am einfachsten müsste das mit einem prozeduralen Aufruf funktionieren, dazu erstellst du eine Variable eines prozeduralen Typs, setzt diesem die richtige Adresse ( Stream.Memory + Offset ) und rufst das ganze auf
( oder mit Assembler
PUSH EAX
MOV EAX, <address>
CALL EAX
POP EAX )
Bei 64bit-Systemen gibt es meines Wissens nach das NX-Flag "no execute", welches Codeausführung im Variablenspeicher verbietet, da musst du dann wirklich eine dll mitspeichern, aus dem Stream extrahieren, auf die Platte speichern und mit LoadLibrary zugänglich machen. Viel Spaß ;)

napsterxx 12. Aug 2008 12:25

Re: Datei im Ram entschlüsseln
 
Habe zwar kein Wort verstanden à la :wiejetzt: aber Danke :D

Zacherl 12. Aug 2008 15:15

Re: Datei im Ram entschlüsseln
 
Einfach mit CreateProcess (CREATE_SUSPENDED), GetThreadContext arbeiten, dann alle Sections der EXE im RAM auslesen, diese mittels WriteProcessMemory in den Zielprozess bringen und mittels ProtectMemory ausführbar machen. Dann nurnoch mit SetThreadContext den alten Context wieder setzen und den Mainthread des Prozesses mit ResumeThread wieder fortsetzen.

Gruß Zacherl

hboy 12. Aug 2008 15:59

Re: Datei im Ram entschlüsseln
 
@Zacherl du bringst es ja schon wieder auf den Punkt *g*

napsterxx 12. Aug 2008 17:59

Re: Datei im Ram entschlüsseln
 
Könnte meinen letzen Beitrag einfach duplizieren und anstelle von diesem hier benutzen :D

Ich suche mich einfach mal durch

OldGrumpy 12. Aug 2008 19:14

Re: Datei im Ram entschlüsseln
 
Warum nur lese ich in letzter Zeit immer häufiger Beiträge in denen Anfänger unbedingt Unternehmungen starten wollen, die weit jenseits ihrer Fähigkeiten und Kenntnisse liegen? Ich geh ja auch nicht hin und sag "heute besteig ich den Mount Everest, nächste Woche flieg ich dann auf den Mond". Na gut, sagen könnte ich das schon, aber realistisch wärs halt nicht :)

Wo sind nur meine Pillen...

Zacherl 12. Aug 2008 19:31

Re: Datei im Ram entschlüsseln
 
Diese Überschätzung wollte ich mit meinem Beitrag andeuten. Nichtsdesto trotz stimmen die Anweisungen, zu denen man auch bei einer Google Suche entsprechenden Code findet ..

napsterxx 13. Aug 2008 10:32

Re: Datei im Ram entschlüsseln
 
Anfänger ist relativ.
Es kommt doch immer darauf an mit was man sich schon beschäftigt hat und was nicht. Ich habe mit solchen Dingen noch nie zu tun gehabt, und das will ich ändern. Zudem will ich eigentlich keinen Code sondern es wirklich verstehen. Ich weis nicht für was dieses ganzen Fnktionen sein sollen. Zudem finde ich in der MSDN nur Beschreibungen was die einzelnen Parameter sind, aber irgendwie nicht wozu genau und was genau diese Funktion macht.

Zacherl 13. Aug 2008 13:25

Re: Datei im Ram entschlüsseln
 
Vielleicht wäre dann ein Beispielcode genau das richtige für dich, um die Funktionsweise zu verstehen. Die Funktionen der einzelnen APIs lassen sich ja eigentlich schon am Namen erkennen.

Such mal nach Nicos InMemExe!

Gruß Zacherl


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