Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Aufruf einer Funktion per DLL Injektion, C++ nach Delphi (https://www.delphipraxis.net/135783-aufruf-einer-funktion-per-dll-injektion-c-nach-delphi.html)

MrLolli 17. Jun 2009 23:02


Aufruf einer Funktion per DLL Injektion, C++ nach Delphi
 
Hallo liebe DP Community,

ich bin noch recht frisch im Delphi Land, und beschäftige mich gerade mit dem Thema DLL Injektion und Funktionsaufrüfen per Assembler. Für den Zielprozess gab es hier glücklicherweise schon einen Beispielcode, allerdings in C++.

Folgendermaßen ist die Funktion in C++ deklariert:
Code:
int (*GetNumItems)() = ( int (*)() )0x004CCFD0;
Was mir klar ist:
Die Funktion gibt einen Integer Wert zurück, erwartet keinerlei Parameter und befindet sich im Zielprozess bei dem Offset 0x004CCFD0.
Was mir jetzt Probleme bereitet ist die Zieladresse der Funktion im Prozess (0x004CCFD0), welche ja in C++ hinten angebbar ist. Wie müsste ich die Funktion also in Delphi deklarieren, damit ich sie ebenfalls so leicht wie hier aufrufen könnte?
Code:
int NumItems = GetNumItems();
Ist mein Vorhaben in Delphi überhaupt möglich?

Ich bin schon jetzt für eure Hilfe dankbar.

Gruß
MrLolli

Aphton 18. Jun 2009 05:56

Re: Aufruf einer Funktion per DLL Injektion, C++ nach Delphi
 
Na klar:

Delphi-Quellcode:
type
  TEmptyFunc = function(): Integer;
var
  F: TEmptyFunc;
begin
  F := Pointer( $004CCFD0 );
  F;

jaenicke 18. Jun 2009 06:01

Re: Aufruf einer Funktion per DLL Injektion, C++ nach Delphi
 
Oder so, wobei die leeren Klammern am Ende nur sinnvoll sind um anzudeuten, dass das ein Funktionsaufruf ist, aber auch weggelassen werden können.
Delphi-Quellcode:
type
  TEmptyFunc = function(): Integer;
begin
  TEmptyFunc(Pointer($004CCFD0))();
// EDIT:
Ach ja: Das geht erst ab Delphi 2005 oder Delphi 2006, Delphi 7 und früher stürzt dabei beim Kompilieren ab. :mrgreen:

Fridolin Walther 18. Jun 2009 10:09

Re: Aufruf einer Funktion per DLL Injektion, C++ nach Delphi
 
Du weißt, daß die Entwicklung von World of Warcraft Bots den Blizzard Bestimmungen (und imho auch den Delphi Praxis Regeln) widerspricht, oder?

BUG 18. Jun 2009 10:18

Re: Aufruf einer Funktion per DLL Injektion, C++ nach Delphi
 
Zitat:

Zitat von 0xF30FC7
World of Warcraft Bots

Wo liest du denn das raus, aus den Adressen oder wurde da was wegeditiert :gruebel:

MfG,
Bug

jaenicke 18. Jun 2009 10:29

Re: Aufruf einer Funktion per DLL Injektion, C++ nach Delphi
 
Ich vermute er kommt von dieser Seite hier drauf, die ich so direkt bei Google gefunden habe...
http://www.elitepvpers.de/forum/wow-..._autofish.html
Zitat:

Code:
int (*GetNumLootItems)() = ( int (*)() )0x004CCFD0;

Wenn es sich um das Thema und Bots handelt, dann ist das Thema hier natürlich in der Tat fehl am Platze.

Fridolin Walther 18. Jun 2009 10:36

Re: Aufruf einer Funktion per DLL Injektion, C++ nach Delphi
 
Zitat:

Zitat von BUG
Zitat:

Zitat von 0xF30FC7
World of Warcraft Bots

Wo liest du denn das raus, aus den Adressen oder wurde da was wegeditiert :gruebel:

Ich bin ein äußerst wissbegieriger und paranoider junger Mensch. Wenn ich nen Spieleclient auf meinem Rechner installier, muss der reversed werden, weil ich ansonsten nicht ruhig schlafen kann. Daher kenn ich den Offset (zumal es ein recht prominenter Offset einer LUA Funktion innerhalb des WoW Clienten ist mit der man die Anzahl der zu lootenden Items ermittelt). Ansonsten kann man auch einfach den Offset googlen und findet sicher die ein oder anderen indizierten Header Dateien.

[EDIT]Jaenicke war schneller ... kann es sein das man den roten Kasten nicht bekommt, wenn man die Seite 10 Minuten geöffnet hat, in diesen 10 Minuten jemand geantwortet hat und man erst danach auf Reply drückt?[/EDIT]

Aphton 18. Jun 2009 11:41

Re: Aufruf einer Funktion per DLL Injektion, C++ nach Delphi
 
Zitat:

Zitat von 0xF30FC7
Zitat:

Zitat von BUG
Zitat:

Zitat von 0xF30FC7
World of Warcraft Bots

Wo liest du denn das raus, aus den Adressen oder wurde da was wegeditiert :gruebel:

Ich bin ein äußerst wissbegieriger und paranoider junger Mensch. Wenn ich nen Spieleclient auf meinem Rechner installier, muss der reversed werden, weil ich ansonsten nicht ruhig schlafen kann. Daher kenn ich den Offset (zumal es ein recht prominenter Offset einer LUA Funktion innerhalb des WoW Clienten ist mit der man die Anzahl der zu lootenden Items ermittelt). Ansonsten kann man auch einfach den Offset googlen und findet sicher die ein oder anderen indizierten Header Dateien.

Ja, und ? Was soll die Ausrede; denkst du das wird irgendetwas an der Hilfsbereitschaft der Community einem Bot.Programmierer ändern ?

Zitat:

Zitat von 0xF30FC7
[EDIT]Jaenicke war schneller ... kann es sein das man den roten Kasten nicht bekommt, wenn man die Seite 10 Minuten geöffnet hat, in diesen 10 Minuten jemand geantwortet hat und man erst danach auf Reply drückt?[/EDIT]

Nein, dass kann nicht sein - normalerweise ist der rote Kasten immer da

MfG

BUG 18. Jun 2009 11:56

Re: Aufruf einer Funktion per DLL Injektion, C++ nach Delphi
 
Zitat:

Zitat von Aphton
Ja, und ? Was soll die Ausrede; denkst du das wird irgendetwas an der Hilfsbereitschaft der Community einem Bot.Programmierer ändern ?

Fehler!
0xF30FC7 ist nicht der TE ... und das er weiß wie es geht heißt nicht das er es macht.

Der rote Kasten hat übrigens ab und zu Aussetzer.


MfG,
Bug

PS: Ich glaub es ist langsam Zeit das Thema zu schließen.

Satty67 18. Jun 2009 12:16

Re: Aufruf einer Funktion per DLL Injektion, C++ nach Delphi
 
Zitat:

Zitat von Aphton
Nein, dass kann nicht sein - normalerweise ist der rote Kasten immer da

Ich öffne von der Startseite interessante Themen in Tab's und lese die danach. Da kann es sein, das eine erste Antwort erst kommt, wenn mein Router getrennt hat. Denke wenn die Antwort mit neuer IP kommt, fehlt auch der rote Kasten.


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