Naja gut daß ihr euch einig seids
- oder auch nicht.
Jedenfalls ist das wirklich nicht leicht zu verstehen. - Bin hald ein anfänger in der Beziehung.
Abgesehen vom injizieren der .dll (das bring ich vielleicht mit codeschnipseln hin) ist ja das hooken von funktionen oder proceduren in der gdi32.dll das hauptproblem hier.
Leider finde ich zu dem thema nur cheats
für irgendwelche spiele und damit eben für opengl32.dll.
Das interessiert mich ned besonders und hilft mir dabei auch nicht recht weiter, weil die scheinbar keinen eigenen code verwenden, sondern nur grafiken verschwinden lassen (wände oder sowas).
trotzdem frag ich mich ob das auch für gdi32.dll funktionieren würde?
jedenfalls nehm ich mal so einen cheat her und bau den für mich um.....
mal sehen ob mir dabei jemand zu meinem ziel verhelfen kann
.
Delphi-Quellcode:
begin
if getmodulehandle(pchar('gdi32.dll')) > 0 then
begin
@oldldrgetprocaddress := getprocaddress(getmodulehandle(pchar('gdi32.dll')),pchar('LdrGetProcedureAddress'));
hookit(@oldldrgetprocaddress, @myldrgetprocaddress, ldrgetprocaddresssave);
end;
end.
Delphi-Quellcode:
function myldrgetprocaddress(h: integer; f: pmychar; o: integer;
var p: pointer): integer;
stdcall;
var buf:
array[0..255]
of char;
i: integer;
s:
string;
sp: tspeicher;
begin
ldrgetprocaddresssave.address^ := ldrgetprocaddresssave.save;
// unhook orig function
i := GetModuleFileName(h,@buf,sizeof(buf));
if (i > 0)
and (f <>
nil)
then
begin
s := f^.d+'
';
if pos(uppercase('
swapbuffers '),uppercase(s)) > 0
then
begin
p := getprocaddress(h,pchar('
swapbuffers'));
hookit(p,@myswapbuffers,sp);
result := oldldrgetprocaddressh,f,o,@swapbuffers);
end else result := oldldrgetprocaddress(h,f,o,p);
ldrgetprocaddresssave.address^ := ldrgetprocaddresssave.hook;
// hook orig function
end;
procedure hookit(fromfkt, tofkt: Pointer;
var save: tspeicher);
// hook a function
var
old: cardinal;
// old protect in memory
NewCode: tjumpcode;
// jump to my function
jump: ^array7;
// array to save
begin
virtualprotect(Fromfkt, 7, $40, @old);
// let me write in memory
save.address := Fromfkt;
// saves hooked address
Move(Fromfkt^, save.save, 7);
// saves 5 bytes of orig address
NewCode.bla1 := $55;
// asm hex code for a jump
newcode.bla2 := $5d;
NewCode.wo := integer(tofkt)-integer(fromfkt)-7;
// calculate address
newcode.jmp := $e9;
jump := @newcode;
// for save the jump
save.hook := jump^;
// save jump
Move(save.hook, Fromfkt^, 7);
// write jump to orig address
end;
procedure myswapbuffers();
begin
///////// mein screenshot wenn taste gedrückt oder sowas!
end;
Also das ist schon ein krasser hack oder?
Ich hab versucht das mal so halbwegs hinzubasteln - der code ist weder von mir noch sonstwas.
Der Creator ist beim originalen code nicht angegeben - hat wohl seinen grund
.
Jedenfalls hoffe ich, ich habs so halbwegs kapiert worum es hier geht.
Selbst wenn ich es damit so halbwegs hinbekommen könnte, muß ich doch zugeben, daß ich nur eine ahnung hab was hier alles passiert.
Ich würde das aber gerne genau verstehen, sonst hab ich von dem ganzen nichts und hab nur code geklaut - was mir allerdings nicht besonders liegt.
Bin ich mit dem zusammengebastelten code auf der richtigen spur? oder ist das alles nur unsinn und ich hab nix verstanden lol.
Ist wirklich nicht leicht das thema - was vermutlich auch gut so ist aber trotzdem würde ich das gerne verstehen.
Und versteht mich nicht falsch - code für cheats hab ich bei meinen recherchen genug gefunden, aber leider gibts nicht viel sinnvolles zu dem thema ...
Arnulf