Seite 1 von 1
Datei soll eiegenen Inhalt lesen/schreiben können
Verfasst: 23.08.2008 10:23
von Chef Wiggum
Guten Morgen,
Ich würde gerne wissen ob es möglich ist, dass sich eine Datei selber zur Laufzeit für Lese- bzw. Schreibzugriff öffnen lässt.
Denn
gibt leider einen Wert <> 1 .
Extern auf diese Weise geöffnet, klappt alles wunderbar.
Danke
MFG
Verfasst: 23.08.2008 10:34
von Little John
Du musst nicht GetCurrentDirectory() benutzen, sondern ProgramFilename().
Bei Schreib-Zugriffen sollte man sehr genau wissen, was man macht.
Gruß, Little John
Verfasst: 23.08.2008 12:02
von Chef Wiggum
Huch - Das geht ja rasch mit den Antworten hier.
Danke - Mit ReadFile() klappt es wunderbar
MFG
Verfasst: 23.08.2008 23:02
von Thorium
Ja, schreiben geht auch.
Brauchst nur ein Tool mit dem du den PE-Header entsprechend anpassen kannst, oder du machst es selbst.
Du musst dem Characteristics-Feld im PE-Header #IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP hinzufügen. Dann solltest du die Datei nach dem starten bearbeiten und sogar löschen können.
Verfasst: 23.08.2008 23:41
von Thorium
Sorry sieht so aus als währe das Feature in Windows gestrichen worden. Habs grad mal ausprobiert mit XP Pro, funktioniert nicht.
How ever. Hier mal der Testcode:
Modifiziert eine exe so das sie sich bearbeiten lassen sollte, wenn sie läuft.
Funktioniert aber leider nicht.
Code: Alles auswählen
;/-------------------\
;| Make PE Writable |
;| |
;| Version 1.00 |
;| by Thorium |
;| |
;| PureBasic 4.20 |
;\-------------------/
EnableExplicit
#IMAGE_DOS_SIGNATURE = $5A4D
#IMAGE_NT_SIGNATURE = $00004550
#IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = $0400
Define.l hFile,HeaderOffset
Define.w Characteristics
;open the file
hFile = OpenFile(#PB_Any,"c:\your.exe")
If hFile = 0
MessageRequester("Error","Can't open file!",16)
End
EndIf
;check if file is a executable
If ReadWord(hFile) <> #IMAGE_DOS_SIGNATURE
MessageRequester("Error","File is not a executable!",16)
End
EndIf
;read offset of PE header
FileSeek(hFile,$3C)
HeaderOffset = ReadLong(hFile)
If HeaderOffset = 0
MessageRequester("Error","File is not a PE!",16)
End
EndIf
;check if file is a PE
FileSeek(hFile,HeaderOffset)
If ReadLong(hFile) <> #IMAGE_NT_SIGNATURE
MessageRequester("Error","File is not a PE!",16)
End
EndIf
;read characteristics from PE header
FileSeek(hFile,HeaderOffset + $16)
Characteristics = ReadWord(hFile)
;add IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP to characteristics
Characteristics = Characteristics | #IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
;write characteristics to PE header
FileSeek(hFile,HeaderOffset + $16)
WriteWord(hFile,Characteristics)
;close file
CloseFile(hFile)
MessageRequester("Make PE Writable","Done!")
End