Jak załadować naszą aplikację do innej pamięci

lofix
program Project1;

{$IMAGEBASE $13140000}

uses
  Windows;

function Main(dwEntryPoint: Pointer): longword; stdcall;
begin
  {grzebiemy w notatniku}
  LoadLibrary('kernel32.dll');
  LoadLibrary('user32.dll');
  MessageBox(0, 'Czesc, teraz jestem tu w pamieci jako inny proces!', ':P', 0);
  MessageBox(0, 'Teraz mozemy tu robic co chcemy', ':P', 0);
  MessageBox(0, 'Nawet jezeli skasujesz *.exe, ja tu pozostane', ':P', 0);
  MessageBox(0, 'skasuj mnie (plik *.exe)', ':P', 0);
  MessageBox(0, 'widzisz?', ':P', 0);
  MessageBox(0, 'mowilem Ci', ':P', 0);
  MessageBox(0, 'Dobra, PAPA.', ':P', 0);
  MessageBox(0, 'Notatnik sam zamkne za Ciebie ;)', ':P', 0);
  ExitProcess(0);
  Result := 0;
end;

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
  {zaczynamy nowy proces}
  CreateProcess(nil, 'notepad', nil, nil, False, 0, nil, nil, StartupInfo, ProcessInfo);
  {dajemy mu troszke czasu}
  Sleep(500);
  {no i wchodzimy w inna aplikacje :)}
  GetWindowThreadProcessId(FindWindow('Notepad', nil), @PID);
  ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
  Inject(ProcessHandle, @Main);//oto nasza procedura "wsadowa"
  CloseHandle(ProcessHandle);
  //i to wszystko :)
//oprocz notatnika mozemy wykorzystac kazda uruchomiona w windowsie...
end.

Autor: Aphex

FAQ

7 komentarzy

a jak to zrobić np z GG bo podaje nazwe procesu czyli GG i nic sie nie dzieje. Z notatnikiem jest ok.

tekst z gwiazdek? banal, jest to gdzies w serwisie

Może wiesz jak uzyskać tekst z gwiazek z innych aplikacji? To jest SUPER!!!

o to sie nie martw, nie mam zamiaru wykorzystac tego do niecnych celow!! a pozatym jezeli sie boisz o to czy ktos to wykorzysta to po co to tu umieszczasz?? (moze w celach czystko edukacyjnych ;))

szukalem tego !! gdzie to znalazles?? niewazne fajnie thx!!

mam tylko nadzieje ze nie wykorzystasz tego w niecnych celach..bo jak nie..to przyjde po ciebie.. :>
asymilator.

a mi to nie działa. to jest uzależnione od OS'a czy coś źle robie ??