Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Память процесса, как определить 
:(
    Опции темы
chaos
Дата 9.12.2004, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



Подскажите как определить адресс в памяти где живет процесс и допустим наити там определенное число как это делает ArtMoney
PM WWW   Вверх
mntek
Дата 9.12.2004, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


freakin_brain
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 15.8.2004
Где: saint-petersburg

Репутация: 1
Всего: 1



ReadProcessMemory()
PM MAIL WWW ICQ   Вверх
_hunter
Дата 9.12.2004, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98





--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Girder
Дата 9.12.2004, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 25
Всего: 155



1)Тебе надо определить идентификатор процесса жертвы
2)Необходимо пройтись по страницам процесса - т.е. составить список страниц.
К примеру вот так(для наглядности я их вывел в TreeView):
- создай новое приложение, брось на нее TreeView и кнопку
- Замени модуль на вот ентот:
Код
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ComCtrls, StdCtrls;

type
 TFOnPagesMemory = procedure(Sender:TObject; MemInfo:_MEMORY_BASIC_INFORMATION; var StopSearch:Boolean) of object;

type
 TForm1 = class(TForm)
   Button1: TButton;
   TreeView1: TTreeView;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
   function GetPagesMemoryProcess32(pID:Cardinal):integer;
   procedure PMP32(Sender: TObject; MemInfo: _MEMORY_BASIC_INFORMATION; var StopSearch: Boolean);
 end;

var
 Form1: TForm1;
 FOnPagesMemory:TFOnPagesMemory;

implementation

{$R *.dfm}

function TForm1.GetPagesMemoryProcess32(pID:Cardinal):integer;
var oProcess:Cardinal;
   MemAddr:Cardinal;
   MemInfo:_MEMORY_BASIC_INFORMATION;
   sNext:boolean;
begin
Result:=-1;
if pID=0 then exit;
oProcess:=OpenProcess(PROCESS_QUERY_INFORMATION,false,pID);
if oProcess<>0 then
 begin
  Result:=0;
  MemAddr:=0;
  sNext:=false;
  while (sNext=false)and(VirtualQueryEx(oProcess,Pointer(MemAddr),MemInfo,SizeOf(_MEMORY_BASIC_INFORMATION))<>0) do
   begin
    MemAddr:=MemAddr+MemInfo.RegionSize;
    if Assigned(FOnPagesMemory) then FOnPagesMemory(Self,MemInfo,sNext);
    inc(Result);
   end;
  CloseHandle(oProcess);
 end;
end;

procedure TForm1.PMP32(Sender: TObject; MemInfo: _MEMORY_BASIC_INFORMATION; var StopSearch: Boolean);
var t,tc:TTreeNode;
procedure Protect(p:Cardinal);
begin
if (p and PAGE_READONLY)=PAGE_READONLY then
 TreeView1.Items.AddChild(tc,'PAGE_READONLY');
if (p and PAGE_READWRITE)=PAGE_READWRITE then
 TreeView1.Items.AddChild(tc,'PAGE_READWRITE');
if (p and PAGE_WRITECOPY)=PAGE_WRITECOPY then
 TreeView1.Items.AddChild(tc,'PAGE_WRITECOPY');
if (p and PAGE_EXECUTE)=PAGE_EXECUTE then
 TreeView1.Items.AddChild(tc,'PAGE_EXECUTE');
if (p and PAGE_EXECUTE_READ)=PAGE_EXECUTE_READ then
 TreeView1.Items.AddChild(tc,'PAGE_EXECUTE_READ');
if (p and PAGE_EXECUTE_READWRITE)=PAGE_EXECUTE_READWRITE then
 TreeView1.Items.AddChild(tc,'PAGE_EXECUTE_READWRITE');
if (p and PAGE_EXECUTE_WRITECOPY)=PAGE_EXECUTE_WRITECOPY then
 TreeView1.Items.AddChild(tc,'PAGE_EXECUTE_WRITECOPY');
if (p and PAGE_GUARD)=PAGE_GUARD then
 TreeView1.Items.AddChild(tc,'PAGE_GUARD');
if (p and PAGE_NOACCESS)=PAGE_NOACCESS then
 TreeView1.Items.AddChild(tc,'PAGE_NOACCESS');
if (p and PAGE_NOCACHE)=PAGE_NOCACHE then
 TreeView1.Items.AddChild(tc,'PAGE_NOCACHE');
end;
begin
t:=TreeView1.Items.AddChild(nil,'State: ');
case MemInfo.State of
 MEM_COMMIT: t.Text:=t.Text+'MEM_COMMIT';
 MEM_FREE: t.Text:=t.Text+'MEM_FREE';
 MEM_RESERVE: t.Text:=t.Text+'MEM_RESERVE';
else
 t.Text:=t.Text+'???';
end;
t.Text:=t.Text+' BaseAddress: '+IntToHex(Cardinal(MemInfo.BaseAddress),8)+
        ' RegionSize: '+IntToHex(MemInfo.RegionSize,8)+' (Type: ';
case MemInfo.Type_9 of
 MEM_IMAGE: t.Text:=t.Text+'MEM_IMAGE)';
 MEM_MAPPED: t.Text:=t.Text+'MEM_MAPPED)';
 MEM_PRIVATE: t.Text:=t.Text+'MEM_PRIVATE)';
else
 t.Text:=t.Text+'???)';
end;
tc:=TreeView1.Items.AddChild(t,'AllocationProtect');
Protect(MemInfo.AllocationProtect);
tc:=TreeView1.Items.AddChild(t,'Protect');
Protect(MemInfo.Protect);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
TreeView1.Items.Clear;
FOnPagesMemory:=PMP32;
GetPagesMemoryProcess32(GetCurrentProcessID); //Для постороннего процесса ты должен поставить его идентификатор!
end;

end.

- На OnClick кнопки повесь обработчик: Button1Click

3)Из второго пункта ты имееш информацию по страницам. Отбираеш страницы со статусом MemInfo.State=MEM_COMMIT. Также у тебя будет информация базовый адресс региона: MemInfo.BaseAddress и его размер MemInfo.RegionSize которые и используеш для ReadProcessMemory() и WriteProcessMemory()
4)Открываеш процесс с нужным тебе доступом (OpenProcess...) и используеш ReadProcessMemory() и WriteProcessMemory()

Полное решение мне писать лень... долго и тривиально... smile

Удачи.

Это сообщение отредактировал(а) Girder - 30.12.2004, 13:35


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0638 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.