| Autor |
Beitrag |
MagicRain
      
Beiträge: 154
WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
|
Verfasst: Di 09.12.08 00:20
Hallo Leute ich will in einer externen Datei einen bestimmten wert suchen und diesen ersetzen also zb 35 hex dann möchte ich den zb mit 55h ersetzen. Habt ihr eine Idee wie man das ganze anstellen könnte Tipps oder Code beispiele oder gleiche Projekte die mir helfen könnten oder gar ein Tutorial dann nur her damit danke schon mal.
Moderiert von Narses: Topic aus Sonstiges (Delphi) verschoben am Di 09.12.2008 um 00:32
|
|
Reinhard Kern
      
Beiträge: 591
Erhaltene Danke: 14
|
Verfasst: Di 09.12.08 10:14
MagicRain hat folgendes geschrieben : | | Hallo Leute ich will in einer externen Datei einen bestimmten wert suchen und diesen ersetzen also zb 35 hex dann möchte ich den zb mit 55h ersetzen. |
Hallo,
das ist ein fast 100%ig sicherer Weg, die EXE unbrauchbar zu machen. Ich würde das erst mal mit einem Hex-Editor manuell versuchen, bevor ich sinnlose Software dafür schreibe.
Gruss Reinhard
|
|
turboPASCAL
      
Beiträge: 193
Erhaltene Danke: 1
Win XP / Vischda
D6 PE / D2005 PE
|
Verfasst: Di 09.12.08 10:47
Reinhard Kern hat folgendes geschrieben : | | ... das ist ein fast 100%ig sicherer Weg, die EXE unbrauchbar zu machen ... |
Dito.
| Zitat: | | String in EXE-File suchen und erstzen |
Äh, was denn nun, einen String ("Hallo Welt !") oder ein Byte (Dezimal: 65 / Hex: 41 / als Char: "A") ?
MagicRain hat folgendes geschrieben : | | Hallo Leute ich will in einer externen Datei einen bestimmten wert suchen und diesen ersetzen also zb 35 hex dann möchte ich den zb mit 55h ersetzen. |
Ok, das sollte nicht das Problem sein. Solange du die genaue Position des zu änderen Wertes kennst.
Der Grund, der Wert kann öfters als ein mal an verschiedenen Positionen vorkommen.
| Zitat: | | Habt ihr eine Idee wie man das ganze anstellen könnte Tipps oder Code beispiele oder gleiche Projekte die mir helfen könnten oder gar ein Tutorial dann nur her damit danke schon mal. |
Gegenfrage, hast du die Delphigrundlagen durch ? 
_________________ Nein, ich bin nicht der turboPASCAL aus der DP, ich seh nur so aus...
|
|
jfheins
      
Beiträge: 918
Erhaltene Danke: 158
Win 10
VS 2013, VS2015
|
Verfasst: Di 09.12.08 14:28
Hier mal eine Funktion, die in einem Stream ersetzt.
Es wird nach dem Wert old gesucht und an der Position wird dann new geschrieben.
old und new sollten die gleiche länge haben.
In dem String kannst du auch Binärwerte benutzen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure Replace(Stream: TStream; old, new: AnsiString) var i: Integer; pos: Int64; pattern: AnsiString; begin Stream.Position := 0;
while (Stream.size - Stream.Position) >= length(old) do begin pos := Stream.Position; Stream.readbuffer(pattern, length(old)); Stream.position = pos + 1; if (comparemem(@pattern[0], @old[0], length(old)) = 0) then begin Stream.position = pos; Stream.writeBuffer(new, length(new)); break; end; end; end; |
Nicht getestet.
Zuletzt bearbeitet von jfheins am Mi 10.12.08 11:25, insgesamt 2-mal bearbeitet
|
|
MagicRain 
      
Beiträge: 154
WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
|
Verfasst: Di 09.12.08 16:31
@jfheins Sauber genau was ich gesucht habe. Vielen Dank!!!
MfG
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 10.12.08 01:10
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
MagicRain 
      
Beiträge: 154
WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
|
Verfasst: Mi 10.12.08 01:42
| Zitat: | | Äh, was denn nun, einen String ("Hallo Welt !") oder ein Byte (Dezimal: 65 / Hex: 41 / als Char: "A") ? |
Hexwert! | Zitat: | Ok, das sollte nicht das Problem sein. Solange du die genaue Position des zu änderen Wertes kennst.
Der Grund, der Wert kann öfters als ein mal an verschiedenen Positionen vorkommen. |
Ja, will ein bestimmtes Offset bearbeiten, verändert und so weiter...Also an einer bestimmten adresse zb 0x0040100..
Moderiert von Narses: Doppelposts aufgeräumt
|
|
jfheins
      
Beiträge: 918
Erhaltene Danke: 158
Win 10
VS 2013, VS2015
|
Verfasst: Mi 10.12.08 11:28
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 10.12.08 11:55
Das SetLength für deinen Lese-Puffer fehlt immer noch. Genauso wie es @Var[1] bei Strings heißen muss, sowohl beim Lesen als auch beim Schreiben ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
baka0815
      
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: Mi 10.12.08 12:11
Wenn du weißt, an welcher Stelle du was ändern willst, kannst du direkt per Seek drauf zugreifen (Stream oder ohne).
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure ReplaceAtOffset(Filename: string; Offset: Integer; B: Byte); var F: file of Byte; begin AssignFile(F, Filename); FileMode := fmOpenReadWrite; Reset(F); Seek(F, Offset); BlockWrite(F, B, 1); CloseFile(F); end; |
Ungetestet und gänzlich ohne Fehlerbehandlung.
Aufzurufen wäre das ganze dann per ReplaceAtOffset('c:\meinedatei', $0040100, $90);
|
|
MagicRain 
      
Beiträge: 154
WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
|
Verfasst: Mi 10.12.08 13:34
Oki cool danke euch
MfG
|
|
|