Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi WinSocket Buffer richtig angeben? (https://www.delphipraxis.net/68493-winsocket-buffer-richtig-angeben.html)

DarkPressure 30. Apr 2006 16:02


WinSocket Buffer richtig angeben?
 
Hallo erstmal,
Habe mal wieder ein Problem.
Ich möchte über eine (injected) DLL ein WinSocketSend ausführen.
Dazu muss ich von meinem Programm erst Speicher im Zielprogramm sichern und meine Daten reinschreiben (den Buffer).
Läuft momentan so ab:
Delphi-Quellcode:
Uses madRemote;
..
    Lenge := 4 + Length(Unit1.Name) + 3 + Length(Edit1.Text) + 1;
    for Long := 1 to Length(Unit1.Name) do
    begin
    NewName := NewName + IntToHex(ord(Unit1.Name[Long]), 2);
    end;
    for Long2 := 1 to Length(Edit1.Text) do
    begin
    NewText := NewText + IntToHex(ord(Edit1.Text[Long2]), 2);
    end;
    SollBuffer := Pchar('F3001000' + NewName + '203A20'+ NewText + '00');
    Place := AllocMemEx(Lenge, Unit1.PID);
    Proc := OpenProcess(PROCESS_VM_WRITE, False, Unit1.PID);
    WriteProcessMemory(Proc, Place, SollBuffer, Lenge, BytesWritten);
    CloseHandle(Proc);
    FreeMemEx(Place, Proc);
..
Der SollBuffer besteht nur aus HexWerten und das ist falsch.
Die HexWerte müssen in ein konformes Format umgewandelt werden, hat da jemand ne Idee?

DarkPressure 30. Apr 2006 18:33

Re: WinSocket Buffer richtig angeben?
 
Falls es hilft, so soll es eingesetzt werden in der DLL
Programm schickt:
Delphi-Quellcode:
    if AskRO(IntToStr(Socket) + '§' + IntToStr(Integer(Place)) + '§' + IntToStr(Lenge) + '§' + IntToStr(Flags)) = True then
    FreeMemEx(Place, Proc);
Angenommen und eingesetzt so:
Delphi-Quellcode:
procedure GetMsgFromEXE(name      : pchar;
                        messageBuf : pointer; messageLen : dword;
                        answerBuf : pointer; answerLen : dword); stdcall;
begin                                  
  // this code has to be thread safe!
    Stringarray := Explode('§', pchar(messageBuf));
    Send(StrToInt(Stringarray[0]), Pointer(Stringarray[1]), StrToInt(StringArray[2]), StrToInt(StringArray[3]));
    boolean(answerBuf^) := True;
end;

DarkPressure 4. Mai 2006 19:04

Re: WinSocket Buffer richtig angeben?
 
Mitllerweile weiß ich das ich den Hex String Byte für Byte also z.b. 01 nächster 00 in den Speicher schreiben muss.
Kann mir mal jemand da aushelfen wie ich das anstellen kann?


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