AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Speicher von fremden Programm ......
Thema durchsuchen
Ansicht
Themen-Optionen

Speicher von fremden Programm ......

Ein Thema von GOOFY009 · begonnen am 29. Nov 2009 · letzter Beitrag vom 29. Nov 2009
Antwort Antwort
GOOFY009

Registriert seit: 24. Okt 2009
20 Beiträge
 
#1

Speicher von fremden Programm ......

  Alt 29. Nov 2009, 17:55
auf eigene Procedure "umbiegen".

Hallo !

Ich habe das Topic mal hier rein gestellt. Falls es in dieser Rubrik falsch ist, bitte einfach verschieben.

Zum Problem :

Ich bin zur Zeit dabei einen C++ Code nach Delphi zu portieren und hatte hier vom Forum
schon einige Hilfe dafür bekommen (Delphi für Win32
D3D9 Hook bzw. als "proxy.dll"
.

Nun stehe ich vor einem neuen Problem. Hier erst einmal der C++ Source (in gekürzter Fassung) :
Delphi-Quellcode:
void InsertCodeCave()
{
   DWORD dwWritten;
   DWORD_PTR temp;
   unsigned char buf;

      buf = 0xe8;
      WriteProcessMemory(procHandle, (LPVOID)0xb1b5d3, &buf, 1, &dwWritten);
      temp = ((DWORD_PTR)asmCurrentIsland) - (0xb1b5d3 + 5);

}


void asmCurrentIsland()
{
   _asm mov ecx,[esi+0x20]
   _asm lea eax,[esi+0x20]
   _asm mov curIsland, edi
}
Ich habe ehrlich gesagt keinen "Dunst" wie ich das in Delphi umsetzten soll. Ich habe auch schon jede Menge über
WriteProcessMemory und ReadProcessMemory gelesen und das war auch soweit klar.

Aber hier wird wohl eine Sprungadresse und die eigen Procedure ins Ram kopiert und da steig ich momentan nicht durch.
Wer also eine Lösung parat hätte... immer her damit

Danke und CU
GOOFY
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#2

Re: Speicher von fremden Programm ......

  Alt 29. Nov 2009, 18:09
Du musst dir ne DLL schreiben und dann diese in den Prozess injezieren. (Suche: InjectLibrary)
Wenn die DLL dann im Speicher ist kannst du den OrignalCode mittels WriteProcessMemory (bzw direkt über Pointer) abändern.

In delphi kannst du den Assemblercode mit ASM END; nachbilden.
So wie es aussieht wird ein realitver Jump ($e8) gesetzt der dann zu deinem Code springt.

Ich glaube aber eher, dass du auch direkt das CurIsland auslesen aknnst (aus dem Speicher) ohne Code injezieren zu müssen. Sofern du nur Daten auslesen willst und nicht verändern willst.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.135 Beiträge
 
Delphi 12 Athens
 
#3

Re: Speicher von fremden Programm ......

  Alt 29. Nov 2009, 18:14
Delphi-Quellcode:
temp = Pointer(Integer(@asmCurrentIsland) - ($B1B5D3 + 5));

procedure asmCurrentIsland;
asm
  mov ecx, [esi+$20]
  lea eax, [esi+$20]
  mov curIsland, edi
end;
der Rest sollte einfacht sein ... es wird einfach nur ein Byte ( $E8 ) an eine bestimmte Stelle geschrieben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#4

Re: Speicher von fremden Programm ......

  Alt 29. Nov 2009, 18:18
wenn schon: $b1b5d3
Naja, es wird ein gekürzter Code sein...
Es macht doch nur sinn Wenn auch noch Temp geschrieben wird (nach dem $E8) -> die Berechnung ist ja ein relativer Jump. Der überschriebene Code wird wohl das mov und lea sein. Und irgendwie muss der dann ja auch wieder zurückspringen.
  Mit Zitat antworten Zitat
GOOFY009

Registriert seit: 24. Okt 2009
20 Beiträge
 
#5

Re: Speicher von fremden Programm ......

  Alt 29. Nov 2009, 19:36
Hi !

Danke an alle, für die schnellen Antworten !

temp = Pointer(Integer(@asmCurrentIsland) - ($B1B5D3 + 5)); Das hatte mir noch gefehlt und außerdem hatte ich die asmCurrentIsland Prozedure (anscheinend durchs viele Testen)
doppelt im Source. Einmal in meiner Klasse und einmal als globale Procedure, was letztlich auch einen falschen Rückgabewert
ergab.

Jetzt ist dieses Problem auch gelöst und weiter gehts.....

Danke nochmal an alle die geholfen haben.

CU GOOFY
  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 13:45 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