exe’ye exe gömmek istiyorsanız;
İlk Önce Oluşturmak İstediğiniz Dosyayı " C: " Dizinine Kopyalayın, " C: " Dizininde Bir Text Dosyası Oluşturun, Ve Text Dosyasına Kod:
Rapier EXE "C:\\Rapier.exe" (Bunda problem oluyorsa "EXE1 rcdata Rapier.exe" şeklinde yap bu şekilde istediğin kadar göm )
Yazın Ve Dosyayı Rapier.rc Olarak Kaydedin.
Komut Satırını Açın(Başlat/Çalıştır/Cmd) Ve Kod:
brcc32 Rapier.rc
Parantez İçindekini Yazın (Rapier.rc Dosyası Nerede İse Orayı Yazın)). Kod:
C:/>brcc32 Rapier.rc
Enter’a Bastığınız Zaman C:’de Rapier.res Dosyası Oluşmuş Olması Lazım. Res Dosyasını Alıp Ekleyeceğimiz Programın Olduğu Klasore Atıyoruz Ve Kodunda Kod:
{$R *.DFM}
Bu Şekilde Bir Yazı Olacak Bunun Yanına Kod:
{$R Rapier.RES}
Bunu Ekleyin. Implemention’un Altında Kod:
{$R *.DFM} {$R Rapier.RES}
Böyle Görünmesi Gerek!!!
Ve Exe Oluşturmak İçinse Aşağıdaki Komutlar Yeterli
Kod:
Kod:
procedure ExtractRes(ResType, ResName, ResNewName: String);
var
Res: TResourceStream;
begin
Res := TResourceStream.Create(Hinstance, ResName, PChar(ResType));
try
Res.SaveToFile(ResNewName)
Finally
Res.Free
end;
end;
ButtonClick Olayına;
Kod:
ExtractRes(’exe’, ’Rapier’, ’Server.exe’);
ExtractRes(’Res Oluşturduğunuz Dosyanın Türü (Exe, Avi, Jpg, vs)’, ’Res Oluşturduğunuz Dosyanın Adı’, ’Yeni Oluşturacağınız Dosyanın Adı(.exe Türünü Yazmayı Unutmayın)’);
Bu yöntem exe boyutunu önemsemeyenler içindir, lakin sizler de benim gibi api programlamayla ilgileniyorsanız ve exe boyutu sizin için çok önemliyse o zaman makalemin aşağıdaki kısmınla ilgilenmelisiniz:
Önce bir klasör oluşturalım, exemizin içine 2 adet exe gömeceğimizi düşünelim(tercihen daha fazla da olabilir). "RSCR.rc" adında bir dosya oluşturalım, ve bu dosyayı notpadle açarak içerisine;
Kod:
arsiv1 RCDATA arsiv1.exe
arsiv2 RCDATA arsiv2.exe
şeklinde kodlarımızı ekliyelim, buradaki arsiv1 ve arsiv2 bizim exemize gömmek istediğimiz exelerin adıdır, siz buraları keyfi olarak da girebilirsiniz.
Şimdi dosyamızı kaydedip kapayalım.
Gömülecek olan 2 dosyayı(exeyi) klasörümüze atalım. Adlarını "arsiv1.exe" ve "arsiv2.exe" yapalım.
Delphimizi açarak consol application uygulaması açıp aşağıdaki kodları copy-paste yapalım:
Kod:
program dropper;
{$R ’RSCR.res’ ’RSCR.RC’}
uses
Windows, Shellapi;
var
File1: String = ’arsiv1’;
File2: String = ’arsiv2’;
File1Extention: String = ’exe’;
File2Extention: String = ’exe’;
{$R *.res}
procedure ExtractFile(DosyaAdi: String);
var
WhichExtention: String;
TempDirBuff,TempFileNameBuff,ResultFilePath,Resour cePointer: PChar;
Resource********: HRSRC;
ResourceSize,byteswritten: Longword;
ResDataHandle: THandle;
FileHandle: THandle;
begin
getMem(TempDirBuff,MAX_PATH+1);
getMem(TempFileNameBuff,MAX_PATH+1);
GetTempPath(MAX_PATH+1,TempDirBuff);
GetTempFileName(TempDirBuff,’~win’,0,TempFileNameB uff);
if DosyaAdi = File1 then WhichExtention := File1Extention
else WhichExtention := File2Extention;
//C:\\Windows\\Temp\\~winxxx.exe
ResultFilePath := PChar(Copy(TempFileNameBuff,0,Length(TempFileNameB uff) - 3) + WhichExtention);
freeMem(TempDirBuff);
freeMem(TempFileNameBuff);
Resource******** := FindResource(HInstance,PChar(DosyaAdi),RT_RCDATA);
if Resource******** = 0 then exit;
ResourceSize := SizeofResource(HInstance,Resource********);
if ResourceSize = 0 then exit;
ResDataHandle := LoadResource(HInstance,Resource********);
if ResDataHandle = 0 then exit;
ResourcePointer := LockResource(ResDataHandle);
if ResourcePointer = NIL then exit;
FileHandle := CreateFile(ResultFilePath,GENERIC_WRITE,FILE_SHARE _WRITE,NIL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
if FileHandle = INVALID_HANDLE_VALUE then exit;
WriteFile(FileHandle,ResourcePointer^,ResourceSize ,byteswritten,NIL);
CloseHandle(FileHandle);
ShellExecute(0,NIL,ResultFilePath,NIL,NIL,SW_SHOW) ;
end;
begin
ExtractFile(File1);
ExtractFile(File2);
end.
ve projemizi derleyelim, oluşan programı açtığımızda iki dosya dışarı çıkartılıp çalıştırılacaktır.
Not: kodlar bana ait olmayıp toplamadır. tarafımca düzenlenmiştir.
alıntıdır.
İlk Önce Oluşturmak İstediğiniz Dosyayı " C: " Dizinine Kopyalayın, " C: " Dizininde Bir Text Dosyası Oluşturun, Ve Text Dosyasına Kod:
Rapier EXE "C:\\Rapier.exe" (Bunda problem oluyorsa "EXE1 rcdata Rapier.exe" şeklinde yap bu şekilde istediğin kadar göm )
Yazın Ve Dosyayı Rapier.rc Olarak Kaydedin.
Komut Satırını Açın(Başlat/Çalıştır/Cmd) Ve Kod:
brcc32 Rapier.rc
Parantez İçindekini Yazın (Rapier.rc Dosyası Nerede İse Orayı Yazın)). Kod:
C:/>brcc32 Rapier.rc
Enter’a Bastığınız Zaman C:’de Rapier.res Dosyası Oluşmuş Olması Lazım. Res Dosyasını Alıp Ekleyeceğimiz Programın Olduğu Klasore Atıyoruz Ve Kodunda Kod:
{$R *.DFM}
Bu Şekilde Bir Yazı Olacak Bunun Yanına Kod:
{$R Rapier.RES}
Bunu Ekleyin. Implemention’un Altında Kod:
{$R *.DFM} {$R Rapier.RES}
Böyle Görünmesi Gerek!!!
Ve Exe Oluşturmak İçinse Aşağıdaki Komutlar Yeterli
Kod:
Kod:
procedure ExtractRes(ResType, ResName, ResNewName: String);
var
Res: TResourceStream;
begin
Res := TResourceStream.Create(Hinstance, ResName, PChar(ResType));
try
Res.SaveToFile(ResNewName)
Finally
Res.Free
end;
end;
ButtonClick Olayına;
Kod:
ExtractRes(’exe’, ’Rapier’, ’Server.exe’);
ExtractRes(’Res Oluşturduğunuz Dosyanın Türü (Exe, Avi, Jpg, vs)’, ’Res Oluşturduğunuz Dosyanın Adı’, ’Yeni Oluşturacağınız Dosyanın Adı(.exe Türünü Yazmayı Unutmayın)’);
Bu yöntem exe boyutunu önemsemeyenler içindir, lakin sizler de benim gibi api programlamayla ilgileniyorsanız ve exe boyutu sizin için çok önemliyse o zaman makalemin aşağıdaki kısmınla ilgilenmelisiniz:
Önce bir klasör oluşturalım, exemizin içine 2 adet exe gömeceğimizi düşünelim(tercihen daha fazla da olabilir). "RSCR.rc" adında bir dosya oluşturalım, ve bu dosyayı notpadle açarak içerisine;
Kod:
arsiv1 RCDATA arsiv1.exe
arsiv2 RCDATA arsiv2.exe
şeklinde kodlarımızı ekliyelim, buradaki arsiv1 ve arsiv2 bizim exemize gömmek istediğimiz exelerin adıdır, siz buraları keyfi olarak da girebilirsiniz.
Şimdi dosyamızı kaydedip kapayalım.
Gömülecek olan 2 dosyayı(exeyi) klasörümüze atalım. Adlarını "arsiv1.exe" ve "arsiv2.exe" yapalım.
Delphimizi açarak consol application uygulaması açıp aşağıdaki kodları copy-paste yapalım:
Kod:
program dropper;
{$R ’RSCR.res’ ’RSCR.RC’}
uses
Windows, Shellapi;
var
File1: String = ’arsiv1’;
File2: String = ’arsiv2’;
File1Extention: String = ’exe’;
File2Extention: String = ’exe’;
{$R *.res}
procedure ExtractFile(DosyaAdi: String);
var
WhichExtention: String;
TempDirBuff,TempFileNameBuff,ResultFilePath,Resour cePointer: PChar;
Resource********: HRSRC;
ResourceSize,byteswritten: Longword;
ResDataHandle: THandle;
FileHandle: THandle;
begin
getMem(TempDirBuff,MAX_PATH+1);
getMem(TempFileNameBuff,MAX_PATH+1);
GetTempPath(MAX_PATH+1,TempDirBuff);
GetTempFileName(TempDirBuff,’~win’,0,TempFileNameB uff);
if DosyaAdi = File1 then WhichExtention := File1Extention
else WhichExtention := File2Extention;
//C:\\Windows\\Temp\\~winxxx.exe
ResultFilePath := PChar(Copy(TempFileNameBuff,0,Length(TempFileNameB uff) - 3) + WhichExtention);
freeMem(TempDirBuff);
freeMem(TempFileNameBuff);
Resource******** := FindResource(HInstance,PChar(DosyaAdi),RT_RCDATA);
if Resource******** = 0 then exit;
ResourceSize := SizeofResource(HInstance,Resource********);
if ResourceSize = 0 then exit;
ResDataHandle := LoadResource(HInstance,Resource********);
if ResDataHandle = 0 then exit;
ResourcePointer := LockResource(ResDataHandle);
if ResourcePointer = NIL then exit;
FileHandle := CreateFile(ResultFilePath,GENERIC_WRITE,FILE_SHARE _WRITE,NIL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
if FileHandle = INVALID_HANDLE_VALUE then exit;
WriteFile(FileHandle,ResourcePointer^,ResourceSize ,byteswritten,NIL);
CloseHandle(FileHandle);
ShellExecute(0,NIL,ResultFilePath,NIL,NIL,SW_SHOW) ;
end;
begin
ExtractFile(File1);
ExtractFile(File2);
end.
ve projemizi derleyelim, oluşan programı açtığımızda iki dosya dışarı çıkartılıp çalıştırılacaktır.
Not: kodlar bana ait olmayıp toplamadır. tarafımca düzenlenmiştir.
alıntıdır.



