Сейчас на форуме: Magister Yoda, vasilevradislav, tyns777, zombi-vadim (+3 невидимых)

 eXeL@B —› Программирование —› Прочитать изображение из чужого приложения
Посл.ответ Сообщение

Ранг: 11.1 (новичок)
Активность: 0=0
Статус: Участник

Создано: 04 марта 2008 16:43
· Личное сообщение · #1

Доброе время суток всем!
Есть приложение, написано на Delphi7. В этом приложении открываются некие изображения GIF, которые хранятся на винте в зашифрованном виде. Искать алгоритм расшифровки мне уже надоело, очень мусорный код. Поэтому вопрос - можно ли средствами API или еще как-то из чужого запущенного приложения считать картинку хоть в каком-то виде?
Идея заключается в том, чтобы программно управлять этой прогой - заставить его окрывать нужные мне картинки, ну а я их просто буду слизывать из него. Простой PrintScreen не подходит, т.к. поверх картинки выводится некоторое количество меток и кнопок, да и изображение масштабированное, а мне-бы в исходном размере...
Картинка открывается, по всей видимости, в TImage32. Т.е. добраться до этого контрола как-то можно, а в нем должна быть где-то ссылка на bitmap в памяти, вот его-то и надо слизать немасштабированный.




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 04 марта 2008 17:51 · Поправил: Isaev
· Личное сообщение · #2

Проще наверное
mindkeeper пишет:
Искать алгоритм расшифровки

А если принципиально надоело, то на форуме уже не раз поднималась эта тема... Юзай поиск

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 450.3 (мудрец), 13thx
Активность: 0.20
Статус: Участник

Создано: 04 марта 2008 18:10
· Личное сообщение · #3

Когда картинка на экране, то уже расшифрована. Можно сделать так: сохраняешь память процесса чем то типа artmoney либо DetectiveStory. Далее в дампе руками либо r-studio находишь картинки. Если это битмап без заголовка, то поможет imgrab 1.7 (смотри ссылку в новостях на сайте). Но метод этот гиморный, лучше реверси прогу.



Ранг: 11.1 (новичок)
Активность: 0=0
Статус: Участник

Создано: 06 марта 2008 12:23
· Личное сообщение · #4

Руками не подходит, т.к. надо получить не одну-две картинки, а несколько тысяч.
С реверсом повозился, там был ASProtect+конверт Guardant+куча вызовов API Guardant во время работы приложения. И вроде бы модуль, где открывается картинка, получил в более-менее удобоваримом виде после того, как несколько раз прогнал в DeDe (там много нестандартных компонент, постепенно добавлял сигнатуры для них...). Короче вроде б увидел алгоритм распаковки картинки, написал прогграммку с этим алгоритмом. И что инетерсно - большая часть картинок не расшифровывается, НО парочка расшифровались в нормальные человечские gifы, а еще несколько получились странными - открываются, но не полностью, а где-то на 2/3 сверху, а внизу 1/3 безобразие в духе белого шума на телеке...



Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 18 марта 2008 21:18
· Личное сообщение · #5

Справку по WinAPI в Дельфи почитай (Help - Windows SDK), а еще DelphiWorld delphiworld.narod.ru/dw.html

Function WindowToBMP(WD: HWND ): TBitmap;
Var
WinDC: HDC;
ARect : TRect;
begin
Result := TBitmap.Create;
GetWindowRect(WD, ARect);
with Result, ARect do
begin
Width := ARect.Right - ARect.Left;
Height := ARect.Bottom - ARect.Top;
If (Width=0) or (Height=0) then
Begin
MessageDlg('nothing here',
mtWarning,[mbOk],0);
Exit;
End;

WinDC:=GetWindowDC(Wd);
ShowWindow(Wd, SW_SHOW);
BringWindowToTop(WD);
try
BitBlt( Canvas.Handle, 0, 0, Width, Height, WinDC, 0, 0, SRCCOPY);
finally
end;
end;
end;



Ранг: 226.0 (наставник), 67thx
Активность: 0.160
Статус: Участник

Создано: 19 марта 2008 10:37
· Личное сообщение · #6

Скорее всего картинка рисуется апиком BitBlt или StretchBlt.
Хукаеш апик, проверяешь размер картинки, если тот что надо сохраняешь в файл.



Ранг: 11.1 (новичок)
Активность: 0=0
Статус: Участник

Создано: 19 июня 2008 11:35
· Личное сообщение · #7

Все гораздо лучче получилось. Разобрал иерархию классов проги, написал свою, которая последовательно перебирает все, что мне надо (ищет нужное серией FindWindowEx, затем PostMessage куда надо), и в нужный момент вызывает метод чужого контрола, чтоб сохранить в файл. Всем спасибо за подсказки.


 eXeL@B —› Программирование —› Прочитать изображение из чужого приложения
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати