Derlenmiş EXE dosya içindeki sabit yazıları değiştirmek
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Derlenmiş EXE dosya içindeki sabit yazıları değiştirmek
Merhabalar
Yaptığım programların derlenmiş exe dosyası içindeki sabit string değerleri, yine benim yaptığım başka bir programla değiştirmek istiyorum.
Örneğin bir form başlığını ya da Programın hakkında kısmında yazan değerleri.
Yazdığım bir programı farklı müşterilere göndermek istediğimde her seferinde tekrar o müşteri için derlemem gerekiyor.
En küçük bir güncellemede tüm müşteriler için uğraşmak uzun sürüyor.
Bunun yerine Exe yi gösterip Başlıkları -A- Firmasına göre değiştir şeklinde bir ara yazılım yapmayı düşünüyorum.
Fakat bu konuda çok eksiğim var.
Bir de Project -> Options ->Version Info kısmındaki Projenin sabit değerlerini yine aynı programla değiştirmek istiyorum.
Yalnız bu sabit yazılar exe içinde olmalı. Yardımcı ek bir dosyada değil.
Çünkü bazen dosya silinebiliyoru ya da güncelleme için 2 ayrı dosya göndermem sıkıntı olabiliyor.
Bu konu hakkında yardımlarınızı bekliyorum.
Yaptığım programların derlenmiş exe dosyası içindeki sabit string değerleri, yine benim yaptığım başka bir programla değiştirmek istiyorum.
Örneğin bir form başlığını ya da Programın hakkında kısmında yazan değerleri.
Yazdığım bir programı farklı müşterilere göndermek istediğimde her seferinde tekrar o müşteri için derlemem gerekiyor.
En küçük bir güncellemede tüm müşteriler için uğraşmak uzun sürüyor.
Bunun yerine Exe yi gösterip Başlıkları -A- Firmasına göre değiştir şeklinde bir ara yazılım yapmayı düşünüyorum.
Fakat bu konuda çok eksiğim var.
Bir de Project -> Options ->Version Info kısmındaki Projenin sabit değerlerini yine aynı programla değiştirmek istiyorum.
Yalnız bu sabit yazılar exe içinde olmalı. Yardımcı ek bir dosyada değil.
Çünkü bazen dosya silinebiliyoru ya da güncelleme için 2 ayrı dosya göndermem sıkıntı olabiliyor.
Bu konu hakkında yardımlarınızı bekliyorum.
Re: Derlenmiş EXE dosya içindeki sabit yazıları değiştirmek
Kücük bir dll dosyasıyla yapabilirsin.
Mesela dll dosyası açılışta yüklenir içindeki verilerle caption vs. değerleri programa yüklemiş olursun. Güncellemeler de sadece dll dosyasında olur.
Mesela dll dosyası açılışta yüklenir içindeki verilerle caption vs. değerleri programa yüklemiş olursun. Güncellemeler de sadece dll dosyasında olur.
- greenegitim
- Üye
- Mesajlar: 713
- Kayıt: 28 Nis 2011 10:33
- Konum: İstanbul
Re: Derlenmiş EXE dosya içindeki sabit yazıları değiştirmek
Şöyle bir şey olsa peki bir webservis veya internete siz bu bilgileri girseniz exe açılışında kullanıcı adı ve şifreye göre sizin web servis yada internete bulunan dosyaya bağlanıp bu bilgileri çekebilir.
Mücadele güzelleştirir!
Re: Derlenmiş EXE dosya içindeki sabit yazıları değiştirmek
Bir yere bağlanmadan hatta program klasöründeki bir dosyadan dahi okumadan doğrudan Exe içindeki string ekrana gelmeli.
Ve bu stringi ikinci bir program vasıtasıyla Exe dosya içinden değiştirebilmeliyim.
Biraz araştırdım. Sanırım RES uzantılı dosyalar sabit string resim vs. dosyaları depolamak için kullanılıyormuş.
Fakat bu RES uzantılı dosyalar bildiğim kadarıyla sadece Delphi içinden değiştirilebiliyor.
Ben bunu Delphi ye gerek olmadan kendi yazdığım ek programla yapmak istiyorum.
Ve bu stringi ikinci bir program vasıtasıyla Exe dosya içinden değiştirebilmeliyim.
Biraz araştırdım. Sanırım RES uzantılı dosyalar sabit string resim vs. dosyaları depolamak için kullanılıyormuş.
Fakat bu RES uzantılı dosyalar bildiğim kadarıyla sadece Delphi içinden değiştirilebiliyor.
Ben bunu Delphi ye gerek olmadan kendi yazdığım ek programla yapmak istiyorum.
Re: Derlenmiş EXE dosya içindeki sabit yazıları değiştirmek
Bu exe sizin yazdığınız bir program değil mi yoksa? Sanki farklı bir amaç varmış gibi hissettim.
Yoksa arkadaşların tavsiyeleri gayet uygun.
Başka uygulamadaki bir yazıyı değiştirmek için FindWindow ve FindWindowEx araması yapabilirsiniz. Forumda örnekleri mevcut.
Yoksa arkadaşların tavsiyeleri gayet uygun.
Başka uygulamadaki bir yazıyı değiştirmek için FindWindow ve FindWindowEx araması yapabilirsiniz. Forumda örnekleri mevcut.
There's no place like 127.0.0.1
Re: Derlenmiş EXE dosya içindeki sabit yazıları değiştirmek
Dostum başka bir amaç olsa ResHack gibi programlarla zaten istediğimi yapabiliyorum.
Bunu kendi yaptığım programlarla otomatik olarak başlıkları vs. hepsini bir tuşa basarak yapmak istiyorum.
15-20 tane farklı exe dosyası var. Ve bunu her bayi için tekrar derlemem gerekiyor.
Yani A firması, A firmasının mail adresi ,web adresi hatta logosunu vs. her seferinde, her güncellemede uğraşmadan atamak istiyorum.
Hatta bir program yapayım, bayilere göndereyim. Her bir güncelleme yaptığımda siteden günceli indirsinler.
Kendi başlık ekleme programlarıyla kendi bilgilerini otomatik Exe ye atasınlar.
Ben her seferinde tek tek uğraşmiyim diyorum.
Biraz .RES uzantılı dosyaya bilgileri gömme çağırma hakkında ilerledim.
Fakat mevcut Exe deki bu resource bilgilerin başka bir programdan çağırma değiştirmeyi bulamadım.
Aslında ilk söylediğimi de tam anlamıyla çözmemiş olabilirim.
Bunu kendi yaptığım programlarla otomatik olarak başlıkları vs. hepsini bir tuşa basarak yapmak istiyorum.
15-20 tane farklı exe dosyası var. Ve bunu her bayi için tekrar derlemem gerekiyor.
Yani A firması, A firmasının mail adresi ,web adresi hatta logosunu vs. her seferinde, her güncellemede uğraşmadan atamak istiyorum.
Hatta bir program yapayım, bayilere göndereyim. Her bir güncelleme yaptığımda siteden günceli indirsinler.
Kendi başlık ekleme programlarıyla kendi bilgilerini otomatik Exe ye atasınlar.
Ben her seferinde tek tek uğraşmiyim diyorum.
Biraz .RES uzantılı dosyaya bilgileri gömme çağırma hakkında ilerledim.
Fakat mevcut Exe deki bu resource bilgilerin başka bir programdan çağırma değiştirmeyi bulamadım.
Aslında ilk söylediğimi de tam anlamıyla çözmemiş olabilirim.
Re: Derlenmiş EXE dosya içindeki sabit yazıları değiştirmek
RES dosya derleme esnasında kullanılır. Siz programı yeniden derlemek istemiyorsunuz. O yüzden RES çözümünü unutun. Tekrar hatırlatıyorum:
FindWindow ve FindWindowEx.
Forumda çözüm anlatıldığını da biliyorum. Hatta Sn.mrmarman 'ın paylaşımı olduğunu hatırlıyorum.
FindWindow ve FindWindowEx.
Forumda çözüm anlatıldığını da biliyorum. Hatta Sn.mrmarman 'ın paylaşımı olduğunu hatırlıyorum.
There's no place like 127.0.0.1
Re: Derlenmiş EXE dosya içindeki sabit yazıları değiştirmek
mrmarman 'ın başka bir forumda aşağıdaki iletisini gördüm.
Yapmak istediklerime benzer şeyler;
Bunu ResHack yapabiliyorsa, tüm kodlara sahip olan benim yapmam herhalde daha kolay olacaktır.
Tekrar söyliyim. DLL ya da başka ek bir dosyayla bu işlemi yapmak istemiyorum. Tek Exe dosyada olmalı. Güncel Exe yi indirince teferruata girmeden güncelleme yapılabilmeli.
Çünkü bazen DLL ya da resimin içinde bulunduğu dosya silinebiliyor. Bu durumda bayimin bilgileri yerine benim bilgilerim çıkıyor. Bayi de bunu istemiyor.
Ya da Program özelliklerine baktığında veyahut görev yöneticisinde benim firmamın ismi değil kendi ismi geçsin istiyor. Ve bu değiştirilemesin.
Sadece benim yapacağım yetkili değiştirme programıyla değiştirilsin istiyorum. Şifreleme vs. hakkında problem yok..
Yapmak istediklerime benzer şeyler;
RES dosyalarla olabileceğini tahmin ediyorum. Çünkü ResHack programıyla bu resim ve yazıları değiştirebiliyorum.proje çalışırken exe dosyada değişiklik yapamazsınız. Ama şöyle olabilir,
(1) Çalışan Exe dosyanın kendi adını değiştirebilirsiniz.
(2) Bu sayede aynı isimle aynı yerde yeni bir koyasını üretebilirsiniz.
(3) Üretilen bu kopya üzerinde Tfilestream ile açabilir, değişiklikleri yapabilirsiniz.
(4) Konu: dosya içerisinde nereye ne yazacağınız ile ilişkilidir. EXE dosyalarda JUNK / META alanlar vardır. Buralara yazabilirsiniz.
(5) Ayrıca RES olarak ekleyeceğiniz bir veri bloğunun olduğu yere de yazabilirsiniz.
(*) EXE üzerinde yazacağınız yere karar verip ondan sonra filestream işlemine geçiniz. Çünkü yanlış yere yazarsanız exe dosyanız bozulur.
Bunu ResHack yapabiliyorsa, tüm kodlara sahip olan benim yapmam herhalde daha kolay olacaktır.
Tekrar söyliyim. DLL ya da başka ek bir dosyayla bu işlemi yapmak istemiyorum. Tek Exe dosyada olmalı. Güncel Exe yi indirince teferruata girmeden güncelleme yapılabilmeli.
Çünkü bazen DLL ya da resimin içinde bulunduğu dosya silinebiliyor. Bu durumda bayimin bilgileri yerine benim bilgilerim çıkıyor. Bayi de bunu istemiyor.
Ya da Program özelliklerine baktığında veyahut görev yöneticisinde benim firmamın ismi değil kendi ismi geçsin istiyor. Ve bu değiştirilemesin.
Sadece benim yapacağım yetkili değiştirme programıyla değiştirilsin istiyorum. Şifreleme vs. hakkında problem yok..
Re: Derlenmiş EXE dosya içindeki sabit yazıları değiştirmek
Problemim hala devam etmekte.
Re: Derlenmiş EXE dosya içindeki sabit yazıları değiştirmek
Merhaba,
Kullandığınız Delphi sürümünü yazmamışsınız. Aşağıdaki örnek Delphi 10.1 Update 2 ile çalışacak şekilde hazırlanmıştır.
Yapmak istediğiniz işlem için öncelikle hazırlık yapmanız gerekmekte. Orjinal içindeki değerleri değiştirmek istediğiniz EXE dosyasının bu değerleri "RESOURCE" içinden alarak okur hale getirmeniz gerekmektedir. Bunu aşağıdaki gibi bir dosyayı proje dizini içinde hazırlayarak yapabilirsiniz.
Dosya: initialstrings.txt:
Bu dosyayı aşağıdaki komut satırını kullanarak RESOURCE (*.RES) dosyasına çevirmelisiniz:
Bu işlemden sonra elinizde initialresources.res dosyası olacaktır. Bu dosyayı ilgili unit içinde aşağıdaki gibi kullanabilirsiniz.
Ardından ekrandaki Label bileşenleri içinde uygulamanın aşağıdaki şekilde bilgi göstermesini sağlamalısınız:
Bu şekilde hazırlanmış bir projeyi derledikten sonra aşağıdaki prosedürü kullanarak yeniden derlemeye gerek kalmadan içindeki STRINGTABLE değerlerini değiştirebilirsiniz.
Kullanımı aşağıdaki gibi olacaktır:
Burada değerlerin boyunu 255 karakter limiti içinde tutmak doğru bir yöntem olacaktır.
Örnek projeleri ekte bulabilirsiniz.
Kullandığınız Delphi sürümünü yazmamışsınız. Aşağıdaki örnek Delphi 10.1 Update 2 ile çalışacak şekilde hazırlanmıştır.
Yapmak istediğiniz işlem için öncelikle hazırlık yapmanız gerekmekte. Orjinal içindeki değerleri değiştirmek istediğiniz EXE dosyasının bu değerleri "RESOURCE" içinden alarak okur hale getirmeniz gerekmektedir. Bunu aşağıdaki gibi bir dosyayı proje dizini içinde hazırlayarak yapabilirsiniz.
Dosya: initialstrings.txt:
Kod: Tümünü seç
STRINGTABLE
{
1000, "Müşteri 1"
1001, "E-mail 1"
1002, "Adres 1"
1003, "Çok\012satırlı 1"
}
Kod: Tümünü seç
brcc32.exe initialstrings.txt
Kod: Tümünü seç
var
Form1: TForm1;
implementation
{$R *.dfm}
{$R initialstrings.RES}
Kod: Tümünü seç
procedure TForm1.FormCreate(Sender: TObject);
var
Buf: Array [0..255] of Char;
begin
if LoadString(HInstance, 1000, Buf, SizeOf(Buf)) <> 0 then
Label1.Caption := StrPas(Buf);
if LoadString(HInstance, 1001, Buf, SizeOf(Buf)) <> 0 then
Label2.Caption := StrPas(Buf);
if LoadString(HInstance, 1002, Buf, SizeOf(Buf)) <> 0 then
Label3.Caption := StrPas(Buf);
if LoadString(HInstance, 1003, Buf, SizeOf(Buf)) <> 0 then
Label4.Caption := StrPas(Buf);
end;
Kod: Tümünü seç
uses
System.Types;
procedure UpdateResString(AFileName, ANewString: string; AStringIdent: Integer);
procedure WriteToArray(AArray: TByteDynArray; AData: Word; var APos: Integer);
begin
AArray[APos] := Lo(AData);
AArray[APos + 1] := Hi(AData);
Inc(APos, 2);
end;
function ReadFromArray(AArray: TByteDynArray; APos: Integer): Word;
begin
Result := AArray[APos] + AArray[APos + 1] * 16;
end;
var
hModule, hResInfo, hUpdate: THandle;
ResData, TempData: TByteDynArray;
wsNewString: WideString;
iSection, iIndexInSection: Integer;
i, iLen, iSkip, iPos: Integer;
begin
hModule := LoadLibrary(PChar(AFileName));
if hModule = 0 then
raise Exception.CreateFmt('file %s failed to load.', [AFileName]);
// Calculate the resource string area and the string index in that area
iSection := AStringIdent div 16 + 1;
iIndexInSection := AStringIdent mod 16;
// If the resource already exists, then read it out of the original data
hResInfo := FindResource(hModule, MakeIntResource(iSection), RT_STRING);
if hResInfo <> 0 then
begin
iLen := SizeOfResource(hModule, hResInfo);
SetLength(ResData, iLen);
CopyMemory(ResData, LockResource(LoadResource(hModule, hResInfo)), iLen);
end;
// Should first close the file, and then update
FreeLibrary(hModule);
// Calculate the new data is written to location
wsNewString := WideString(ANewString);
iLen := Length(wsNewString);
iPos := 0;
for i := 0 to iIndexInSection do
begin
if iPos > High(ResData) then
SetLength(ResData, iPos + 2);
if i <> iIndexInSection then
begin
iSkip := (ReadFromArray(ResData, iPos) + 1) * 2;
Inc(iPos, iSkip);
end;
end;
// Delete the original data and the data behind the temporary
// storage of data to be added
iSkip := (ReadFromArray(ResData, iPos) + 1) * 2;
TempData := Copy(ResData, iPos + iSkip, Length(ResData) - iSkip);
SetLength(ResData, iPos);
SetLength(ResData, iPos + (iLen + 1) * 2 + Length(TempData));
// Write new data
WriteToArray(ResData, iLen, iPos);
for i := 1 to iLen do
WriteToArray(ResData, Ord(wsNewString[i]), iPos);
// Write back to the original data
for i := 0 to High(TempData) do
ResData[iPos + i] := TempData[i];
// Write the data back to file
hUpdate := BeginUpdateResource(PChar(AFileName), False);
if hUpdate = 0 then
raise Exception.CreateFmt(
'cannot write file %s. Please check whether it is open or set read-only.',
[AFileName]);
UpdateResource(hUpdate, RT_STRING, MakeIntResource(iSection), LANG_NEUTRAL,
ResData, Length(ResData));
EndUpdateResource(hUpdate, False);
end;
Kod: Tümünü seç
procedure TForm1.Button1Click(Sender: TObject);
begin
UpdateResString(Edit1.Text, Edit2.Text, 1000);
end;
Örnek projeleri ekte bulabilirsiniz.
- Dosya ekleri
-
- tool_to_modify_exe.rar
- (3.15 KiB) 216 kere indirildi
-
- app_to_change_strings.rar
- (2.4 KiB) 178 kere indirildi
Re: Derlenmiş EXE dosya içindeki sabit yazıları değiştirmek
Uygulaman bir veritabanı kullanıyor mu ? veya uygulaman internetsiz kullanımı mümkün mü ?
Çaylak Delphici
Yakup ULUTAŞ
Yakup ULUTAŞ
Re: Derlenmiş EXE dosya içindeki sabit yazıları değiştirmek
@ertank çok teşekkür ederim. Eline koluna sağlık. Üşenmeden uzun uzun anlatmışsın.
Bu arada Delphi 7 kullanıyorum. Uses kısmındaki System.types yerine sadece types yazmam yeterliydi.
Şimdi bir sorunum kaldı. Program project >> Options >> version info kısmındaki sabit değerleri değiştirmek.
Yani firma adı, web adresi program başlığı vs. bilgileri. Bunlar da RES dosyalar gibi mi saklanıyor?
@yhackup uygulamalarımda mysql kullanıyorum. Internetsiz kullanmak mümkün.
Ama bu değerleri veritabanına yazmak istemiyorum. Müşterim hariç kimse değiştiremesin bu bilgileri.
Bu arada Delphi 7 kullanıyorum. Uses kısmındaki System.types yerine sadece types yazmam yeterliydi.
Şimdi bir sorunum kaldı. Program project >> Options >> version info kısmındaki sabit değerleri değiştirmek.
Yani firma adı, web adresi program başlığı vs. bilgileri. Bunlar da RES dosyalar gibi mi saklanıyor?
@yhackup uygulamalarımda mysql kullanıyorum. Internetsiz kullanmak mümkün.
Ama bu değerleri veritabanına yazmak istemiyorum. Müşterim hariç kimse değiştiremesin bu bilgileri.
Re: Derlenmiş EXE dosya içindeki sabit yazıları değiştirmek
Aşağıdaki linkteki hazır uygulama işinizi görecektir. Kaynak koduna sayfadaki link üzerinden ulaşabilirsiniz.
https://jasontpenny.com/blog/2009/09/05 ... es-or-exe/
https://jasontpenny.com/blog/2009/09/05 ... es-or-exe/