Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   .dll programmierung und endlosschleife (https://www.delphipraxis.net/46851-dll-programmierung-und-endlosschleife.html)

Arnulf 1. Jun 2005 17:39


.dll programmierung und endlosschleife
 
hallo
Ich hab wenig Erfahrung mit .dll programmierung.
wie ich das verstehe wird eine .dll vom prozess geladen und damit auch ausgeführt.
Jetzt will ich aber keine prozeduren in der .dll benutzen sondern eine abfrage in einer endlosschleife laufen lassen.
Ich hab das mal so gemacht :

Delphi-Quellcode:
var tid: cardinal;
begin
  BeginThread(nil,0,@schleife,nil,0,tid);
end.
in schleife läuft jetzt eine endlosschleife.
Ja ich vermute es wird einige geben die mich für wahnsinnig halten lol - aber ich weiß ja nicht wie man sowas sonst machen könnte - darum frag ich ja :)

Arnulf

c113plpbr 1. Jun 2005 19:54

Re: .dll programmierung und endlosschleife
 
Zitat:

Zitat von Arnulf
hallo
Ich hab wenig Erfahrung mit .dll programmierung.
wie ich das verstehe wird eine .dll vom prozess geladen und damit auch ausgeführt.

Soweit so gut ...
Zitat:

Zitat von Arnulf
Jetzt will ich aber keine prozeduren in der .dll benutzen sondern eine abfrage in einer endlosschleife laufen lassen.

Was frägst du denn ab? Vielleicht gibts ja auch eine bessere lösung?!?
Zitat:

Zitat von Arnulf
Ich hab das mal so gemacht :

Delphi-Quellcode:
var tid: cardinal;
begin
  BeginThread(nil,0,@schleife,nil,0,tid);
end.

Eine weise Entscheidung eine Endlosschreife in einem eigenen Thread laufen zu lassen ...
Zitat:

Zitat von Arnulf
in schleife läuft jetzt eine endlosschleife.
Ja ich vermute es wird einige geben die mich für wahnsinnig halten lol - aber ich weiß ja nicht wie man sowas sonst machen könnte - darum frag ich ja :)

Dann erzähl doch mal was du in dieser schleife abfrägst ...

ciao, Philipp

Arnulf 1. Jun 2005 20:50

Re: .dll programmierung und endlosschleife
 
Delphi-Quellcode:
Vielleicht gibts ja auch eine bessere lösung
es gibt sogar sicher eine besser methode, aber soweit bin ich wohl noch nicht bzw. weiß ich nicht wo ich mich da einlesen könnte - bisher hab ich nur meine theorien wie das alles funktioniert :).
aber ich lerne...

Im prinzip verwende ich die isHooked funktion von uall um die opengl32.dll library zu überprüfen.

Ich würde das lieber von ausserhalb machen und nicht in einer library, aber das ganze projekt wächst mir schon über den kopf :).

demnach schaut derzeit die ganze library so aus:

Delphi-Quellcode:
procedure schleife;
var msgid : UINT;
begin
   msgid := RegisterWindowMessage('d02176e0-bc06-11d9-9669-0800200c9a66');
  while true do
        begin
        if uallprotect.IsHooked('opengl32.dll','glBegin')
        then begin
             PostMessage (HWND_BROADCAST, msgid, 0, 0);
             sleep (5000);
             end;
  sleep (3000);
  end;
end;
Und mich nicht für verrückt halten, weil ich ständig sourcen für einen anticheat poste, aber das projekt hab ich gestartet um delphi zu lernen - und plötzlich verwenden das so viele leute ... jetzt komm ich irgendwie in stress und das noch privat lol :) und echte hacker hält das auch nicht auf, nur die ganzen customer cheats verhindert der - dafür aber ziemlich gut inzwischen.

Danke
Arnulf

brechi 1. Jun 2005 21:00

Re: .dll programmierung und endlosschleife
 
du kannst das IsHooked auch external machen
dafür musst du dir nur die DLLs listen lassen und mit ReadProcessMemory einfach die dll in deinen speicher kopieren, dann noch die eigene opengl32.dll laden und vergleichen

das ist eigentlich nicht so schwer, dann brauchste keine eigene dll injezieren

wenn du das aber so machen willst musst du nen eigenen thread erstellen, ob nu BeginThread oder CreateThread ist bei einer dll in der dllmain egal
du musst einen thread erstellen da ansonsten solange gewartet wird bis dllmain aufgerufen wurde und das ist in einer endlosschleife extrem lang ;> d.h. das spiel würde dann nicht weiterlaufen

Arnulf 1. Jun 2005 23:39

Re: .dll programmierung und endlosschleife
 
hi
Zitat:

du musst einen thread erstellen
also war es doch nicht so blöd was ich gemacht hab :) - dachte schon mich werden jetzt viele schimpfen lol.

Zitat:

du kannst das IsHooked auch external machen
Das ist mir vollkommen klar.
Nur - wie bekomm ich den Speicherbereich einer .dll in einem anderen Prozess?
Mit ReadMemory brauch ich ja die Adresse.
Hier fangts an interessant zu werden hoffe du hilft mir dabei. Du hast mir den tip schon mal gegeben glaub ich, aber leider hab ich in der Richtung nicht viel in Erfahrung gebracht :(

Arnulf

barf00s 2. Jun 2005 07:53

Re: .dll programmierung und endlosschleife
 
wenn deine dll da geladen iss und die function da läuft, dann müllt die ja sämtliche windowprocs mit deiner msgid voll, reichts da nich ein send/postmessage an ein bestimmtes fenster? </lautdenk>

Arnulf 2. Jun 2005 08:21

Re: .dll programmierung und endlosschleife
 
ja sicher - aber das ist egal weil er sowieso vom server fliegt und damit das spiel beendet wird.
aber ich würde sowieso gerne von der methode weg und das lieber so machen wie brechi gesagt hat.
soll ich dafür einen eigenen thred aufmachen? oder kann mir jemand hier erklären wie man das machen würde?

Ich hoffe jemand hilft mir hiermit :)

Arnulf

barf00s 2. Jun 2005 08:34

Re: .dll programmierung und endlosschleife
 
was willst du eigentlich machen?

nen wallhack für cs kammer sich einfacher zusammenbasteln als die opengl32.dll "so" dermaßen zu injecten :chat:

Arnulf 2. Jun 2005 09:15

Re: .dll programmierung und endlosschleife
 
lol - wallhack für cs :)
nein cs interessiert mich nicht.
Und du hast vollkommen recht man kann sich einfacher wallhacks machen - auch andere hacks sind nicht so schwer.
Aber wirklich schwer wirds wennst einen anticheat machen willst :).
aber ich will mal wenigstens weiter im kontext bleiben und versuchen rauszubekommen wie man eine in einem anderen prozess geladene .dll einliest und mit der originalen vergleicht.

comparemem wirds wohl werden wenn ich mal für beide einen pointer hab lol :)

Arnulf

barf00s 2. Jun 2005 09:34

Re: .dll programmierung und endlosschleife
 
aaaaaaja - ja ne is klaa ^^

Arnulf 2. Jun 2005 10:49

Re: .dll programmierung und endlosschleife
 
hm... - willst du mir nicht glauben? - oder mir nicht helfen?
http://www.brothers-of-death.de/incl...php&themeid=15

Arnulf

Arnulf 2. Jun 2005 12:30

Re: .dll programmierung und endlosschleife
 
ok das ist eh wieder off topic
das was ich mit der .dll gemacht hab ist also durchaus in Ordnung und in dem sinn korrekt zumindestens laut den aussagen hier :)

fals jemand den thread wegen dem offtopic zeug findet hier der link zur eigentlichen frage dazu:
http://www.delphipraxis.net/internal...=376037#376037
Arnulf

brechi 2. Jun 2005 13:59

Re: .dll programmierung und endlosschleife
 
vielleicht helfen dir die funktionen weiter:

Delphi-Quellcode:
function GetModuleVirtualSize(dllh: integer): integer; stdcall;
var IDH: PImageDosHeader;
    INH: PImageNtHeaders;
begin
  result := 0;
  IDH := pointer(dllh);
  if IDH^.e_magic = IMAGE_DOS_SIGNATURE then
  begin
    INH := pointer(dllh+integer(IDH^._lfanew));
    if INH^.Signature = IMAGE_NT_SIGNATURE then
      result := INH^.OptionalHeader.SizeOfImage;
  end;
end;

function GetModuleOffset(dlln, processname: string): integer; stdcall; overload;
begin
  result := GetModuleOffset(dlln,FindProcess(processname));
end;

function GetModuleOffset(dlln: string; pid: integer): integer; stdcall; overload;
var FSnapshotHandle: THandle;
    FModuleEntry32: TModuleEntry32;
    ContinueLoop: BOOL;
begin
  result := 0;
  if (pid <> 0) then
  begin
    FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pid);
    FModuleEntry32.dwSize := Sizeof(FModuleEntry32);
    ContinueLoop := Module32First(FSnapshotHandle,FModuleEntry32);
    while ContinueLoop do
    begin
      if pos(uppercase(dlln),uppercase(FModuleEntry32.szModule)) > 0 then
        result := FModuleEntry32.hModule;
      ContinueLoop := Module32Next(FSnapshotHandle,FModuleEntry32);
    end;
    CloseHandle(FSnapshotHandle);
  end;
end;
für die mittlere brauchste die uallProcess unit
kommt auch alles in das nächste update rein

um das nu für einen anderne process zu machen mussu halt den header $1000 bytes von dme prozess einfach bei dir reinladen und dann GetModuleSize darauf aufrufen dann weißte wie groß die dll ist danach kannste die ganz kopieren und vergleichen

beim vergleichen aber nur die sections nehmen die nicht writable sind
ausserdem muss der virtualsize von deiner opengl32 geladenen dll mit der von dem spiel übereinstimmen

kannst ja mal bischen testen


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