![]() |
Re: Wie kann man einen Loader programmierern?
Moin UC,
dann nehme doch strings. Da kannst Du dann ja z.B. die Werte mit #nn angeben, wenn sie nicht darstellbar sind. |
Re: Wie kann man einen Loader programmierern?
:wiejetzt: Ich weiß nicht wie du das meinst
|
Re: Wie kann man einen Loader programmierern?
Moin UC,
ich meine, dass Du als Buffer einen String nehmen sollst:
Delphi-Quellcode:
Beim Lesen muss dann nur die Grösse initialisiert werden.
var
sBuffer : string; begin sBuffer := #$75#$19; // ggf. mehr WriteProcessMemory(...,...,@sBuffer[1],2,...); end; |
Re: Wie kann man einen Loader programmierern?
Ich habe das nochmal versucht so zu machen wie du, doch irgendwie will das nicht so richtig.
Ich würde nämlich gern die Datei von diesen Werten:
Code:
000001f0: 00 00 00 00 00 00 00 00 55 50 58 30 00 00 00 00
00000200: 00 60 03 00 00 10 00 00 00 00 00 00 00 04 00 00 00000210: 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 E0 00000220: 55 50 58 31 00 00 00 00 00 00 02 00 00 70 03 00 00000230: 00 F2 01 00 00 04 00 00 00 00 00 00 00 00 00 00 00000240: 00 00 00 00 40 00 00 E0 2E 72 73 72 63 00 00 00 00000250: 00 10 00 00 00 70 05 00 00 0C 00 00 00 F6 01 00 In diese Wert umpatchen:
Code:
000001f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000200: 00 D0 00 00 00 10 00 00 00 00 00 00 00 04 00 00 00000210: 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 C0 00000220: 00 00 00 00 00 00 00 00 00 80 00 00 00 E0 00 00 00000230: 00 74 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00000240: 00 00 00 00 40 00 00 C0 2E 72 73 72 63 00 00 00 00000250: 00 10 00 00 00 60 01 00 00 04 00 00 00 78 00 00 Aber ich bekomme das einfach nicht hin, denn ich will nicht jeden Wert einzeln eintragen. Kann mir vielleicht jemand dabei helfen, wie das gehen soll? :love: Danke UC |
Re: Wie kann man einen Loader programmierern?
Moin UC,
dann erklär mir doch mal bitte, wo Du bei meinem, stilisierten, Beispiel das Problem hast statt 2 eine grössere Anzahl anzugeben. Das versteh' ich nämlich jetzt nicht. |
Re: Wie kann man einen Loader programmierern?
Danke Christian, deine Methode funktioniert doch, hab's Sie nur am Anfang nicht verstanden. Sieht jetzt so aus:
Delphi-Quellcode:
program loader;
uses Windows, Messages; var si : Startupinfo; pi : Process_Information; Bytesread : DWORD; Olddata : array[0..1] of byte; sBuffer : string; begin sBuffer := #$90#$90; 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), @sBuffer[1], 2, 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. Man könnte das Olddata auch noch in einen String umwandeln, doch dazu habe ich keine Lust :zwinker: |
Re: Wie kann man einen Loader programmierern?
Was für einen Vorteil hast du jetzt davon? Was tippt man schneller?
$75,$19 oder #$75#$19 ? Dürfte ziemlich gleich ausfallen, oder? |
Re: Wie kann man einen Loader programmierern?
Wenn man jedoch mehere Werte ändern will geht das aber schneller
|
Re: Wie kann man einen Loader programmierern?
Wieso? Du brauchst bei meinem Beispiel auch nichts anderes ändern ausser den/die Werte, die du ändern willst. Keine arrays festlegen oder ähnliches.
Und wenn du jetzt sagst, das das bei mir komplexer aufgebaut ist, darf ich ich daran erinnen, das du auch mehrere Offsets haben wolltest, was diesen Aufbau nötig macht. Das BA([ ]) musst du ja auch nur einmal tippen, egal, ob du 2 oder 80 Bytes eintippts. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:31 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