![]() |
Wie kann man einen Loader programmierern?
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:
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?
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. Vielleicht hat jemand ein Beispiel für mich? :love: 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. |
Re: Wie kann man einen Loader programmierern?
Erweitere
Delphi-Quellcode:
und
NewData : array[0..1] of byte = ($90,$90);
Delphi-Quellcode:
einfach. Z. B. für 4 Bytes:
Olddata : array[0..1] of byte;
Delphi-Quellcode:
und
NewData : array[0..3] of byte = ($90,$90,$90,$90);
Delphi-Quellcode:
Olddata : array[0..3] of byte;
|
Re: Wie kann man einen Loader programmierern?
Das wusste ich auch schon, es geht mir aber dadrum:
Delphi-Quellcode:
An dieser Stelle wird aber nur ein Offset geändert, ich würde aber gerne mehrere Stellen ändern.
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 |
Re: Wie kann man einen Loader programmierern?
Liste der Anhänge anzeigen (Anzahl: 1)
Siehe Anhang.
[edit] Paar Fehler korrigiert. [/edit] |
Re: Wie kann man einen Loader programmierern?
:love: Danke schön.
Deiner Funktion nach, könnte ich jetzt soviele ALoaderList einfügen wie ich will, oder? |
Re: Wie kann man einen Loader programmierern?
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].
|
Re: Wie kann man einen Loader programmierern?
Liste der Anhänge anzeigen (Anzahl: 1)
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. |
Re: Wie kann man einen Loader programmierern?
Liste der Anhänge anzeigen (Anzahl: 1)
Sorry, Flüchtigkeitsfehler, aber gut, das du mir die EXE deschickt hast. Jetzt gehts.
|
Re: Wie kann man einen Loader programmierern?
:love: Danke, jetzt funktioniert alles ohne Probleme
|
Re: Wie kann man einen Loader programmierern?
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? :love: Danke Uc |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 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