@anxious
Önce okuma işlemi yapıp, okunan verileri değiştirdikten sonra yazma işlemi yapmalısın. Tabi bu işlemler için ayrı ayrı dosyayı açmalısın. Hepsini bir arada yapmak istersen sorunlar olabilir. Neyse örneğine ek yaptım, incelersin.
Not:Uygulama dosyasındaki binary replace işlemlerinde replace karakterlerinin sayısı eşit olmazsa uygulama dosyası bozulabilir!
Kolay gelsin...
Kod: Tümünü seç
#RequireAdmin
Local $DosyaAc, $BinaryOku, $IcerikDegistir
$DosyaAc = FileOpenDialog("Exe Dosyası?", @ScriptDir & "\", "Exe(*.exe)", 1)
If @error Then
MsgBox(16, "Hata", "Dosya Açılamadı")
Exit
Else
$BinaryOku = _FileRead_Binary($DosyaAc)
If IsBinary($BinaryOku) = 1 Then
$IcerikDegistir = StringReplace($BinaryOku, "444F53", "44454E454D45")
If _FileWrite_Binary($DosyaAc, Binary($IcerikDegistir)) = 1 Then
MsgBox(64, "Bilgi", "İşlem tamamlandı")
Else
MsgBox(16, "Hata", "Dosya Yazılamadı")
EndIf
Else
MsgBox(16, "Hata", "Dosya Okunamadı")
EndIf
EndIf
Func _FileRead_Binary($filename)
Local $Error = 0, $FileRead
Local $FileOpen = FileOpen($filename, 16)
If $FileOpen = -1 Then
$Error = 1
Else
$FileRead = FileRead($FileOpen, FileGetSize($filename))
$Error = @error
If $Error <> 0 Then $Error = 2
EndIf
FileClose($FileOpen)
Return SetError($Error, 0, $FileRead)
EndFunc ;==>_FileRead_Binary
Func _FileWrite_Binary($filename, $sBinary)
If IsBinary($sBinary) = 0 Then Return SetError(1, 0, 0)
Local $Error = 0
Local $FileOpen = FileOpen($filename, 18)
If $FileOpen = -1 Then
$Error = 2
Else
If FileWrite($FileOpen, $sBinary) = 0 Then $Error = 3
EndIf
FileClose($FileOpen)
Return SetError($Error, 0, Number($Error = 0))
EndFunc ;==>_FileWrite_Binary