Форум: "WinAPI";
Текущий архив: 2002.10.24;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.10.24;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c