![]() |
|
كيف يمكن وضع ملف تنفيذي داخل ملف تنفيذي - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : كيف يمكن وضع ملف تنفيذي داخل ملف تنفيذي (/showthread.php?tid=3739) |
كيف يمكن وضع ملف تنفيذي داخل ملف تنفيذي - ELARAPY - 29-12-2011 كيف يمكن برمجة ملف تنفيذي عند تشغيله يقوم بنسخ ملفات موجوده داخله الى مكان ما ثم يقوم بتشغيلها حيث ان ما بداخله مثلا هو برنامج تنفيذي اخر كيف يمكن وضع ملف تنفيذي داخل ملف تنفيذي - kachwahed - 30-12-2011 السلام عليكم موجوده بداخله: أي مخزنة في طبقة من الملف التنفيذي تسمى "المصادر" Resources تضع الملف فيها بصفته RC_DATA ثم تستخرجه بمثل هذه: PHP كود : function ThrowFile(const ResData, Destination: string; Overwrite: Boolean): Boolean;بالتوفيق. كيف يمكن وضع ملف تنفيذي داخل ملف تنفيذي - me_delphi - 01-01-2012 وعليكم السلام ورحمة الله وبركاته اظافة الى ما دكر ناك طرق أخرى غير الرسورس ك : تحويل الملف الى مصفوقة من البايتات ومن تم نستطيع قراءة المصفوفة واستخراجها على شكل ملف باستعمال أحد دوال API ك WriteFile. اضافة الملف الى نهاية الملف التنفيدي EOF فقط استعمل google وطبق كل ماتجده كيف يمكن وضع ملف تنفيذي داخل ملف تنفيذي - قديم الشوق - 05-01-2012 me&delphi' كتب :تحويل الملف الى مصفوقة من البايتات ومن تم نستطيع قراءة المصفوفة واستخراجها على شكل ملف باستعمال أحد دوال apiكيف نحولها الى مصفوفه من البايتات وشكراً لك كيف يمكن وضع ملف تنفيذي داخل ملف تنفيذي - kachwahed - 06-01-2012 إقتباس :الملف التنفيذي المراد وضعه في الرسورس عند تشغيله ينشئ ملف في نفس الفولدر لكن عند وضعه في الرسورس لا يمكن تشغيله لأن لا يمكن انشاء ذلك الملفلم أفهم، هل من مثال؟ إقتباس :كيف نحولها الى مصفوفه من البايتاتكما يحول كل شيء في الجهاز إلى 0 و1 (طبعا بـ Hex) مثال لصاحبه: PHP كود : typeكيف يمكن وضع ملف تنفيذي داخل ملف تنفيذي - onexite - 25-08-2012 kachwahed كتب : PHP كود : function FileToBytes(sPath:string; var bFile:TByteArray):Boolean;![]() me&delphi' كتب :اضافة الملف الى نهاية الملف التنفيدي eofكيف نجعل الحجم متغير للعدم الخسارة في الحجم لاننا عند القرائة سنحدد عدد البايتات المقروئة كيف يمكن وضع ملف تنفيذي داخل ملف تنفيذي - TF6M - 25-08-2012 "كيف نجعل الحجم متغير للعدم الخسارة في الحجم لاننا عند القرائة سنحدد عدد البايتات المقروئة " - تقريبا نفس الفكرة في تحويل الـ XM إلى *.Pas كود : //04-06-2009 By TF6M
{$WARNINGS OFF}{$HINTS OFF}
{$OPTIMIZATION ON} {$O Off}
Procedure XmToBin (Path:String);
{$IF CompilerVersion >= 17}Inline;{$IFEND}
Var F: TextFile;
XmFile:File Of Byte;
Temp,Index:Byte;
Begin
Try
AssignFile(F,'XM_Bin.Pas');
ReWrite(F);
//
AssignFile(XmFile,Path);
If FileExists(Path)Then ReSet(XmFile)
Else Exit; //IoResult.
//
WriteLn(F,'Const xm : Array[1..'+
IntToStr([COLOR=Red]FileSize[/COLOR](XmFile)+1)+'] Of Byte = (');
Index:=0;
//
While Not Eof(XmFile) Do
Begin
Inc (Index);
Read(XmFile,Temp);
If Index Mod 64 = 0 Then
WriteLn(F,'$'+Inttohex(Temp,2)+',')Else
Write(F,'$'+Inttohex(Temp,2)+',');
End;
Write(F,'$00);');
CloseFile(F);
CloseFile(XmFile);
Except
Exit;
End;
End;بالتوفيق,, كيف يمكن وضع ملف تنفيذي داخل ملف تنفيذي - S.FATEH - 25-08-2012 onexite كتب :كيف نجعل الحجم متغير للعدم الخسارة في الحجم لاننا عند القرائة سنحدد عدد البايتات المقروئة حسب ما فهمت من السآل في يمكنك استخدام تقنية Func-In ... كود : program Builder;
//delphibasics.info & ic0de.org
//Authors: cswi, abhe & steve10120
const
kernel32 = 'kernel32.dll';
MB_YESNO = 4;
MB_OK = 0;
type
PByte = ^Byte;
function BeginUpdateResourceW(pFileName: PWideChar; bDeleteExistingResources: Boolean): Cardinal; stdcall; external kernel32 name 'BeginUpdateResourceW';
function UpdateResourceW(hUpdate: Cardinal; lpType, lpName: PWideChar; wLanguage: Word; lpData: Pointer; cbData: LongWord): Boolean; stdcall; external kernel32 name 'UpdateResourceW';
function EndUpdateResourceW(hUpdate: Cardinal; fDiscard: Boolean): Boolean; stdcall; external kernel32 name 'EndUpdateResourceW';
const
cFuncIn : PWideChar = 'FUNCIN';
type
TGetProcAddress = function (hModule: Cardinal; lpProcName: pAnsiChar): Pointer; stdcall;
TLoadLibraryA = function(lpLibFileName: PAnsiChar): Cardinal; stdcall;
TFuncInRecord = Record
xGetProcAddress : TGetProcAddress;
xLoadLibraryA : TLoadLibraryA;
end;
PFuncInRecord = ^TFuncInRecord;
procedure FuncIn(AFuncInRecord : PFuncInRecord; lpText, lpCaption : pAnsiChar);
type
TMessageBoxA = function (hWnd: Cardinal; lpText, lpCaption: PAnsiChar; uType: LongWord): LongWord; stdcall;
var
szUser32 : array[0..6] of AnsiChar;
szMessageBoxA : array[0..11] of AnsiChar;
xMessageBoxA : TMessageBoxA;
dwResult : LongWord;
begin
szUser32[0] := 'U';
szUser32[1] := 's';
szUser32[2] := 'e';
szUser32[3] := 'r';
szUser32[4] := '3';
szUser32[5] := '2';
szUser32[6] := #0;
szMessageBoxA[0] := 'M';
szMessageBoxA[1] := 'e';
szMessageBoxA[2] := 's';
szMessageBoxA[3] := 's';
szMessageBoxA[4] := 'a';
szMessageBoxA[5] := 'g';
szMessageBoxA[6] := 'e';
szMessageBoxA[7] := 'B';
szMessageBoxA[8] := 'o';
szMessageBoxA[9] := 'x';
szMessageBoxA[10] := 'A';
szMessageBoxA[11] := #0;
with AFuncInRecord^ do
begin
@xMessageBoxA := xGetProcAddress(xLoadLibraryA(szUser32), szMessageBoxA);
if Assigned(xMessageBoxA) then
begin
dwResult := xMessageBoxA(0, lpText, lpCaption, MB_YESNO);
if dwResult = 6 then
xMessageBoxA(0, lpText, lpCaption, MB_OK);
end;
end;
end;
Function WriteResData(pFile: pointer; Size: integer; pwName: pWideChar):Boolean;
const
pwServerFile : PWideChar = 'Stub.exe' ;
var
hResourceHandle: Cardinal;
begin
hResourceHandle := BeginUpdateResourceW(pwServerFile, False);
Result := UpdateResourceW(hResourceHandle, PWideChar(10), pwName, 0, pFile, Size);
EndUpdateResourceW(hResourceHandle, False);
end;
function SizeOfProc(pAddr: pointer): Cardinal;
var dwSize: Cardinal;
begin
dwSize := 0;
repeat
inc(dwSize);
until PByte(Cardinal(pAddr)+dwSize-1)^ = $C3;
Result := dwSize;
end;
begin
WriteResData(@FuncIn, SizeOfProc(@FuncIn), cFuncIn);
WriteResData(nil, 0, 'PACKAGEINFO');
WriteResData(nil, 0, 'DVCLAL');
end.كود : program Stub;
const
kernel32 = 'kernel32.dll';
MEM_COMMIT = $1000;
PAGE_EXECUTE_READWRITE = $40;
MEM_RELEASE = $8000;
function GetProcAddress(hModule: Cardinal; lpProcName: PAnsiChar): Pointer; stdcall; external kernel32 name 'GetProcAddress';
function LoadLibraryA(lpLibFileName: PAnsiChar): Cardinal; stdcall; external kernel32 name 'LoadLibraryA';
function FindResourceW(hModule: Cardinal; lpName, lpType: PWideChar): Cardinal; stdcall; external kernel32 name 'FindResourceW';
function LoadResource(hModule: Cardinal; hResInfo: Cardinal): Cardinal; stdcall; external kernel32 name 'LoadResource';
function SizeofResource(hModule: Cardinal; hResInfo: Cardinal): LongWord; stdcall; external kernel32 name 'SizeofResource';
function VirtualAlloc(lpvAddress: Pointer; dwSize, flAllocationType, flProtect: LongWord): Pointer; stdcall; external kernel32 name 'VirtualAlloc';
function VirtualFree(lpAddress: Pointer; dwSize, dwFreeType: LongWord): Boolean; stdcall; external kernel32 name 'VirtualFree';
const
cFuncIn : PWideChar = 'FUNCIN';
type
TGetProcAddress = function (hModule: Cardinal; lpProcName: pAnsiChar): Pointer; stdcall;
TLoadLibraryA = function(lpLibFileName: PAnsiChar): Cardinal; stdcall;
TFuncInRecord = Record
xGetProcAddress : TGetProcAddress;
xLoadLibraryA : TLoadLibraryA;
end;
PFuncInRecord = ^TFuncInRecord;
PFuncIn = ^TFuncIn;
TFuncIn = procedure(pData : PFuncInRecord; lpTitle, lpMessage : pAnsiChar);
procedure ResGet(ResName: pwidechar; var data : pointer; var Size:LongWord);
var
ResSrc: Cardinal;
ResGlobal: Cardinal;
begin
ResSrc := FindResourceW(0, ResName, PWideChar(10));
ResGlobal := LoadResource(0, ResSrc);
Data := Pointer(ResGlobal);
Size := SizeofResource(0, ResSrc);
end;
procedure CopyMemory(Destination, Source:Pointer; dwSize:LongWord);
asm
PUSH ECX
PUSH ESI
PUSH EDI
MOV EDI, Destination
MOV ESI, Source
MOV ECX, dwSize
REP MOVSB
POP EDI
POP ESI
POP ECX
end;
var
FuncIn : TFuncIn;
pResource : Pointer;
dwResourceSize : LongWord;
AFuncInRecord : TFuncInRecord;
begin
AFuncInRecord.xGetProcAddress := @GetProcAddress;
AFuncInRecord.xLoadLibraryA := @LoadLibraryA;
ResGet(cFuncIn, pResource, dwResourceSize);
FuncIn := VirtualAlloc(nil, dwResourceSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
CopyMemory(@FuncIn, pResource, dwResourceSize);
FuncIn(@AFuncInRecord,'cswi <3 abhe & steve10120', '<3 p0ke');
VirtualFree(@FuncIn, 0, MEM_RELEASE);
end.كود : https://sites.google.com/site/delphibasics/home/delphibasicscounterstrikewireleases/func-indelphiexampleكيف يمكن وضع ملف تنفيذي داخل ملف تنفيذي - onexite - 26-08-2012 S.FATEH كتب :حسب ما فهمت من السآل في يمكنك استخدام تقنية Func-In ...الكتابة والقرائة في الرسورس ليس موضوعنا نتحدث على طريقة اخرى للدمج وانا وضعت اداة هنا http://www.delphi4arab.net/forum/showthread.php?tid=7837 |