Programowanie w języku Delphi » FAQ

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

  • 7 komentarzy
  • 409 odsłon
  • Oceń ten tekst jako pierwszy
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
[email protected]

7 komentarzy

torzo 2005-02-13 17:27

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

lofix 2003-12-11 22:27

tekst z gwiazdek? banal, jest to gdzies w serwisie

wojtekdodo 2003-12-02 15:18

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

nediam 2003-11-14 13:03

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 ;))

nediam 2003-11-13 10:32

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

lofix 2003-11-13 23:40

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

Adamo 2004-08-27 19:33

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