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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Данные по адресу в памяти 
V
    Опции темы
ToDDIk
Дата 12.10.2011, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени суток! Подскажите пожалуйста, как при помощи Delphi взять информацию размещённую по определённому адресу в памяти. Заранее спасибо.
PM MAIL   Вверх
Snowy
Дата 12.10.2011, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



ReadProcessMemory
PM MAIL   Вверх
ToDDIk
Дата 12.10.2011, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо. А можно какой-нибудь пример использования? можно исходник
PM MAIL   Вверх
Snowy
Дата 12.10.2011, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



PM MAIL   Вверх
ToDDIk
Дата 13.10.2011, 06:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо. Сейчас буду разбираться! smile 
PM MAIL   Вверх
ToDDIk
Дата 19.10.2011, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

procedure TForm1.Button1Click(Sender: TObject);
var
  hProc, PID, numberRead : DWORD;
  hWnd  : THandle;   
  IpBuf : PWideChar; 
  len   : integer;
  ipBase: ^dword;     
  wname : string;
begin
wname:= combobox1.Text;
 hWnd:=findwindow(nil,PChar(wname));
  Edit1.Text:=inttostr(hWnd); 
  GetWindowThreadProcessId(hWnd, @PID); 
  Edit2.Text:=inttostr(PID); 
  hProc:=OpenProcess(PROCESS_VM_READ, False, PID); 
  if hProc <> 0 then
  try
    len   := 200;
    //ipBuf := AllocMem(len);
    Edit3.Text:=inttostr(hProc); 
    ipBase:=ptr($0036D0C8);      
    ReadProcessMemory(hProc, ipBase, ipbuf, len, numberRead);
    Edit4.Text:=WideCharToString(ipbuf); 
  finally
    CloseHandle(hProc); 
end;


Доброго времени суток! Вот нашёл такой код, вроде даже разобрался, но в поле Edit4, всегда выводится 0, хотя по этому адресу данные не равные 0, проверял при помощи ArtMoney. 
Помогите пожалуста! 
PM MAIL   Вверх
Чучмек
Дата 19.10.2011, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



А где память под буфер?
Хотябы
Код

getMem(ipbuf,200)


Убедись что функция вообще что нибудь читает.
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  hProc, PID, numberRead : DWORD;
  hWnd  : THandle;
  IpBuf :array[0..127]of widechar ;   //256 байт
  i,j, 
  len  : integer;
  ipBase: ^dword;
  s,
  wname : string;
begin
wname:= edit1.Text;
 hWnd:=findwindow(nil,PChar(wname));
  GetWindowThreadProcessId(hWnd, @PID);
  hProc:=OpenProcess(PROCESS_VM_READ, False, PID);
 cardinal(ipBase):=strtoint(edit2.Text);  //Адрес по которому прочитать
 len   := sizeof(IpBuf);
 fillchar(ipbuf,len,0);
if not ReadProcessMemory(hProc, ipBase, @ipbuf, len, numberRead)then messagebox(0,'noread','',0);
CloseHandle(hProc);

Memo1.Lines.Clear;
for j:=0 to 15 do
 begin
 s:=inttohex(cardinal(ipBase)+j*16,8)+':'+^I;
 for i:=0 to 15 do
  if i=8 then s:=s+^i+inttohex(pbyte(cardinal(@ipbuf)+j*16+i)^,2)+' 'else s:=s+inttohex(pbyte(cardinal(@ipbuf)+j*16+i)^,2)+' ';
 memo1.Lines.Add(s);
 end;

end;

Для Блокнота по адресу $0100739D (адрес точки входа)
Получишь
Код

0100739D:    6A 70 68 98 18 00 01 E8    BF 01 00 00 33 DB 53 8B 
010073AD:    3D CC 10 00 01 FF D7 66    81 38 4D 5A 75 1F 8B 48 
010073BD:    3C 03 C8 81 39 50 45 00    00 75 12 0F B7 41 18 3D 
010073CD:    0B 01 00 00 74 1F 3D 0B    02 00 00 74 05 89 5D E4 
010073DD:    EB 27 83 B9 84 00 00 00    0E 76 F2 33 C0 39 99 F8 
010073ED:    00 00 00 EB 0E 83 79 74    0E 76 E2 33 C0 39 99 E8 
010073FD:    00 00 00 0F 95 C0 89 45    E4 89 5D FC 6A 02 FF 15 
0100740D:    38 13 00 01 59 83 0D 9C    AB 00 01 FF 83 0D A0 AB 
0100741D:    00 01 FF FF 15 34 13 00    01 8B 0D B8 9A 00 01 89 
0100742D:    08 FF 15 30 13 00 01 8B    0D B4 9A 00 01 89 08 A1 
0100743D:    2C 13 00 01 8B 00 A3 A4    AB 00 01 E8 A7 01 00 00 
0100744D:    39 1D 08 96 00 01 75 0C    68 F4 75 00 01 FF 15 28 
0100745D:    13 00 01 59 E8 77 01 00    00 68 10 90 00 01 68 0C 
0100746D:    90 00 01 E8 5D 01 00 00    A1 B0 9A 00 01 89 45 DC 
0100747D:    8D 45 DC 50 FF 35 AC 9A    00 01 8D 45 D4 50 8D 45 
0100748D:    D0 50 8D 45 CC 50 FF 15    20 13 00 01 89 45 C8 68 
  
Что соответствует
Код

 0100739D                           EntryPoint:
 0100739D  6A70                           push    00000070h
 0100739F  6898180001                     push    L01001898
 010073A4  E8BF010000                     call    SUB_L01007568
 010073A9  33DB                           xor    ebx,ebx
 010073AB  53                             push    ebx
 010073AC  8B3DCC100001                   mov    edi,[KERNEL32.dll!GetModuleHandleA]
 010073B2  FFD7                           call    edi
 010073B4  6681384D5A                     cmp    word ptr [eax],5A4Dh
 010073B9  751F                           jnz    L010073DA
 010073BB  8B483C                         mov    ecx,[eax+3Ch]
 010073BE  03C8                           add    ecx,eax
 010073C0  813950450000                   cmp    dword ptr [ecx],00004550h
 010073C6  7512                           jnz    L010073DA
 010073C8  0FB74118                       movzx    eax,[ecx+18h]
 010073CC  3D0B010000                     cmp    eax,0000010Bh
 010073D1  741F                           jz    L010073F2
 010073D3  3D0B020000                     cmp    eax,0000020Bh
 010073D8  7405                           jz    L010073DF
 010073DA                           L010073DA:
 010073DA  895DE4                         mov    [ebp-1Ch],ebx
 010073DD  EB27                           jmp    L01007406
 010073DF                           L010073DF:
 010073DF  83B9840000000E                 cmp    dword ptr [ecx+00000084h],0000000Eh
 010073E6  76F2                           jbe    L010073DA
 010073E8  33C0                           xor    eax,eax
 010073EA  3999F8000000                   cmp    [ecx+000000F8h],ebx
 010073F0  EB0E                           jmp    L01007400
 010073F2                           L010073F2:
 010073F2  8379740E                       cmp    dword ptr [ecx+74h],0000000Eh
 010073F6  76E2                           jbe    L010073DA
 010073F8  33C0                           xor    eax,eax
 010073FA  3999E8000000                   cmp    [ecx+000000E8h],ebx
 01007400                           L01007400:
 01007400  0F95C0                         setnz    al
 01007403  8945E4                         mov    [ebp-1Ch],eax
 01007406                           L01007406:
 01007406  895DFC                         mov    [ebp-04h],ebx
 01007409  6A02                           push    00000002h
 0100740B  FF1538130001                   call    [msvcrt.dll!__set_app_type]
 01007411  59                             pop    ecx
 01007412  830D9CAB0001FF                 or    dword ptr [L0100AB9C],FFFFFFFFh
 01007419  830DA0AB0001FF                 or    dword ptr [L0100ABA0],FFFFFFFFh
 01007420  FF1534130001                   call    [msvcrt.dll!__p__fmode]
 01007426  8B0DB89A0001                   mov    ecx,[L01009AB8]
 0100742C  8908                           mov    [eax],ecx
 0100742E  FF1530130001                   call    [msvcrt.dll!__p__commode]
 01007434  8B0DB49A0001                   mov    ecx,[L01009AB4]
 0100743A  8908                           mov    [eax],ecx
 0100743C  A12C130001                     mov    eax,[msvcrt.dll!_adjust_fdiv]
 01007441  8B00                           mov    eax,[eax]
 01007443  A3A4AB0001                     mov    [L0100ABA4],eax
 01007448  E8A7010000                     call    SUB_L010075F4
 0100744D  391D08960001                   cmp    [L01009608],ebx
 01007453  750C                           jnz    L01007461
 01007455  68F4750001                     push    SUB_L010075F4
 0100745A  FF1528130001                   call    [msvcrt.dll!__setusermatherr]
 01007460  59                             pop    ecx
 01007461                           L01007461:
 01007461  E877010000                     call    SUB_L010075DD
 01007466  6810900001                     push    L01009010
 0100746B  680C900001                     push    L0100900C
 01007470  E85D010000                     call    jmp_msvcrt.dll!_initterm
 01007475  A1B09A0001                     mov    eax,[L01009AB0]
 0100747A  8945DC                         mov    [ebp-24h],eax
 0100747D  8D45DC                         lea    eax,[ebp-24h]
 01007480  50                             push    eax
 01007481  FF35AC9A0001                   push    [L01009AAC]
 01007487  8D45D4                         lea    eax,[ebp-2Ch]
 0100748A  50                             push    eax
 0100748B  8D45D0                         lea    eax,[ebp-30h]
 0100748E  50                             push    eax
 0100748F  8D45CC                         lea    eax,[ebp-34h]
 01007492  50                             push    eax
 01007493  FF1520130001                   call    [msvcrt.dll!__getmainargs]
 01007499  8945C8                         mov    [ebp-38h],eax




Это сообщение отредактировал(а) Чучмек - 19.10.2011, 10:35


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
ToDDIk
Дата 20.10.2011, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Попробовал ваш код, сначала появилось сообщение notread, то есть как я понял по коду, не выполнилась функция чтения. Для блокнота выдал таблицы нулей.
Не знаю что делать. smile 

Закоментировал //fillchar(ipbuf,len,0); вместо нулей появился 16-тиричный код., но сообщение notread всё равно появляется.

Извиняюсь, всё заработало, мой косяк, имя окна брал из edit1, хотя по логике хотел из combobox1. Поэтому он и не читал ничего. Сейчас всё читает, все значения совпадают с теми, которые я видел в ArtMoney, подскажите пожалуйста как теперь из данных символов получить определённое значение.

При помощи ArtMoney, При просмотре редактора памяти определил, что моё значение хранится в 01 ячейке по определённому адресу тип: значение с точкой 4 байта

Это сообщение отредактировал(а) ToDDIk - 20.10.2011, 14:39
PM MAIL   Вверх
Чучмек
Дата 20.10.2011, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



Цитата(ToDDIk @  20.10.2011,  12:09 Найти цитируемый пост)
значение с точкой 4 байта

А какой это тип в delphi ?
Если твое значение имеет тип Type1
То получить свое значение ты можеш как PType1(adr)^
Где PType1=^Type1  
Например тебя интересует два Integer по адресу $02F00000 и $02F000D0 
Код

len:=$02F000D0-$02F00000+sizeof(Integer)
getMem(buff,len);
ReadProcessMemory(hProc,pointer($02F00000), buff, len, numberRead);

v1:=Pinteger(buff)^;
v2:=Pinteger(cardinal(buff)+$02F000D0-$02F00000)^;

 




--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
ToDDIk
Дата 21.10.2011, 07:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Огромное спасибо! помогло PSingle! Все данные принимаются и корректно читаются!  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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