ورود

View Full Version : اجرای فایل در حافظه



Marine
سه شنبه 03 آذر 1383, 22:58 عصر
درود

دوستان سوالی داشتم

من فایلی رو کنار برنامه بصورت کد شده قرار دادم ، میخوام بدون اینکه این فایل رو بعد از دیکد کردن روی هارد ذخیره کنم ، مستقیما از روی حاظه بخونم

ممنون میشم اگه راه حلی به بنده نشون بدید

Marine
چهارشنبه 04 آذر 1383, 15:53 عصر
درود

دوستان ، کسی جواب سوال رو نمدونه ؟!!!

MiRHaDi
چهارشنبه 04 آذر 1383, 22:23 عصر
سلام
فایل اجرایی است یا باینری ؟
از Stream استفاده کن ! بعد DeCode کن بعد از اون استفاده کن
بای

Marine
چهارشنبه 04 آذر 1383, 22:40 عصر
درود
فایل اجرای است

اگر ممکنه مثالی عملی بزنید که بنده اطلاعاتم کمه

francosoft
سه شنبه 10 آذر 1383, 10:57 صبح
سلام دوست عزیز

اگر بلد شدی به من هم بگو

منم مثل تو دارم در به در دنبالش می گردم.

منتظرم

موفق باشید :)

Marine
سه شنبه 10 آذر 1383, 22:57 عصر
دوستان مثل اینکه حال توضیح دادن جواب های سخت را ندارند ! :wink:

Inprise
شنبه 05 دی 1383, 11:10 صبح
procedure CreateProcessEx(FileMemory: pointer);
var
BaseAddress, Bytes, HeaderSize, InjectSize, SectionLoop, SectionSize: dword;
Context: TContext;
FileData: pointer;
ImageNtHeaders: PImageNtHeaders;
InjectMemory: pointer;
ProcInfo: TProcessInformation;
PSections: ^TSections;
StartInfo: TStartupInfo;
begin
ImageNtHeaders := pointer(dword(dword(FileMemory)) + dword(PImageDosHeader(FileMemory)._lfanew));
InjectSize := ImageSize(FileMemory);
GetMem(InjectMemory, InjectSize);
try
FileData := InjectMemory;
HeaderSize := ImageNtHeaders.OptionalHeader.SizeOfHeaders;
PSections := pointer(pchar(@(ImageNtHeaders.OptionalHeader)) + ImageNtHeaders.FileHeader.SizeOfOptionalHeader);
for SectionLoop := 0 to ImageNtHeaders.FileHeader.NumberOfSections - 1 do
begin
if PSections[SectionLoop].PointerToRawData < HeaderSize then HeaderSize := PSections[SectionLoop].PointerToRawData;
end;
CopyMemory(FileData, FileMemory, HeaderSize);
FileData := pointer(dword(FileData) + GetAlignedSize(ImageNtHeaders.OptionalHeader.SizeO fHeaders, ImageNtHeaders.OptionalHeader.SectionAlignment));
for SectionLoop := 0 to ImageNtHeaders.FileHeader.NumberOfSections - 1 do
begin
if PSections[SectionLoop].SizeOfRawData > 0 then
begin
SectionSize := PSections[SectionLoop].SizeOfRawData;
if SectionSize > PSections[SectionLoop].Misc.VirtualSize then SectionSize := PSections[SectionLoop].Misc.VirtualSize;
CopyMemory(FileData, pointer(dword(FileMemory) + PSections[SectionLoop].PointerToRawData), SectionSize);
FileData := pointer(dword(FileData) + GetAlignedSize(PSections[SectionLoop].Misc.Virtual Size, ImageNtHeaders.OptionalHeader.SectionAlignment));
end
else
begin
if PSections[SectionLoop].Misc.VirtualSize <> 0 then FileData := pointer(dword(FileData) + GetAlignedSize(PSections[SectionLoop].Misc.Virtual Size, ImageNtHeaders.OptionalHeader.SectionAlignment));
end;
end;
ZeroMemory(@StartInfo, SizeOf(StartupInfo));
ZeroMemory(@Context, SizeOf(TContext));
CreateProcess(nil, pchar(ParamStr(0)), nil, nil, False, CREATE_SUSPENDED, nil, nil, StartInfo, ProcInfo);
Context.ContextFlags := CONTEXT_FULL;
GetThreadContext(ProcInfo.hThread, Context);
ReadProcessMemory(ProcInfo.hProcess, pointer(Context.Ebx + 8), @BaseAddress, 4, Bytes);
VirtualAllocEx(ProcInfo.hProcess, pointer(ImageNtHeaders.OptionalHeader.ImageBase), InjectSize, MEM_RESERVE or MEM_COMMIT, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(ProcInfo.hProcess, pointer(ImageNtHeaders.OptionalHeader.ImageBase), InjectMemory, InjectSize, Bytes);
WriteProcessMemory(ProcInfo.hProcess, pointer(Context.Ebx + 8), @ImageNtHeaders.OptionalHeader.ImageBase, 4, Bytes);
Context.Eax := ImageNtHeaders.OptionalHeader.ImageBase + ImageNtHeaders.OptionalHeader.AddressOfEntryPoint;
SetThreadContext(ProcInfo.hThread, Context);
ResumeThread(ProcInfo.hThread);
finally
FreeMemory(InjectMemory);
end;
end;

:)

BOB
شنبه 12 دی 1383, 03:09 صبح
سلام.
ببخشید این procedure به چه یونیتی نیاز داره .؟؟
آخه من هیچ تعریفی برای TSections و ImageSize و GetAlignedSize پیدا نکردم.

Inprise
شنبه 12 دی 1383, 07:33 صبح
function GetAlignedSize(Size: dword; Alignment: dword): dword;
begin
if ((Size mod Alignment) = 0) then
begin
Result := Size;
end
else
begin
Result := ((Size div Alignment) + 1) * Alignment;
end;
end;

function ImageSize(Image: pointer): dword;
var
Alignment: dword;
ImageNtHeaders: PImageNtHeaders;
PSections: ^TSections;
SectionLoop: dword;
begin
ImageNtHeaders := pointer(dword(dword(Image)) + dword(PImageDosHeader(Image)._lfanew));
Alignment := ImageNtHeaders.OptionalHeader.SectionAlignment;
if ((ImageNtHeaders.OptionalHeader.SizeOfHeaders mod Alignment) = 0) then
begin
Result := ImageNtHeaders.OptionalHeader.SizeOfHeaders;
end
else
begin
Result := ((ImageNtHeaders.OptionalHeader.SizeOfHeaders div Alignment) + 1) * Alignment;
end;
PSections := pointer(pchar(@(ImageNtHeaders.OptionalHeader)) + ImageNtHeaders.FileHeader.SizeOfOptionalHeader);
for SectionLoop := 0 to ImageNtHeaders.FileHeader.NumberOfSections - 1 do
begin
if PSections[SectionLoop].Misc.VirtualSize <> 0 then
begin
if ((PSections[SectionLoop].Misc.VirtualSize mod Alignment) = 0) then
begin
Result := Result + PSections[SectionLoop].Misc.VirtualSize;
end
else
begin
Result := Result + (((PSections[SectionLoop].Misc.VirtualSize div Alignment) + 1) * Alignment);
end;
end;
end;
end;

-


type
TSections = array [0..0] of TImageSectionHeader;

-

<span dir=ltr>i am sorry :) </span>

BOB
جمعه 18 دی 1383, 02:48 صبح
سلام
ببخشید جناب inprise این پروسیجر جواب نمیده.
در خط آخر CreateProcessEx روی

ResumeThread&#40;ProcInfo.hThread&#41;;
برنامه قفل میکند.
لطفا بگین اشکال کار از کجاست.
متشکرم

Inprise
جمعه 18 دی 1383, 03:13 صبح
متاسفانه علم غیب ندارم . باید برنامه ات رو ضمیمه کنی تا بشه بررسی کرد کجا اشتباه کردی .

BOB
جمعه 18 دی 1383, 03:47 صبح
سلام.
من پروسیجر شما رو به این صورت فراخوانی کردم


f&#58;=TmemoryStraem.creat;
f.loadfromstream...........;
CreateProcessEx&#40;f.memory&#41;;

ولی همیشه روی اون خط که گفتم قفل میکنه.

Inprise
شنبه 19 دی 1383, 17:51 عصر
تمام کدت رو ضمیمه کن . اینطوری کمکی نمیتونم بهت بکنم .

BOB
یک شنبه 20 دی 1383, 02:20 صبح
سلام
این هم کد برنامه .
متشکرم.

francosoft
دوشنبه 21 دی 1383, 17:01 عصر
سلام

لطفا اگر کسی می دونه لطف کنه و یک مثال اجرایی با فایل بفرسته.
اینجوری فایده ندارد دوستان عزیز

مرسی