Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi CreateRemoteThread, Was, Wie und Warum anwenden? (https://www.delphipraxis.net/128954-createremotethread-wie-und-warum-anwenden.html)

Sfaizst 10. Feb 2009 00:06


CreateRemoteThread, Was, Wie und Warum anwenden?
 
Hallo allerseits

Schonmal danke für euere Hilfe und ja, ich habe die Forensuche und die MSDN genutzt.

Also, zuallererst einmal mein Problemfall:
Ich möchte in einem C++ gecodedem Spiel eine Funktion (d.h.: den Chat) aufrufen, so, dass ich z.B.: In meinem Programm einen String eingeben kann und diesen in des Spiel senden kann, so dass er dort angezeigt wird.

Meine bisherigen Infos:
Ich habe von einem anderem Spieler des Spiels gehört, das man dazu CreateProzessThread nutzen muss, ich habe bisher immer mit Read/WriteProzessmemory gearbeited.

Was ich über CreateProzessThread weiss:
Eigentlich nicht sonderlich viel, mein Englisch ist leider nicht mehr das beste und ich möchte ja keine Dll in den Prozess rein hauen, sondern eigentlich nur eine im Prozess schon vorhandene Funktion nutzen.
Habe schon mehrere Seiten Google und und die MSDN mehrfach zu dem Thema durchgelesen, auch die Forensuche hab ich intensiv genutzt, aber verstehen tu ichs doch noch nicht ganz.

Nun, wie funktioniert CreateProzessThread?

Ist die Funktion ähnlich wie Read/WriteProzessmemory?

Was mus ich von dem zu 'Hackendem' Spiel wissen (ausser den Handle)?,

Falls ich Pointer brauche also wie bei Read/Write Prozessmemory die Adressen im Arbeitsspeicher, wie finde ich diese raus (TSearch, Cheatengine?)

Danke für eure Hilfe und Informationen zu dem Thema

Mit freundlichen Grüßen

Sfaizst

Sfaizst 11. Feb 2009 16:38

Re: CreateRemoteThread, Was, Wie und Warum anwenden?
 
Hmm, da so wies scheint keinen gibt, der mir mit den Infos die ich gegeben habe / mir fehlen
was anfangen oder mir wirgentwie helfen kann, bitte ich, euch mal den Folgenden code anzugucken
und zu sagen, was ich denn falsch gemacht habe

Es ist nur ein versuch CreateProcessThread zu nutzen,
ended aber in einer AccessViolation im Zielprozess

Delphi-Quellcode:
var
pThreadStartRoutine: Pointer;
hThread, TID: Cardinal;
WriteStr : array [0..10] of AnsiChar;
NewStr : AnsiString;
begin
[...]
    NewStr := 'Hallo Welt';
    For i := 0 to Length(NewStr) do
    begin
    WriteStr[I] := NewStr[I+1];
    end;
    pThreadStartRoutine := ptr($4833A0);
    hThread := CreateRemoteThread(Pidhandle,nil,0,@pThreadStartRoutine,@WriteStr,0,TID);
[...]
end;
(Mit WriteProzessMemory konnte ich so ohne große Probleme in den Prozess einen String schreiben, warum geht dies nicht so bei CreateRenoteThread?)

Danke für eure Hilfe

MfG
Sfaizst

Namenloser 11. Feb 2009 16:48

Re: CreateRemoteThread, Was, Wie und Warum anwenden?
 
Zitat:

Zitat von Sfaizst
Code:
var
pThreadStartRoutine: [color=#ff0000][b]Pointer;[/b][/color]
[...]
    hThread := CreateRemoteThread(Pidhandle,nil,0,[b][color=#ff0000][u]@[/u]pThreadStartRoutine[/color][/b],@WriteStr,0,TID);
[...]

Ich schätze, da liegt das Problem. Lass das @ mal weg, und guck, ob es dann "funktioniert".

Zacherl 11. Feb 2009 16:50

Re: CreateRemoteThread, Was, Wie und Warum anwenden?
 
Logisch oder? Der String befindet sich ja noch in deiner Anwendung und nicht im Adressraum des Zielprozesses. Guck dir mal das Beispiel DLL Injection an. Dort wird auch mittels VirtualAllocEx und WriteProcessMemory zuerst der Pfad der DLL in den Zielprozess geschrieben und dann erst ein RemoteThread auf LoadLibraryA / W mit dem Pfad als entsprechenden Parameter gestartet.

€: Und ja das @ muss auch weg ..

Luckie 11. Feb 2009 16:54

Re: CreateRemoteThread, Was, Wie und Warum anwenden?
 
Also erstmal solltest du dir klar werden, was du überhaupt wissen willst. Mein Windows SDK kennt die Funktion CreateProcessThread nicht. Mein Windows SDK kennt nur die Funktion MSDN-Library durchsuchenCreateRemoteThread. So, wenn du dir darüber klar geworden bist, können wir weiter machen.

Und wenn du dir mal die Hilfe durchliest auch zu der anderen API-Funktion, die du immer erwähnst MSDN-Library durchsuchenWriteProcessMemory, dann beantworten sich deine Fragen von ganz alleine.

Um dir mal klar zu machen, was du da eigentlich fragst ein Beispiel aus dem Alltag: "Warum kann ich mit einem Korkenzieher keinen Nagel in die Wand schlagen? Mit einem Hammer habe ich das ganz einfach gekonnt."

Sfaizst 11. Feb 2009 17:09

Re: CreateRemoteThread, Was, Wie und Warum anwenden?
 
Sorry, wegen CreateProcessThread, ist natürlich CreateRemoteThread,
habs ohne @ probiert und das Programm ist diesmal nicht abgestürtzt, jedoch
kahm gar nichts an, also es gab im chatlogger keinerlei ausgabe

Ich hoffe ich habe die Funktion wenigstens im groben verstanden,

Das hier basiert auf einer Vermutung!, wie das funktioniren könnte:
Was ich machen möchte ist nicht eine neue Funktion/Procedure wie eine MessageBox in den Prozess zu schreiben sondern eine bereits vorhandene Funktion des Prozesses zu nutzen, bedeuted das nun nicht, das ich direkt CreateRemoteThread nutzen kann ohne einen neuen code in den Prozess zu schreiben???

In der msdn steht ja folgendes:

HANDLE WINAPI CreateRemoteThread(
__in HANDLE hProcess,
__in LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in SIZE_T dwStackSize,
__in LPTHREAD_START_ROUTINE lpStartAddress, //Adresse der Funktion?
__in LPVOID lpParameter, //Parameter, da dacht ich der zu sendende string?
__in DWORD dwCreationFlags,
__out LPDWORD lpThreadId
);

MfG
Sfaizst

Ps.: Falls ich das alles doch ganz falsch mit dem CreateRemoteThread verstanden hab entschuldigung

ErazerZ 11. Feb 2009 17:34

Re: CreateRemoteThread, Was, Wie und Warum anwenden?
 
Mit CreateRemoteThread erstellst du nur ein Thread in einem anderen Prozess. Du musst den string den du benutzen möchtest auch schreiben mittels WriteProcessMemory und dann wirst wahrscheinlich noch eine prozedur infizieren müssen damit das ordentlich ausgeführt wird.
Wenn das Spiel nicht 3D ist dann versuchs doch mal mit FindWindow/SendMessage, etc weil bei CreateRemoteThread musst du alles schreiben was du benutzen willst.

Zacherl 11. Feb 2009 18:15

Re: CreateRemoteThread, Was, Wie und Warum anwenden?
 
Zitat:

Zitat von Sfaizst
Das hier basiert auf einer Vermutung!, wie das funktioniren könnte:
Was ich machen möchte ist nicht eine neue Funktion/Procedure wie eine MessageBox in den Prozess zu schreiben sondern eine bereits vorhandene Funktion des Prozesses zu nutzen, bedeuted das nun nicht, das ich direkt CreateRemoteThread nutzen kann ohne einen neuen code in den Prozess zu schreiben???

Zitat:

Zitat von Zacherl
Der String befindet sich ja noch in deiner Anwendung und nicht im Adressraum des Zielprozesses. Guck dir mal das Beispiel DLL Injection an. Dort wird auch mittels VirtualAllocEx und WriteProcessMemory zuerst der Pfad der DLL in den Zielprozess geschrieben und dann erst ein RemoteThread auf LoadLibraryA / W mit dem Pfad als entsprechenden Parameter gestartet.

Für die Parameter der aufzurufenden Funktion benötigst du trotzdem noch WriteProcessMemory.

Sfaizst 11. Feb 2009 21:04

Frage geklärt, danke für eure Hilfe
 
Hallo,

Danke für dei Infos und eurer Hilfe, nach 3 Stunden dauerdenken hab ichs doch endlich kapiert, was ihr mir genau erzählt habt, so einige msdn und google zeilen hatts auch noch gekosted, aber dankeschön

Falls interesse an der Source besteht:

Delphi-Quellcode:

begin
[...]
  ChatPointer := VirtualAllocEx(pidHandle,0,62,(MEM_RESERVE or MEM_COMMIT), PAGE_READWRITE);
  WriteProcessMemory(Pidhandle,ChatPointer,@WriteStr,Length(ChatStr)+1,Write);
  hThread := CreateRemoteThread(Pidhandle,nil,0,VPointer,ChatPointer,0,TID);
   if hThread <> 0 then
    begin
     WaitForSingleObject(hThread, INFINITE);
     VirtualFreeEx(pidHandle, ChatPointer, 0, MEM_RELEASE);
    end Else
     VirtualFreeEx(pidHandle, ChatPointer, 0, MEM_RELEASE);
end;
Schönen Abend

Mit freundlichen Grüßen

Sfaizst


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