Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.24;
Скачать: CL | DM;

Вниз

ReadProcessMemory   Найти похожие ветки 

 
EndDie   (2002-09-10 12:43) [0]

Доброго времени суток Вам, гуру!
Прочитал статью http://delphi.mastak.ru/articles/Dapi/index.html,
но там немного не то что мне необходимо.
Проблема заключается в следующем:
Нужно написать программу, которая могла бы читать из чужого процесса информацию... информация эта посылается на сервер программой - пакетами, у которых известны заголовки (например $72) начиная с этого байта нужно считать известное число байт, и вывести например в Мемо.
Хэндл процесса я знаю так как клиент запускаю сам
Createprocess(nil,pChar(comLine),nil,nil,
false,CREATE_DEFAULT_ERROR_MODE,nil,nil,si,p);

затем: ReadProcessMemory(p.hProcess, SAddress, Buffer, Sizeof(Buffer), NumberOfBytesRead);
Теперь вопросы:
1. Чему должен быть равен SAddress? (или чем его можно найти)?
2. Buffer: PByteArray; - как в Мемо вывести сами байты (а не chr(buffer[i]) например)?
3. Если поток таких данных не постоянный, и приходит уходит не ч/з одинаковое время, то как узнать что пришло/ушло новое количество байт (где ловить/обрабатывать-то? т.е. TTimer-не подходит)?
4. Можно ли прочитать и то, что отвечает сервер?
пока вроде все
Заранее большое Спасибо!


 
Digitman ©   (2002-09-10 14:48) [1]

1. Чему должен быть равен SAddress? (или чем его можно найти)?

SAddress - значение адреса в ВАП целевого процесса, по которому находятся интересующие тебя данные

2. Buffer: PByteArray; - как в Мемо вывести сами байты (а не chr(buffer[i]) например)?

Memo.Lines.Add(IntToHex(byte(buffer[i]), 2));

3. Если поток таких данных не постоянный, и приходит уходит не ч/з одинаковое время, то как узнать что пришло/ушло новое количество байт (где ловить/обрабатывать-то? т.е. TTimer-не подходит)?

О каком потоке идет речь ? В твоем фрагменте кода нет ничего похожего на поток

4. Можно ли прочитать и то, что отвечает сервер?

Если твой сервер "умеет" читать то, что ему посылает твой клиент, то почему твой клиент не "умеет" читать и понимать серверные сообщения ? ПИО - твой собственный ? Или чужой ?


 
EndDie   (2002-09-12 17:10) [2]

Вот код которым я пытаюсь запустить программу и считывать пакеты с данными которые она отправляет/посылает:
procedure TForm1.exec(const comLine:string);
var
si: Tstartupinfo;
p: Tprocessinformation;
Buffer : PByteArray;//Pointer;
NumOfBRead,i : LongWord;
SInf : TSystemInfo;
SAddress : Pointer;
MBI: _MEMORY_BASIC_INFORMATION;
begin
fillChar(Si,SizeOf(Si),0);
with Si do begin
cb:= SizeOf( Si);
dwFlags:= startf_UseShowWindow;
wShowWindow:= 4;
end;
if not Createprocess(nil,pChar(comLine),nil,nil,false,
CREATE_DEFAULT_ERROR_MODE,nil,nil,si,p) then begin
ShowMessage("CreateProcess failed..");
Exit;
end;
GetSystemInfo(SInf);
SAddress:=SInf.lpMinimumApplicationAddress;
GetMem(Buffer,1024);
hHandle:=OpenProcess(PROCESS_ALL_ACCESS,false,p.dwProcessId);
if not ReadProcessMemory(hHandle,SAddress,Buffer,Sizeof(Buffer),NumOfBRead) then
begin
ShowMessage("!!!");
Exit;
end;
for i:=0 to NumOfBRead do begin
Memo1.Lines.Add("$"+IntToHex(byte(Buffer[i]),2));
end;
FreeMem(Buffer);
end;


Но!
- во первых считывает она 1 раз, при запуске соответственно, а если выношу (hHandle - делаю глобальным):
if not ReadProcessMemory(hHandle,SAddress,Buffer,Sizeof(Buffer),NumOfBRead) then
begin
ShowMessage("!!!");
Exit;

то появляется эта самая мессяга=!!!, т.е. ReadProcessMemory не выпоняется.
Не могу понять как же работают пакетные перехватчики, например WPE Pro: http://membres.lycos.fr/tsearch/wpeproalpha.zip
ведь работает же и корректно, и с чужими программами (ето правда решается openprocessом)!!!


 
Digitman ©   (2002-09-12 18:00) [3]

>>эта самая мессяга

Ты что-нибудь слышал о GetLastError() ?

>>считывать пакеты с данными которые она отправляет/посылает

Любопытно, откуда тебе известен адрес в ВАП чужого процесса, по которому располагаются данные, интересующие тебя ?

вот это вот:

GetSystemInfo(SInf);
SAddress:=SInf.lpMinimumApplicationAddress;

совершенно из другой оперы !
с чего ты взял, что значение SAddress будет равно интересующему тебя адресу ?



Страницы: 1 вся ветка

Текущий архив: 2002.10.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
1-78429
Tihas
2002-10-11 01:30
2002.10.24
Есть ли в Object Pascal friend, как С++


1-78450
pirat
2002-10-12 02:53
2002.10.24
Получение адреса процедуры из процедурной переменной


14-78602
ToLIk Orshanets
2002-10-02 19:26
2002.10.24
Уроки по базам данных для чайника(ов).


1-78496
Paul 'Spawn' Rysevets
2002-10-13 16:53
2002.10.24
Как Узнать Что Стороннее Приложение Запустилось


1-78327
Mav
2002-10-14 13:05
2002.10.24
Help OLE.