Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.07.2010, 17:19
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
Лампочка Чтение значения из памяти запущенного процесса

Приветствую, необходимо считать данные из памяти игрушки с определенной позиции, в качестве "определенной позиции" выступает некое слово, например, "live", так вот, есть сурс, но никак нехочет отрабатывать, но слово точно находит, а текст из памяти после слова "live" (конкретно "live" отображается), не отображает, под ХП привилегии не потребовались, под 7 возможно понадобятся:

Код:
function FindString(ProcessID: DWORD; RangeFrom, RangeTo: DWORD; StringToFind: AnsiString): AnsiString;
const
  BufferSize = 1000;
var
  hProcess : DWORD;
  BytesRead : DWORD;
  BytesToRead : DWORD;
  I : DWORD;
  Buffer : Array Of AnsiChar;
  OldProtect : DWORD;
begin
  If (RangeTo - RangeFrom) < 1 Then
    begin
    ShowMessage('Invalid Ranges');
    Exit;
  end;
  hProcess := OpenProcess(PROCESS_VM_READ,False,ProcessID);
  If hProcess = 0 Then
    begin
    ShowMessage(SysErrorMessage(GetLastError));
    Exit;
  end;
  Try
    SetLength(Buffer,BufferSize);
    Try
      I := RangeFrom;
      While I < RangeTo Do
        begin
        BytesToRead := BufferSize;
        If (RangeTo - I) < BytesToRead Then
          begin
          BytesToRead := RangeTo - I;
        end;
        VirtualProtectEx(hProcess,Pointer(I),BytesToRead,PAGE_READWRITE,OldProtect);
        ReadProcessMemory(hProcess,Pointer(I),@Buffer[0],BytesToRead,BytesRead);
        VirtualProtectEx(hProcess,Pointer(I),BytesToRead,OldProtect,OldProtect);
        If Pos(StringToFind,AnsiString(Buffer)) > 0 Then
          begin
          SetLength(Result,100);
          Move(Buffer[Pos(StringToFind,AnsiString(Buffer)) - 1],Result[1],100);
          Break;
        end;
        Inc(I,BytesToRead);
      end;
    Finally
      Buffer := nil;
    end;
  Finally
    CloseHandle(hProcess);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(FindString(strtoint(edit1.text),$0034686C, $003468BC, 'live'));
end;
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:47.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter