Autoit exe dosyasında değişiklik yapma? - Çözüldü

Programlama dilleri konusunda bilgi paylaşım alanıdır.
Cevapla
anxious
Byte3
Byte3
Mesajlar: 106
Kayıt: 11 Mar 2015, 07:56

Autoit exe dosyasında değişiklik yapma? - Çözüldü

Mesaj gönderen anxious »

Exe dosyasında bir kısmında değişiklik yapmak istiyorum ama değiştirmiyor hatam nerede acaba.
Buyrun kodlarım

Kod: Tümünü seç

#RequireAdmin
#include <MsgBoxConstants.au3>
#include <FileConstants.au3>

$DosyaAc = FileOpenDialog("Exe Dosyası?", @ScriptDir & "\", "Exe(*.exe)", 1)
If @error Then
	MsgBox($MB_ICONWARNING, "Hata", "Dosya Açılamadı")
	Exit
Else
	$BinaryAc = FileOpen($DosyaAc, $FO_BINARY)
	$BinaryOku = FileRead($BinaryAc)
	$IcerikDegistir = StringReplace($BinaryOku, "444F53", "44454E454D45")
	FileClose($BinaryAc)
EndIf
Kullanıcı avatarı
BlueLife
Kilobyte1
Kilobyte1
Mesajlar: 211
Kayıt: 29 Ağu 2014, 20:42

Re: Autoit exe dosyasında değişiklik yapma?

Mesaj gönderen BlueLife »

@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
anxious
Byte3
Byte3
Mesajlar: 106
Kayıt: 11 Mar 2015, 07:56

Re: Autoit exe dosyasında değişiklik yapma?

Mesaj gönderen anxious »

Teşekkürler üstat sorunsuz çalışıyor elinize sağlık :)
Bu konuda bir kaç şey daha sorabilirmiyim.
Soruyu sorduktan sonra biraz araştırdım exe dosyasında FileGetPos ve FileSetPos kullanlar olmuş FileGetPos ve FileSetPos hangi durumlarda kullanılıyor acaba?

Ayrıca Local $FileOpen = FileOpen($filename, 18) ;==> Buradaki 18 autoit help dosyasında belirtilmiyor.
Acaba diyorum şunların birşelimindenmi oluyor (1)(8) = 18.
$FO_APPEND (1) = Write mode (append to end of file)
$FO_CREATEPATH (8) = Create directory structure if it doesn't exist (See Remarks).
Kullanıcı avatarı
BlueLife
Kilobyte1
Kilobyte1
Mesajlar: 211
Kayıt: 29 Ağu 2014, 20:42

Re: Autoit exe dosyasında değişiklik yapma?

Mesaj gönderen BlueLife »

@anxious

FileGetPos ve FileSetPos komutları genelde büyük dosyalar işlem yaparken kullanılabiliyor. Yardım dosyasında örnekler var. Kısacası diyelim 1 gb lik bir dosya var. Bu dosyanın 900 mb lik bölümüne bir ekleme yapmak istersek FileSetPos ile ilgili kısıma gitmeliyiz. Binary dosyalarıyla uğraşırken ilgili konuma gitmek için byte olarak değer girilebilir.

FileOpen komutundaki 18 rakamına gelirsek, BitOR(16,2) yi ifade eder. 16 binary, 2 ise dosyanın içeriğini silmek için. Yardım dosyasında daha ayrıntılı bilgi vardı.
anxious
Byte3
Byte3
Mesajlar: 106
Kayıt: 11 Mar 2015, 07:56

Re: Autoit exe dosyasında değişiklik yapma? - Çözüldü

Mesaj gönderen anxious »

@BlueLife Teşekkür ederim değerli yorum ve bilgilerin için.
Cevapla