AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Rendering context opengl
Thema durchsuchen
Ansicht
Themen-Optionen

Rendering context opengl

Ein Thema von Arnulf · begonnen am 22. Apr 2005 · letzter Beitrag vom 28. Apr 2005
 
Arnulf

Registriert seit: 28. Okt 2004
Ort: Wien
271 Beiträge
 
#10

Re: Rendering context opengl

  Alt 24. Apr 2005, 23:01
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
  Mit Zitat antworten Zitat
 


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 21:43 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