![]() |
.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:
in schleife läuft jetzt eine endlosschleife.
var tid: cardinal;
begin BeginThread(nil,0,@schleife,nil,0,tid); end. 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 |
Re: .dll programmierung und endlosschleife
Zitat:
Zitat:
Zitat:
Zitat:
ciao, Philipp |
Re: .dll programmierung und endlosschleife
Delphi-Quellcode:
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 :).
Vielleicht gibts ja auch eine bessere lösung
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:
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.
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; Danke Arnulf |
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 |
Re: .dll programmierung und endlosschleife
hi
Zitat:
Zitat:
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 |
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>
|
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 |
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: |
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 |
Re: .dll programmierung und endlosschleife
aaaaaaja - ja ne is klaa ^^
|
Re: .dll programmierung und endlosschleife
hm... - willst du mir nicht glauben? - oder mir nicht helfen?
![]() Arnulf |
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: ![]() Arnulf |
Re: .dll programmierung und endlosschleife
vielleicht helfen dir die funktionen weiter:
Delphi-Quellcode:
für die mittlere brauchste die uallProcess unit
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; 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 12:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz