Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi EXE Patchen -- Error: verletzt untere Grenzen (https://www.delphipraxis.net/105849-exe-patchen-error-verletzt-untere-grenzen.html)

Garfield 1. Jan 2008 10:08

Re: EXE Patchen -- Error: verletzt untere Grenzen
 
Zitat:

Zitat von hedie
Was muss ich dann in meinem Delphi Programm eintragen, ...

Den Ansatz hat Dir SirThornberry gegeben:
Zitat:

Zitat von SirThornberry
Bei 32bit kann die Speichereadresse auch nur 32bit sein was einem DWORD entspricht. Dementsprechend ist dein Offset-Wert definitiv falsch. Du kannst nicht eine Stelle bei 32bit patchen welche 32bit überschreitet.

Du arbeitest mit Cardinal = 32bit. Du benötigst aber Int64 = 64bit.

hedie 1. Jan 2008 11:01

Re: EXE Patchen -- Error: verletzt untere Grenzen
 
Also meinst dz dami, das das hier

Zitat:

Zitat von hedie

004452A8 |. C605 24214B00 01 MOV BYTE PTR DS:[4B2124],1

Das blaue, soll nach dem Programm aufruf in Adresse 004452A8 stehen.

64 Bit Programm Code ist?

Wenn ja, stimmt nicht. Ich habe 32 Bit Windows und das Programm is auch 32 Bit

Noch ne andere Frage... es bestünde auch die Möglichkeit die stelle einfach zu Noopen (also mit NOP's zu füllen)

Dazu müsste ich AB! Adresse 004452A8 7 NOP's einfügen...

Ich hab das mal so versucht

Delphi-Quellcode:
    dwFileOffset := RvaToFileOffset(lpBuffer, $004452A8);
    UpdateOffset(lpBuffer, dwFileOffset, $90909090);


    //LoadFile(opendialog1.FileName, lpBuffer, dwFileSize);
    dwFileOffset := RvaToFileOffset(lpBuffer, $004452AC);
    UpdateOffset(lpBuffer, dwFileOffset , $909090);
Ich dachte mir, anstelle alles kompliziert in einem schritt einzutragen, mache ich das einfach hintereinander

Wenn ich den code schlussendlich ausführe, werden zwar die NOP's eingetragen ABER!

a) nur 5 stat 7
b) der unetere Code wird entfernt also alles ab der einfüge Adresse verschwindet... was bei OllyDBG nicht der fall ist

Ich bin echt ratlos...

Garfield 1. Jan 2008 12:04

Re: EXE Patchen -- Error: verletzt untere Grenzen
 
Ich merke gerade, SirThornberry's Einwurf war nicht ganz korrekt. Die Speicheradresse ist DWord nur der Wert eben nicht.

Zitat:

Zitat von hedie
64 Bit Programm Code ist?

Nein, der bleibt bei 32bit. Es ging um den Datentyp.

Zitat:

Zitat von hedie
Delphi-Quellcode:
procedure UpdateOffset(var lpBuffer: Pointer; dwFileOffset: Cardinal; Value: DWORD); overload;
begin
  PDWORD(Cardinal(lpBuffer) + dwFileOffset)^ := Value;
end;
Delphi-Quellcode:
UpdateOffset(lpBuffer, dwFileOffset, $01004B212405C6);

Deine Procedure nimmt maximal DWord, Du übergibst aber Int64.

hedie 1. Jan 2008 12:27

Re: EXE Patchen -- Error: verletzt untere Grenzen
 
Also muss ich die Procedure für Int64 abändern richtig?

Würde das so funktionieren?

Delphi-Quellcode:
procedure UpdateOffset(var lpBuffer: Pointer; dwFileOffset: Cardinal; Value: Int64); overload;
begin
  PDWORD(Cardinal(lpBuffer) + dwFileOffset)^ := Value;
end;

Apollonius 1. Jan 2008 12:30

Re: EXE Patchen -- Error: verletzt untere Grenzen
 
Du musst dann aber entsprechend nach PInt64 statt nach PDWORD casten.

hedie 1. Jan 2008 12:31

Re: EXE Patchen -- Error: verletzt untere Grenzen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ooops stimmt

also so??

Delphi-Quellcode:
procedure UpdateOffset(var lpBuffer: Pointer; dwFileOffset: Cardinal; Value: Int64); overload;
begin
  PInt64(Cardinal(lpBuffer) + dwFileOffset)^ := Value;
end;
/////////////Edit

Ich hab den code mal an die anderen Proceduren angehängt (also unten drunter)

Danach habe ich mit diesem Code eingelesen

Delphi-Quellcode:
    dwFileOffset := RvaToFileOffset(lpBuffer, $004452A8); // Adresse einlesen
      UpdateOffset(lpBuffer, dwFileOffset, $01004B212405C6); // Neues Offset
Jedoch hat es nur teilweise geklappt:

Die bytes wurden richtig eingetragen sprich an der richtigen stelle
aber es hat sonst irgendwas verschoben...

Aber seht selbst

Oben im bild vorher unten nachher

Es sollte ja nur die zeile bei adresse 004452A8 updaten, statdessen hat es sonst was gemacht :)

ich hoffe ihr seht den fehler den ich gemacht habe...

Garfield 1. Jan 2008 13:19

Re: EXE Patchen -- Error: verletzt untere Grenzen
 
Dieses Bild und das aus dem ersten Beitrag zeigen dasselbe!?

hedie 1. Jan 2008 13:20

Re: EXE Patchen -- Error: verletzt untere Grenzen
 
Ja grunsätzlich schon

aber diesmal hab ich es noch n bisschen besser markiert....

Aber ich kann mir nicht erklären wo der fehler liegt...

Habt ihr ne idee?

Garfield 1. Jan 2008 13:47

Re: EXE Patchen -- Error: verletzt untere Grenzen
 
:gruebel:

Jetzt ist es Int64 = 64bit = 8 Byte

Zitat:

Zitat von hedie
Delphi-Quellcode:
    dwFileOffset := RvaToFileOffset(lpBuffer, $004452A8); // Adresse einlesen
      UpdateOffset(lpBuffer, dwFileOffset, $01004B212405C6); // Neues Offset

:wall:

01 00 4B 21 24 05 C6 - Das sind nur 7 Byte. Eventuell aufteilen in 4, 2 und 1 Byte?

hedie 1. Jan 2008 13:51

Re: EXE Patchen -- Error: verletzt untere Grenzen
 
Ich weiss nicht wie ich das aufteilen soll....

Bin in diesem gebiet noch totaler anfänger :(

Oder wird so aufgeteilt?

Delphi-Quellcode:
   dwFileOffset := RvaToFileOffset(lpBuffer, $004452A8);
      UpdateOffset(lpBuffer, dwFileOffset, $C6);

dwFileOffset := RvaToFileOffset(lpBuffer, $004452A8);
      UpdateOffset(lpBuffer, dwFileOffset, $2405);

dwFileOffset := RvaToFileOffset(lpBuffer, $004452A8);
      UpdateOffset(lpBuffer, dwFileOffset, $01004B21);


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:41 Uhr.
Seite 2 von 3     12 3      

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