Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi exe zur lauzeit ändern... (https://www.delphipraxis.net/24329-exe-zur-lauzeit-aendern.html)

the_seed 19. Jun 2004 13:05


exe zur lauzeit ändern...
 
hi, habe bei nem trojaner gesehn das man die mithilfe von edit server eine bestehende exe ändern kann??? wie geht das?
das ich zb. eine exe hab wmoit ich eine andere ändern kann und die geänderten werte gesepichert werden ohne hilfe von externen files?

SirThornberry 19. Jun 2004 13:07

Re: exe zur lauzeit ändern...
 
es werden entweder nur mit Updateressource die ressourcen geändert oder die exe wird eben gepatcht. am einfachste ist dies in dem man zum beispiel konstanten setzt und dann mit hilfe des Hexeditors prüft an welcher stelle sich die Konstanten dann in der Kompilierten Exe befinden. Dann ist es auch kein Problem mehr an genau dieser stelle in der Exedatei die Zeischen (Konstante) zu ändern

the_seed 15. Jul 2004 15:00

Re: exe zur lauzeit ändern...
 
weiss den niemand eine möglichkeit ?
dass man die werte einer exe ohne externes file nach dem compilieren änder kann ???

Meflin 15. Jul 2004 15:02

Re: exe zur lauzeit ändern...
 
ähm das hat sir doch schon geschrieben. du musst das teil beenden, patchen und wieder starten. zum patchen musst du die binärcodes wissen und ändern. hast du schon mal die forumssuche bemüht?

the_seed 15. Jul 2004 15:35

Re: exe zur lauzeit ändern...
 
Zitat:

Zitat von Meflin
ähm das hat sir doch schon geschrieben. du musst das teil beenden, patchen und wieder starten. zum patchen musst du die binärcodes wissen und ändern. hast du schon mal die forumssuche bemüht?

ja hab ich !!
nur gibt es irgend ne möglichkeit die strings zu ändern ohne gleich die die hexwerte zu ändern !?

Meflin 15. Jul 2004 15:40

Re: exe zur lauzeit ändern...
 
nein die gibt es wohl eher nicht. sobald ein prog compiliert ist kannst du es als exe nur noch über dessen binärcode verändern, also praktisch das, was man mit einem hexeditor macht. dazu musst du die offset adresse der konstante wissen. zu beachten ist, dass der neue wert nie länger sein darf wie der alte, da sonst programmcode überschrieben wird, wenn du den rest nicht entsprechend mitänderst.

the_seed 15. Jul 2004 15:45

Re: exe zur lauzeit ändern...
 
Zitat:

Zitat von Meflin
nein die gibt es wohl eher nicht. sobald ein prog compiliert ist kannst du es als exe nur noch über dessen binärcode verändern, also praktisch das, was man mit einem hexeditor macht. dazu musst du die offset adresse der konstante wissen. zu beachten ist, dass der neue wert nie länger sein darf wie der alte, da sonst programmcode überschrieben wird, wenn du den rest nicht entsprechend mitänderst.

nein, gerade hat mir in einem delphi chan ein user erklärt das man mithilfe von streams daten dranhängen kann - dies abändern und lesen kann !!! ich blick da selber nicht durch er hat mir eine demo gegeben wenn ich es hinbekommen hab poste ich den source...

Rackergen2 15. Jul 2004 15:52

Re: exe zur lauzeit ändern...
 
Zitat:

Zitat von Meflin
sobald ein prog compiliert ist kannst du es als exe nur noch über dessen binärcode verändern

Falsch! Die Fenster sind bei Delphi feinsäuberlich als Ressource gespeichert... Manchmal verbessere ich noch Rechtschreibfehler mit dem PE Explorer...

Texte, die aber durch Programmcode geschrieben werden, lassen sich nur per Disassembler/Debugger (Ich bevorzuge letzteres) oder Hexeditor verändern...

Meflin 15. Jul 2004 15:53

Re: exe zur lauzeit ändern...
 
ja aber hier geht es wohl doch um konstanten und erzähl mir nicht die wären als resourcen gespeichert...

Rackergen2 15. Jul 2004 15:54

Re: exe zur lauzeit ändern...
 
Sind Komponenten keine Konstanten? Und du hast geschrieben, mann könne die EXE nur per Hexeditor verändern und müsse dann auf das und das achten. Ich habe es eben nur dementiert...

Sprich, es ging nicht um Konstanten sondern um die EXE allgemein... und zu den EXEn gehören eben auch Formulare...

Meflin 15. Jul 2004 15:55

Re: exe zur lauzeit ändern...
 
öhm nö das ist ne ganz andere baustelle. konstanten werden via const deklariert und lassen sich nie ändern, es sei denn eben über einen hexeditor.

Rackergen2 15. Jul 2004 15:58

Re: exe zur lauzeit ändern...
 
Zitat:

Zitat von Meflin
konstanten werden via const deklariert und lassen sich nie ändern, es sei denn eben über einen hexeditor.

Delphi-Quellcode:
const Variable: string = 'Text';
Die lässt sich zur Laufzeit sehr wohl ändern... Habe den text oben editiert, lies!

Meflin 15. Jul 2004 15:59

Re: exe zur lauzeit ändern...
 
ja und? beim nächsten start ists wieder der alte wert und darum gehts wohl hier.

The-X 15. Jul 2004 16:00

Re: exe zur lauzeit ändern...
 
Zitat:

Zitat von Rackergen2
Texte, die aber durch Programmcode geschrieben werden, lassen sich nur per Disassembler/Debugger (Ich bevorzuge letzteres) oder Hexeditor verändern...

:wiejetzt: mit einem DisAssembler/Debugger kannst du höchstens rasufinden wo diese Texte generiert werden, ändern aber im Normalfall nicht, jedenfalls ist mir kein Programm bekannt mit dem das möglich ist...

mit dem Debugger kannst du unter Umständen während der Laufzeit stellen im Code ändern :)

Alle Angaben ohne Gewähr :)

Und Stringkonstanten können über die ResourceString direktive (wie der Name schon sagt) in den Resourcen abgelegt werden, sonstige Konstanten werden AFAIK im Speicher im sog. Stackgegment gelagert und in der Exe itself zwischen Header und dem Programmeinsprungspukt gespeichert... bzw je nach Kompiler auch nach dem Code.

Luckie 15. Jul 2004 16:00

Re: exe zur lauzeit ändern...
 
Aber nur, wenn du
Zitat:

Assignable typed constant Enable this for backward compatibility with Delphi 1.0. When enabled, the compiler allows assignments to typed constants. Corresponds to
aktiviert hast. Diese Option führt aber meiner Meinung nach den Sinn von Konstanten ad adsurdum. :roll:

The-X 15. Jul 2004 16:02

Re: exe zur lauzeit ändern...
 
Zitat:

Zitat von Luckie
Diese Option führt aber meiner Meinung nach den Sinn von Konstanten ad adsurdum. :roll:

Sind auch eigentlich somit keine Konstanten mehr, sondern Variablen mit einem vordefinierten Wert ;)

Meflin 15. Jul 2004 16:04

Re: exe zur lauzeit ändern...
 
jaja aber Rackergen2 will uns hier nur das prinzip beweisen scheint mir auch wenns darum garnicht geht :roll:

the_seed 15. Jul 2004 17:08

Re: exe zur lauzeit ändern...
 
hier mal die logs ...
nachdem ich das problem gschildert habe...
Zitat:

[4:20] (the_seed) so
[4:20] (...) das erste strück hätt ich fertig - das ist zum anhängen - hoffe es geht - getestet hab ich nix
[4:20] (...) Type THead=Record
[4:20] (...) Ident:String[67];
[4:20] (...) <pack hier einfach deine konfigdaten rein - achte darauf das du strings immer begrenzt
[4:20] (...) du kannst strings auch unbegrenzt lassen - aber dann würde ich dir empfehlen
[4:20] (...) alle daten einzeln zu schreiben>
[4:20] (...) End;
[4:20] (...) Procedure TForm1.Modify(First,New:String);
[4:20] (...) Var F:TFileStream;
[4:20] (...) I:Integer;
[4:21] (...) Read:String;
[4:21] (...) Head:THead;
[4:21] (...) FileDef:Array Of TFileDef;
[4:21] (...) var
[4:21] (...) NumRead, NumWritten: Integer;
[4:21] (...) Buf: array[1..2048] of Char;
[4:21] (...) Buf2:String;
[4:21] (...) FromF,ToF:TFileStream;
[4:21] (...) begin
[4:21] (...) FromF:=TFileStream.Create(First,fmOpenRead or fmShareDenyNone);//der blanke server ohne cfg infos
[4:21] (...) ToF:=TFileStream.Create(New,fmCreate or fmShareDenyNone);//die neue datei (server+config)
[4:21] (...) ToF.CopyFrom(FromF,0);
[4:21] (...) begin
[4:21] (...) FromF:=TFileStream.Create(First,fmOpenRead or fmShareDenyNone);//der blanke server ohne cfg infos
[4:21] (...) ToF:=TFileStream.Create(New,fmCreate or fmShareDenyNone);//die neue datei (server+config)
[4:21] (...) ToF.CopyFrom(FromF,0);
[4:21] (...) Head.Ident:='Head Signatur';//wichtig damit du das ding wieder findest
[4:21] (...) Head.RunFirst:=Edit3.Text;
[4:21] (...) Head.RunSecond:=ExtractFileName(ComboBox1.Text);
[4:21] (...) Head.FileCount:=Form1.ListBox1.Items.Count;
[4:21] (...) ToF.Seek(0, soFromEnd);
[4:21] (...) ToF.Write(Head,SizeOf(Head));
[4:21] (...) ToF.Free;
[4:21] (...) FromF.Free;
[4:21] (...) end;
[4:24] (...) Procedure ReadConfig;
[4:24] (...) Var F:TFileStream;
[4:24] (...) Head:THead;
[4:24] (...) Begin
[4:24] (...) F:=TFileStream.Create(application.ExeName,fmShareD enyRead);//wie du siehst wird hier der server geöffnet
[4:24] (...) F.Seek(0,SoFromEnd);
[4:24] (...) F.Position:=F.Position-SizeOf(Head);//thead muss auch im server bekannt sein
[4:24] (...) F.Read(Head,SizeOf(Head));//fertig - die daten müssten nun zur verfügung stehen
[4:24] (...) F.Free;
[4:24] (...) End;
[4:24] (...) so
[4:24] (...) das ist für den server
[4:24] (...) zum auslesen der daten
[4:24] (...) das andere ist zum schreiben der daten
[4:25] (the_seed) wie kann ich aber auf die einzelnen werte zugreifenß
[4:25] (...) also hm du hast das dann ja in nem array
.[4:25] (the_seed) ok
[4:26] (the_seed) ich werds irgendwie hinkriegen... thx
[4:26] (...) ich hab hier das array head genannt - kannst du auch anders nennen - du kannst in den head array alles reinpacken was du willst
[4:26] (...) ich habs in der erste routine schon geschreiben wie du mit strings umgehen musst
[4:26] (...) weil strings ohne echtes ende sind nicht gut ^^
[4:27] (...) die musst du begrenzen mit [zahl] - oder du schreibst sie halt mit ner längenangabe rein - das ist aber aufwändig


Vjay 15. Jul 2004 17:20

Re: exe zur lauzeit ändern...
 
ssed was du da machst hat mit dem was du in deinem ersten post beschrieben hast NICHTS zu tun.

du hängst daten an die exe dran, genausogut kannst du die daten an eine jpeg-datei anhängen ;) das das geht ist doch logisch.

*edit: Und wie das geht dürfte den meisten auch geläufig sein.

PS strings mit unbegrenzter länge kannst du ganz einfach in streams schreiben indem du 4 byte mit der länge des strings vorweg schreibst und beim einlesen ausliest + mit setlength den string vorher setzt.

Allet klar?

the_seed 15. Jul 2004 17:25

Re: exe zur lauzeit ändern...
 
Zitat:

Zitat von Vjay
ssed was du da machst hat mit dem was du in deinem ersten post beschrieben hast NICHTS zu tun.

du hängst daten an die exe dran, genausogut kannst du die daten an eine jpeg-datei anhängen ;) das das geht ist doch logisch.

*edit: Und wie das geht dürfte den meisten auch geläufig sein.

PS strings mit unbegrenzter länge kannst du ganz einfach in streams schreiben indem du 4 byte mit der länge des strings vorweg schreibst und beim einlesen ausliest + mit setlength den string vorher setzt.

Allet klar?

warum? wenn ich die daten "in eine exe" schreibe, und sie verändern bzw. lesen kann ... kommt es doch auf das hinuas was ich anfnags wollte...
eine "zur laufzeit änderbare exe" wie bei den vielzähligen trojaner ... man benötigt nur noch einen "edit server".

Luckie 15. Jul 2004 17:28

Re: exe zur lauzeit ändern...
 
Bei deinem Ausgangsposting hat sich das so angehört, als wolltets du direkt Wertein der Exe ändern. Was fdu jetzt vorhast it ja nur ein Anhängen und Auslesen von Dateien.

the_seed 15. Jul 2004 17:30

Re: exe zur lauzeit ändern...
 
Zitat:

Zitat von Luckie
Bei deinem Ausgangsposting hat sich das so angehört, als wolltets du direkt Wertein der Exe ändern. Was fdu jetzt vorhast it ja nur ein Anhängen und Auslesen von Dateien.

ja, vielleicht hab ich mich falsch ausgedrückt :oops:
aber im endeffekt das gleiche :thuimb:

Vjay 15. Jul 2004 17:31

Re: exe zur lauzeit ändern...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Unter dem Gesichtspunkt dass hier schon genug gestritten wurde sage ich einfach mal: ja

*Edit*

PS ich hab vor einiger Zeit mal nen Stream an Datei-Anhänger gebastelt. Weiss aber nicht ob der 100% geht.
Es gibt 2 Funktionen 1x zum Lesen und 1x zum Schreiben. Eine Datei kann mehrere Streams enthalten die über ihren Namen angesprochen werden.

Und wie du deine Records / Klassen in die Streams bekommst musst du selber wissen / VCl-Benutzen.

Hoffe hilft dir weiter.

Luckie 15. Jul 2004 17:31

Re: exe zur lauzeit ändern...
 
Ist eben nicht das gleiche.

the_seed 15. Jul 2004 17:34

Re: exe zur lauzeit ändern...
 
Zitat:

hi, habe bei nem trojaner gesehn das man die mithilfe von edit server eine bestehende exe ändern kann??? wie geht das?
das ich zb. eine exe hab wmoit ich eine andere ändern kann und die geänderten werte gesepichert werden ohne hilfe von externen files?
hab doch nie was andres bahauptet

:mrgreen:

Meflin 15. Jul 2004 19:27

Re: exe zur lauzeit ändern...
 
tja aber um da ran zu kommen musst du die datei mindestens temporär extrahieren, also nicht ohne externe files. oder irre ich mich da?

the_seed 16. Jul 2004 12:11

Re: exe zur lauzeit ändern...
 
so, hab mich jetzt mal dahinter gemacht wie man streams an files anhängen kann - da ich es selber machen mmöchte :)
nur mein problem ist das wenn ich etwas anhänge dass das komplette file überschrieben wird - hab den source aus nem tut von delphi-source.de

Code:
type
Tsave = class(TForm)
    save: TButton;
    procedure saveClick(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  save: Tsave;

implementation

{$R *.dfm}
type
Tdatensatz=record
id:integer;
name:ansistring;
end;
tdatenarray = array of tdatensatz;

procedure Tsave.saveClick(Sender: TObject);
var
daten:tdatenarray;
stream:tstream;
i:integer;
len:longint;
begin
setlength(daten,2);
daten[0].id:=1;
daten[0].name:='ein name';
daten[1].id:=2;
daten[1].name:='ein andrer name';
stream:=tfilestream.create('c:\rechner.exe',fmcreate);
try
len:=length(daten);
stream.write(len,sizeof(len));

for i:= 0 to length(daten) - 1 do begin
stream.write(daten[1].id, sizeof(daten[i].id));
len:=length(daten[i].name);
stream.write(len, sizeof(len));
stream.write(pchar(daten[i].name)^,len);


end;
finally
stream.free;
end;
end;
end.
kann mir jmd helfen?

Luckie 16. Jul 2004 13:11

Re: exe zur lauzeit ändern...
 
Wie wäre es den Dateizeiger hinter deine Exe zu setzten, damit die Datei angehangen wird?


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