AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi CreateRemoteThread, Was, Wie und Warum anwenden?
Thema durchsuchen
Ansicht
Themen-Optionen

CreateRemoteThread, Was, Wie und Warum anwenden?

Offene Frage von "Sfaizst"
Ein Thema von Sfaizst · begonnen am 10. Feb 2009 · letzter Beitrag vom 11. Feb 2009
Antwort Antwort
Sfaizst

Registriert seit: 16. Jun 2008
33 Beiträge
 
#1

CreateRemoteThread, Was, Wie und Warum anwenden?

  Alt 10. Feb 2009, 00:06
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
  Mit Zitat antworten Zitat
Sfaizst

Registriert seit: 16. Jun 2008
33 Beiträge
 
#2

Re: CreateRemoteThread, Was, Wie und Warum anwenden?

  Alt 11. Feb 2009, 16:38
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
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

Re: CreateRemoteThread, Was, Wie und Warum anwenden?

  Alt 11. Feb 2009, 16:48
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".
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

Re: CreateRemoteThread, Was, Wie und Warum anwenden?

  Alt 11. Feb 2009, 16:50
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 ..
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: CreateRemoteThread, Was, Wie und Warum anwenden?

  Alt 11. Feb 2009, 16:54
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."
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Sfaizst

Registriert seit: 16. Jun 2008
33 Beiträge
 
#6

Re: CreateRemoteThread, Was, Wie und Warum anwenden?

  Alt 11. Feb 2009, 17:09
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
  Mit Zitat antworten Zitat
Benutzerbild von ErazerZ
ErazerZ

Registriert seit: 27. Mai 2005
Ort: Baden
315 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: CreateRemoteThread, Was, Wie und Warum anwenden?

  Alt 11. Feb 2009, 17:34
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.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

Re: CreateRemoteThread, Was, Wie und Warum anwenden?

  Alt 11. Feb 2009, 18:15
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 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.
  Mit Zitat antworten Zitat
Sfaizst

Registriert seit: 16. Jun 2008
33 Beiträge
 
#9

Frage geklärt, danke für eure Hilfe

  Alt 11. Feb 2009, 21:04
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:42 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