Dorwać się do obrazka w obcym procesie

0

Witam. Jak dostać się do pamięci innego procesu w którym otwarty jest obrazek JPEG? Chcę jakoś wykraść ten obrazek z tego procesu. Nie wiem czy jest on w całości w pamięci czy może tylko w formacie BITMAP (jako że jest wyświetlany w okienku).

ps. prymitywne print screen mnie nie satysfakcjonuje bo na podgląd tego obrazka naniesione są jakieś figury i napisy (z tego co zauważyłem w końcowej fazie podgląd).

0

Wydaje mi się że to powinno być dosyć proste. W prymitywny sposób już dostałem się do tego obrazka, ale to fatalne rozwiązanie.

Mianowicie za pomocą windowsa zrobiłem zrzut pamięci tego procesu do pliku, następnie otworzyłem ten plik zrzutu w programie do odzyskiwania fotografii z nośników (otworzyłem jako obraz karty pamięci). Fotkę w oryginalnym formacie JPEG znalazło pomyślnie.

Tak więc wszystko czego potrzebuje to dostać się do pamięci tego procesu tak by wyciągnąć dane wskazując na adres. Wtedy mógłbym przeskanować tą pamięć wyszukując nagłówka pliku JPEG.

ReadProcessMemory pomoże? Ciężko mi zakumać tą funkcję, nawet w google wszystko takie jakieś niejasne, tak samo z artykułem odnośnie tej funkcji na tym serwerze.

0

To jak ja nieznająć wczęśniej tej funkcji napisał bym poniższy kod, który proces WinAmpa dumpuje do pliku?
WSzystko znalazłem dzięki googlom, jak na polskich stronach jest dla Ciebie za mało informacji to szukasz do
skutku przykładów na zagranicznych. Oczywiście w Twoim przypadku nie musisz zapisywać Streamu na dysk,
tylko później przeszukać go pod kątem zawartości nagłowka pliku jpg albo odpowiedniego ciągu bajtów. I od
znalesionej pozycji zapisać do jakiejś końcowej cały plik. Tylko właśnie trzeba mieć jakieś pojęcia o formacie
pliku jpg, ja je nie za bardzo mam, a trzeba wiedzieć od ktorego i do ktorego miejsca "wypruć" ten plik jpg.

var
  I : integer;
  H : THandle;
  WindowH : HWND;
  BytesRead : Cardinal;
  MemStr : TMemoryStream;
  hProcess, ProcessId : THandle;
  Temp : array[1..4096] of Byte;
const
  WindowClass = 'Winamp v1.x';
begin
  WindowH := FindWindow(WindowClass, nil);
  if WindowH = 0 then
  begin
    ShowMEssage('Nie uruchomiono procesu o klasie okna: ' + WindowClass);
    Exit;
  end;
  GetWindowThreadProcessId(WindowH, @ProcessId);
  hProcess := OpenProcess(PROCESS_VM_READ, False, ProcessId);
  MemStr := TMemoryStream.Create;
  I := 0;
  repeat
    ReadProcessMemory(hProcess, Ptr($400000 + I), @Temp, SizeOf(Temp), BytesRead);
    MemStr.Write(Temp, SizeOf(Temp));
    I := I + BytesRead;
  until BytesRead = 0;
  CloseHandle(hProcess);
  MemStr.SaveToFile('D:\memstr.bin');
  MemStr.Free;
end;
0

Hmm dzięki za pomoc. Ale natrafiłem na jakąś wadę, wyjściowy plik ma wielkość tylko 360KB (368 640 B). W przypadku zrzutu robionego Windowsowym menadżerem zadań plik wyjściowy ma ponad 300mb.

ps. cały problem kręci się wokół programu do odzyskiwania fotek z nośników. Program kosztuje tylko $20 ale ja muszę z tymi fotkami się uporać do jutra rana, więc nie zdążę inaczej jak na lewo wczesać się w ten program - gdyż crack nie istnieje a to jedyny program który skutecznie odzyskał mi fotki (pofragmentowane). Program to Adroit Photo Recovery (btw polecam, przetestowałem 30 programów tylko ten składa do kupy poszatkowane fotki). Napisałbym cracka (program w javie napisany lol można zdekompilować dziada) ale nie mam czasu na to :(

0

Bo to co dałem nie jest doskonałe, ale powinno dumpować proces ktorego uchwyt podasz.
Za pewne menedzer zadan robi to w inny sposób, jakąś dodatkową pamięć zapisuje itp. itd.

0

Zauważyłęm że jedyne co zdumpowało to kod binarny samej aplikacji EXE. Może problem w tym że aplikacja jest w javie? Tylko że nie zauważyłem osobnego procesu javaw.exe.

0

Być, może - na javie się słabo znam, analizowalem kiedyś tylko kod jednej gry i okazało się,
że jest tak "geniealnie zabezpieczona", że i tak do pewnych rzeczy wykorzystuje zewnętrzną
dllkę, którą można "poprawić" bez problemów. Wracając do tematu, moja widza o Javie jest
znikoma i nie bardzo jestem w stanie Ci więcej pomóc. Może ktoś inny tutaj będzie potrafił.

0

Męczę się całą noc dumpując windowsem pamięć, 300mb żeby dorwać jeden obrazek, a potem następny, i następny (jest ich 500 łooo).

Druga sprawa, zauważyliście bug na forum? W miejscu wklejania kodu > Ptr(x) dubluje się napis, mam nieodparte wrażenie że umożliwia to uruchomienie dowolnego kodu html za pomocą forum. To by był psikus, forum programistyczne a tu taki BUG. :-)

0

Nie wiem czy te obrazki są w programu (exe) albo dll to możesz je wyciągnąć programem ResHacker

0

Obrazki są tylko i wyłącznie w pamięci, nie ma ich nigdzie na dysku. Są generowane wewnątrz za pomocą swoich procedur. Tak jak mówie, JPEG na pewno leży wygodnie w pamięci bo zrzutem systemowym robie i mogę go znaleźć, ale to jak kopanie dołu łyżką.

0

zerknij na to: http://filebeam.com/ef76dc0d4948b8872d930efeb56af266 (znalezione w dwie minuty dzieki google ;] )

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