WriteProcessMemory w praktyce (wlasny loader)

Odpowiedz Nowy wątek
2006-08-27 11:16
0

Witam,

jak uzyc funkcji WriteProcessMemory w praktyce? (WriteProcessMemory)

chodzi mi o to zeby program tworzyl nowy proces przez funkcje API CreateProcess z parametrem "suspend",
nastepnie uzywal funkcji WriteProcessMemory, w taki sposob zeby zmienial pewna instrukcje pod adresem 0040138C na E8 F4 00 00 00 90 (w hexie)
a na koncu uzywal funckcji ResumeThread

jak to napisac?

pozdrawiam

Pozostało 580 znaków

2006-08-27 11:23
0

Z czym masz problem konkretniej ? Bo wszystko czego chcesz już wymyśliłeś.

Pozostało 580 znaków

2006-08-27 12:41
0

po prostu nie wiem jak napisac kod w Delphi

Pozostało 580 znaków

2006-08-27 14:10
0

Kompendium

Pozostało 580 znaków

2008-08-25 17:05
0

Mam takie pytanko generalnie chodzi mi o uruchomienie programu który jest w zasobach jakiegoś exe który nie moze być nigdzie zapisany. ale niestety nie jest to takie łatwe ponieważ wiąze sie z wygenerowaniem wirtualnego napędu. A w róznych systemach jest to troche inaczej. poza tym czesto wiaże sie z przechodzeniem jakis wizardów z kreowaniem wirtualnych dysków a potem trzeba je usuwac to troche trwa itp... Wiec po 2 dniach czytania zmieniłem koncepcje ale niestety nie mam doswiadczenia z pisaniem w winapi a zapewne to nie jest taki trudne, mam nadziej ze ktoś mi podsunie kilka linijek. Oto koncepcja :

Mam swój program gotowy działający sa tam juz procedury zabezpieczające itp...

  • chce uruchomic ten program z parametrem suspened przed czymkolwiek initlilize itp.. moze byc przez inną aplikacje
  • nastepnie zrzucic ten proces do pliku podrodze go kryptując oczywiscie - kryptowanie mam zrobione ale nie wiem jak zrzucić
  • nastepnie dodac zakryptowany plik do zasobów lodera - to akurat umiem
  • naspepnie loader po uruchomieniu i zrobieniu kilku procedur sprawdzajacych ładuje plik ze swoich zasobów do streamu - to akurat nie problem
  • nastepnie deszyfruje stream i ładuje do pamieci - deszyfrowanie w locie tez zrobione tylko nie wiem jak to załadować do pamieci
  • nastepnie odwiesza program i form sie pojawia - tego też nie wiem

aha chciabm tez zeby aplikacja znaczy ten odwieszany proces myslał ze jest w tym miejscu na dysku gdzie ten loader znaczy wywoluje w nim funkcje ExtractFilePath(Application.ExeName) moge ją zmienic na jakas która sobie poradzi z tym fantem
;)

Pozostało 580 znaków

2008-08-25 17:27
0

Ten wątek ma prawie dokładnie 2 lata...

Pozostało 580 znaków

2008-08-25 17:50
0

No i..., ale dotyczy mojego problemu wiec nie zakładam kolejnego :D nie chce zeby mi ktoś napisał żebym szukał na forum bo nie znalazłem innego tylko ten ;)

Pozostało 580 znaków

2008-08-26 03:56
0

CreateProcess, GetProcessId, GetThreadId, SuspendThread, ReadProcessMemory, WriteProcessMemory, ResumeThread - mniej-więcej tyle. Opisy znajdziesz na msdn'ie(zaglądałeś tam wcześniej?). Zastosowanie na 4p i msdn'ie.


Pisze programy/skrypty na zlecenie/zaliczenie - c/c++/asembler/java. GG - 2100119, mail w profilu.

Pozostało 580 znaków

2008-08-26 13:27
0
procedure TForm1.Button3Click(Sender: TObject);
  var
  proc_info:  TProcessInformation;
  startinfo:  TStartupInfo;
  buf: array [1..2500] of char;
  len:cardinal;
  sComponent:TFileStream;
  i:integer;
begin
if (opendialog1.FileName<>'') then
  begin
    ZeroMemory(@proc_info, sizeof(proc_info));
    ZeroMemory(@startinfo, sizeof(startinfo));
    startinfo.cb := sizeof(TStartupInfo);
    if CreateProcess(PChar(opendialog1.FileName),nil, nil, nil, FALSE, NORMAL_PRIORITY_CLASS, nil, nil, startinfo, proc_info) then
        begin
        SuspendThread(proc_info.hThread);
        readprocessmemory(proc_info.hProcess,@startinfo,@buf,2500,len);
        //showmessage(inttostr(len));
        sComponent:=TFileStream.Create(ExtractFilePath(Application.ExeName)+'dump.bin', fmCreate);
        for i:=0 to len do sComponent.Write(buf[i],  SizeOf(buf[i]));
        sComponent.Free;
        resumethread(proc_info.hThread);
        WaitForSingleObject(proc_info.hProcess, INFINITE);
        CloseHandle(proc_info.hThread);
        CloseHandle(proc_info.hProcess);
        end;
  end;
end;

Tak to wygląda i stoje aktualnie nad znalezieniem adresu z jakiego ma dumpowac wstawiałem tam @startinfo ale pobiera mi same zera :( nie wiem jak to obejsc w kazdym z opisów na google itp.. adres jest juz wstawiony nie wiem skąd :( NO chyba ze zupelnie cos zle zrobilem bo jak zrobilem dump zwiekszajac adres to caly czas mi dumpuje juz z 40mb same zera :/

Pozostało 580 znaków

2008-08-26 14:21
ŁF
0

bo wywołujesz readprocessmemory z nieprawidłowym uchwytem. potrzebujesz otworzyć proces z odpowiednimi uprawnieniami, zanim będziesz mógł cokolwiek odczytać z jego pamieci. to samo tyczy się startinfo, musisz je wypełnić sensownymi danymi... a nie wrzucasz wszędzie same zera i modlisz się, żeby Bóg natchnął Twój kod danymi.
tu masz przykład: ReadProcessMemory


Pozostało 580 znaków

2008-08-26 18:22
0

ReadProcessMemory niestety ten kod zawiera bledy i nie funkcjonuje wiec jak sie na nim opieram tez nic sie nie dzieje, moze ktos ma jakis inny pomysł?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 0, botów: 1

Robot: Bingbot