AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Wie kann man einen Loader programmierern?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie kann man einen Loader programmierern?

Ein Thema von Uncle Cracker · begonnen am 29. Nov 2003 · letzter Beitrag vom 30. Nov 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#1

Wie kann man einen Loader programmierern?

  Alt 29. Nov 2003, 14:46
Ich würde gern einen Loader programmieren, der mehr als nur 2 Byte patchen kann.

Ich habe dazu folgenden Code für einen Loader:

Delphi-Quellcode:
program loader;

uses
  Windows, Messages;

{$R Loader.RES}

var
  si : Startupinfo;
  pi : Process_Information;
  NewData : array[0..1] of byte = ($90,$90);
  NewDataSize : DWORD;
  Bytesread : DWORD;
  Olddata : array[0..1] of byte;
begin
 // ZeroMemory(@si,sizeof(si));
 // ZeroMemory(@pi,sizeof(pi));
 // FillChar(Si,Sizeof(si),0);
 // Si.cb:=Sizeof(si);

  NewDataSize := sizeof(newdata);
  IF CreateProcess(nil,'Example.exe',nil,nil,FALSE,
           Create_Suspended,nil,nil,si,pi) = true then

  begin
    ReadProcessMemory(pi.hprocess,Pointer($403CEA),@olddata,2,bytesread);
    if (olddata[0] = $75) and (olddata[1] = $19) then
    begin
      WriteProcessMemory(pi.hProcess, Pointer($403CEA), @NewData, NewDataSize, bytesread);
      ResumeThread(pi.hThread);
      CloseHandle(pi.hProcess);
      CloseHandle(PI.hThread);
    end else
    begin
      Messagebox(0,pchar('Bytes not found! Wrong version?...'),pchar('Error'),mb_iconinformation);
      TerminateProcess(PI.hProcess,0);
      CloseHandle(PI.hProcess);
      CloseHandle(PI.hThread);
    end;
  end;

end.
Jedoch patchet dieser nur einen Offset mit je zwei Bytes. Nun wollte ich wissen wie das geht das mehrere Bytes im Speicher gepatchet werden können?

Vielleicht hat jemand ein Beispiel für mich?


Danke UC


PS: Dieser Loader wird nicht für illegale Zwecke verwendet. Wollte ich nur noch mal klar stellen, nicht dass jemand etwas falsches denkt.
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#2

Re: Wie kann man einen Loader programmierern?

  Alt 29. Nov 2003, 14:50
Erweitere
NewData : array[0..1] of byte = ($90,$90); und
Olddata : array[0..1] of byte; einfach. Z. B. für 4 Bytes:

NewData : array[0..3] of byte = ($90,$90,$90,$90); und
Olddata : array[0..3] of byte;
  Mit Zitat antworten Zitat
Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#3

Re: Wie kann man einen Loader programmierern?

  Alt 29. Nov 2003, 15:28
Das wusste ich auch schon, es geht mir aber dadrum:

Delphi-Quellcode:
ReadProcessMemory(pi.hprocess,Pointer($403CEA),@olddata,2,bytesread);
    if (olddata[0] = $75) and (olddata[1] = $19) then
    begin
      WriteProcessMemory(pi.hProcess, Pointer($403CEA), @NewData, NewDataSize, bytesread);
      ResumeThread(pi.hThread);
      CloseHandle(pi.hProcess);
      CloseHandle(PI.hThread);
    end else
An dieser Stelle wird aber nur ein Offset geändert, ich würde aber gerne mehrere Stellen ändern.
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#4

Re: Wie kann man einen Loader programmierern?

  Alt 29. Nov 2003, 17:07
Siehe Anhang.

[edit]
Paar Fehler korrigiert.
[/edit]
Angehängte Dateien
Dateityp: dpr project2.dpr (2,1 KB, 15x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#5

Re: Wie kann man einen Loader programmierern?

  Alt 29. Nov 2003, 18:29
Danke schön.

Deiner Funktion nach, könnte ich jetzt soviele ALoaderList einfügen wie ich will, oder?
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#6

Re: Wie kann man einen Loader programmierern?

  Alt 29. Nov 2003, 19:16
genau. musst halt nur immer SetLength(ALoaderList, x) ändern und darunter entsprechend viele Einträge anlegen (Zählung beginnt, wie im Beispiel bei 0, also ALoaderList[0] bis ALoaderList[x-1].
  Mit Zitat antworten Zitat
Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#7

Re: Wie kann man einen Loader programmierern?

  Alt 29. Nov 2003, 19:34
Kann es sein, dass dein Loader irgendwie nicht richtig funktioniert, denn wenn ich die EXE-Datei patchen wilL (im Anhang), dann passiert gar nix, keine Meldung, einfach nix.

Der Offset ist $403CEA, olddata= $75, $19, Newdata $90,$90.
Vielleiht kannst du das mit deinem neuen Loader nochmal hinbekommen, mit der alten Version funktioniert alles.
Angehängte Dateien
Dateityp: rar example.rar (9,4 KB, 15x aufgerufen)
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#8

Re: Wie kann man einen Loader programmierern?

  Alt 29. Nov 2003, 20:30
Sorry, Flüchtigkeitsfehler, aber gut, das du mir die EXE deschickt hast. Jetzt gehts.
Angehängte Dateien
Dateityp: dpr project2_169.dpr (2,5 KB, 23x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#9

Re: Wie kann man einen Loader programmierern?

  Alt 30. Nov 2003, 01:29
Danke, jetzt funktioniert alles ohne Probleme
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat
Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#10

Re: Wie kann man einen Loader programmierern?

  Alt 30. Nov 2003, 02:40
Nochmal zum Loader, funktioniert alles super, doch leider möchte ich 82 Bytes patchen, die alle nacheinander kommen, doch ich habe keine Lust die 82 alle von Hand aus einzugeben. Ist es irgendwie möglich von einer bestimmten Stellen an, bis zu einer bestimmten Stelle alles zu patchen, indem ich einfach den Originalwert eingebe und dann den Wert, der entstehen soll.

Is das vielleicht irgendwie möglich?


Danke Uc
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:29 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