29-12-2011, 09:08 PM
كيف يمكن برمجة ملف تنفيذي عند تشغيله يقوم بنسخ ملفات موجوده داخله الى مكان ما ثم يقوم بتشغيلها حيث ان ما بداخله مثلا هو برنامج تنفيذي اخر
قل إن صلاتي ونسكي ومحياي ومماتي لله رب العالمين
|
كيف يمكن وضع ملف تنفيذي داخل ملف تنفيذي
|
|
29-12-2011, 09:08 PM
كيف يمكن برمجة ملف تنفيذي عند تشغيله يقوم بنسخ ملفات موجوده داخله الى مكان ما ثم يقوم بتشغيلها حيث ان ما بداخله مثلا هو برنامج تنفيذي اخر
قل إن صلاتي ونسكي ومحياي ومماتي لله رب العالمين
30-12-2011, 10:03 PM
السلام عليكم
موجوده بداخله: أي مخزنة في طبقة من الملف التنفيذي تسمى "المصادر" Resources تضع الملف فيها بصفته RC_DATA ثم تستخرجه بمثل هذه: PHP كود : function ThrowFile(const ResData, Destination: string; Overwrite: Boolean): Boolean;بالتوفيق.
01-01-2012, 07:34 PM
وعليكم السلام ورحمة الله وبركاته
اظافة الى ما دكر ناك طرق أخرى غير الرسورس ك : تحويل الملف الى مصفوقة من البايتات ومن تم نستطيع قراءة المصفوفة واستخراجها على شكل ملف باستعمال أحد دوال API ك WriteFile. اضافة الملف الى نهاية الملف التنفيدي EOF فقط استعمل google وطبق كل ماتجده
لا اله الا أنت سبحانك اني كنت من الضالمين
05-01-2012, 10:25 PM
me&delphi' كتب :تحويل الملف الى مصفوقة من البايتات ومن تم نستطيع قراءة المصفوفة واستخراجها على شكل ملف باستعمال أحد دوال apiكيف نحولها الى مصفوفه من البايتات وشكراً لك
06-01-2012, 08:56 AM
إقتباس :الملف التنفيذي المراد وضعه في الرسورس عند تشغيله ينشئ ملف في نفس الفولدر لكن عند وضعه في الرسورس لا يمكن تشغيله لأن لا يمكن انشاء ذلك الملفلم أفهم، هل من مثال؟ إقتباس :كيف نحولها الى مصفوفه من البايتاتكما يحول كل شيء في الجهاز إلى 0 و1 (طبعا بـ Hex) مثال لصاحبه: PHP كود : type
25-08-2012, 09:26 AM
kachwahed كتب : PHP كود : function FileToBytes(sPath:string; var bFile:TByteArray):Boolean;![]() me&delphi' كتب :اضافة الملف الى نهاية الملف التنفيدي eofكيف نجعل الحجم متغير للعدم الخسارة في الحجم لاننا عند القرائة سنحدد عدد البايتات المقروئة
25-08-2012, 11:12 PM
"كيف نجعل الحجم متغير للعدم الخسارة في الحجم لاننا عند القرائة سنحدد عدد البايتات المقروئة "
- تقريبا نفس الفكرة في تحويل الـ 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;بالتوفيق,, I'M Fly Like A G6
25-08-2012, 11:40 PM
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
و لرب نازلة يضيق لها الفتى ذرعا و عند الله منها المخرج
ضاقت فلما استحكمت حلقاتها فرجت و كنت اضنها لا تفرج
26-08-2012, 12:19 PM
S.FATEH كتب :حسب ما فهمت من السآل في يمكنك استخدام تقنية Func-In ...الكتابة والقرائة في الرسورس ليس موضوعنا نتحدث على طريقة اخرى للدمج وانا وضعت اداة هنا http://www.delphi4arab.net/forum/showthr...p?tid=7837 |
|
|