PDA

View Full Version : سوال: جلوگیری از اجرای فایل (با پسوورد)



بمب منطقی
دوشنبه 23 آذر 1388, 22:32 عصر
با سلام خدمت اساتید:

من کل سایت رو سرچ زدم و جوابهایی رو هم پیدا کردم ولی به نتیجه مرد نظرم نرسیدم.

میخوام برنامه ای بنویسم که بر روی فایلهای اجرایی پسوورد بزاره ( احتمالا میگید از یکی از روشهای رمزنگاری استفاده کن!! ) ولی من نمیخوام فایل اجرایی بعد از گرفتن پسوورد رمزگشایی بشه و اصل فایل در دسترس قرار بگیره.فقط میخوام فایل بعد گرفتن پسوورد اجرا بشه.امنیت برام مهم نیست.فقط میخوام در مقابل کاربران مبتدی مقاومت کنه.

با تشکر فراوان.

tdkhakpur
دوشنبه 23 آذر 1388, 22:52 عصر
یعنی فایلهای اجرایی دیگران که پسورد نمیگیرد را پسورد دار کنید و موقع اجرا پسورد بگیرد؟

بمب منطقی
دوشنبه 23 آذر 1388, 23:43 عصر
دقیقا جمله شما ولی با یک تفاوت:


یعنی فایلهای اجرایی دیگران که پسورد ندارد را پسورد دار کنید و موقع اجرا پسورد بگیرد؟

بمب منطقی
دوشنبه 23 آذر 1388, 23:49 عصر
من خودم یه تئوریئی به ذهنم رسیده ولی پیاده سازیش رو نمیدونم به چه صورته؟

1- فایل اجرایی به همراه پسووردی که از کاربر میگیره Encrypt بشه و بصورت یک فایل AutoDecrypt در بیاد
2- موقع decrypt بعد از گرفتن پسورد از کاربر کل فایل decrypt شده در یک حافظه stream قرار بگیره
3- حافظه stream به پروسس تبدیل و اجرا بشه

joker
سه شنبه 24 آذر 1388, 01:14 صبح
من خودم یه تئوریئی به ذهنم رسیده ولی پیاده سازیش رو نمیدونم به چه صورته؟

یک روش ، خدمت شما .....


1Add Section: 
2、Set INT3
3、Add Import Functions
4、Add Shell Code

بمب منطقی
سه شنبه 24 آذر 1388, 02:49 صبح
جساراتا هر دو sample موجود در فایل ضمیمه تان توسط آنتی ویروس سیستمم شناسائی شدن!!
لطفا در مورد طرز عملکرد برنامه کمی بیشتر توضیح بدین
البته من به نحوه پیاده سازی این روش نیاز دارم ، ولی باز از زحمتی که کشیدین ممنونم

joker
سه شنبه 24 آذر 1388, 10:37 صبح
به خاطر طرز کارش ممکنه بعضی آنتی ویروسها بهش گیر بدن چون داره به فایل exe یک شل اجرایی اضافه میکنه ( روشی که ویروسها برای آلوده کردن برنامه ها بکار میبرند(

اول یک چیزی مینویسید که فقط کارش پسورد گرفتن باشه ، اون را به عنوان یک سکشن به آخر فایل exe اضافه کنید بعد OEP را به ابتدای اون سکشن منتقل کنید و در انتهای اون هم باید OEP اصلی را قرار بدین ( تئوریش راحته :لبخند:توی عمل دردسر های سروکله زدن با Pe header را داره :لبخندساده:



1- فایل اجرایی به همراه پسووردی که از کاربر میگیره Encrypt بشه و بصورت یک فایل AutoDecrypt در بیاد
2- موقع decrypt بعد از گرفتن پسورد از کاربر کل فایل decrypt شده در یک حافظه stream قرار بگیره
3- حافظه stream به پروسس تبدیل و اجرا بشه

این روش را من برای پروتکتورم استفاده کرده بودم ، اینم شدنیه ، سورس هم توی همین انجمن هست.البته با ذکر این نکته که این روش هم به علت اجرای یک exe به این صورتی که گفتید گاها توسط آنتی ویروسها به عنوان یک فایل خطرناک شناسائی میشه.

بمب منطقی
سه شنبه 24 آذر 1388, 12:25 عصر
از راهنمائیتون خیلی ممنونم.

این روش را من برای پروتکتورم استفاده کرده بودم ، اینم شدنیه ، سورس هم توی همین انجمن هست.البته با ذکر این نکته که این روش هم به علت اجرای یک exe به این صورتی که گفتید گاها توسط آنتی ویروسها به عنوان یک فایل خطرناک شناسائی میشه.
من تو فروم خیلی سرچ زدم ولی تاپیکی با این موضوع پیدا نکردم. اگه Link me خیلی ممنون میشم:لبخند: و یا اگه Title دقیق پستتون بخاطرتون هست بفرمائید تا از Profile شما پیداش کنم.

خیلی ممنونم:لبخندساده:

tdkhakpur
سه شنبه 24 آذر 1388, 12:39 عصر
اول یک چیزی مینویسید که فقط کارش پسورد گرفتن باشه ، اون را به عنوان یک سکشن به آخر فایل exe اضافه کنید بعد OEP را به ابتدای اون سکشن منتقل کنید و در انتهای اون هم باید OEP اصلی را قرار بدین ( تئوریش راحته :لبخند:توی عمل دردسر های سروکله زدن با Pe header را داره :لبخندساده:

این روشها اساسا نوعی تزریق کد هست که به مرور زمان توسط آنتی ویروسهای جدید کشف خواهند شد.
روش بهتر اینه که شما از طریق hook این کار را انجام بدید و جلوی رخدادها را برای نرم افزار مورد نظر تا وقتی که پسورد برنامه شما صحیح نباشد داده نشود.
در غیر اینصورت راهی هست که فقط برای کارهای مخرب به کار میرود و قابل واگذاری هم نیست..(شرمنده):لبخندساده:

joker
سه شنبه 24 آذر 1388, 12:54 عصر
این روشها اساسا نوعی تزریق کد هست که به مرور زمان توسط آنتی ویروسهای جدید کشف خواهند شد.
روش بهتر اینه که شما از طریق hook این کار را انجام بدید و جلوی رخدادها را برای نرم افزار مورد نظر تا وقتی که پسورد برنامه شما صحیح نباشد داده نشود.
در غیر اینصورت راهی هست که فقط برای کارهای مخرب به کار میرود و قابل واگذاری هم نیست..(شرمنده):لبخندساده:

اما ( به نقل از دانشگاه ازاد اسلامی واحد دولت آباد !!! )
اجرا کردن یک فایل اجرایی در حافظه
http://www.iaudolatabad.ac.ir/other-emkanat/maghalat/computer-article/delphi/51-decrypt-and-run-executable-file-from-memory.aspx.html



unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
OpenDialog1: TOpenDialog;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
type
TSections = array [0..0] of TImageSectionHeader;


function GetAlignedSize(Size: dword; Alignment: dword): dword;
begin
if ((Size mod Alignment) = 0) then
Result := Size
else
Result := ((Size div Alignment) + 1) * Alignment;
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;

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.VirtualSize, ImageNtHeaders.OptionalHeader.SectionAlignment));
end
else
begin
if PSections[SectionLoop].Misc.VirtualSize <> 0 then FileData := pointer(dword(FileData) + GetAlignedSize(PSections[SectionLoop].Misc.VirtualSize, 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;

procedure TForm1.Button1Click(Sender: TObject);
var
MyStream: TMemoryStream;
begin
if OpenDialog1.Execute then
begin
MyStream := TMemoryStream.Create;
try
MyStream.LoadFromFile(OpenDialog1.FileName);
//MyStream.LoadFromStream(yourstream);
CreateProcessEx(MyStream.Memory);
finally
MyStream.Free;
end;

end;
end;

end.

بمب منطقی
چهارشنبه 25 آذر 1388, 01:35 صبح
اووووا چه خبر بوده اینجا!!
مدیر WhiteHat این پست هایی که پاک کردین جنبه علمی نداشتن که پاکشون کردین؟ :ناراحت:

بمب منطقی
چهارشنبه 25 آذر 1388, 01:42 صبح
روش بهتر اینه که شما از طریق hook این کار را انجام بدید و جلوی رخدادها را برای نرم افزار مورد نظر تا وقتی که پسورد برنامه شما صحیح نباشد داده نشود.
منظورتون استفاده از Taskkill ویندوزه؟ یکم اگه میشه توضیح بدین


در غیر اینصورت راهی هست که فقط برای کارهای مخرب به کار میرود و قابل واگذاری هم نیست..(شرمنده):لبخندساده:
یک توضیح کلی هم نمیتونید بدین؟:ناراحت:


اما ( به نقل از دانشگاه ازاد اسلامی واحد دولت آباد !!! )
اجرا کردن یک فایل اجرایی در حافظه
برنامه مفیدی بود واقعا دستتون درد نکنه :لبخندساده: