Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.07.2008, 20:30   #1
JRcoker
Форумчанин
 
Аватар для JRcoker
 
Регистрация: 18.07.2008
Сообщений: 119
Плохо Работа с памятью процесса

Как запущенному процессу передать значение по определённому адресу типа как артмани....Вобщем допустим адрес 00010862 целое 4 байта значение 10...Как это реализовать в дэлфи?..Если можно кодом...
Улыбайся...Люди любят идиотов...
JRcoker вне форума Ответить с цитированием
Старый 27.07.2008, 01:21   #2
Ring0Sn
Форумчанин
 
Аватар для Ring0Sn
 
Регистрация: 06.09.2007
Сообщений: 239
По умолчанию

Ну в общей теме это выглядит так
Код:
   
OpenProcess(PROCESS_VM_WRITE, False, PID{ID нужного процесса}); //Открываем процесс для записи
WriteProcessMemory(hProc, ptr($00010862){указатель на адресс начала записи}, @buf {указатель на буфер с данными ктр надо записать}, SizeOf(buf){размер буфера}, wSize {сюда функция кладет кол-во успешно записанных байт); //Пишем
но учти могут быть разные ньансы (не каждый процесс даст записать что либо в свое адрессное пространство, таким образом...)

Последний раз редактировалось Ring0Sn; 27.07.2008 в 01:30.
Ring0Sn вне форума Ответить с цитированием
Старый 27.07.2008, 02:54   #3
JRcoker
Форумчанин
 
Аватар для JRcoker
 
Регистрация: 18.07.2008
Сообщений: 119
По умолчанию

Тут куча ошибок.....

[DCC Error] Unit1.pas(28): E2003 Undeclared identifier: 'PID'
[DCC Error] Unit1.pas(29): E2003 Undeclared identifier: 'hProc'
[DCC Error] Unit1.pas(29): E2003 Undeclared identifier: 'buf'
[DCC Error] Unit1.pas(29): E2003 Undeclared identifier: 'wSize'
[DCC Error] Unit1.pas(33): E2057 Unexpected end of file in comment started on line 29
[DCC Error] Unit1.pas(34): E2033 Types of actual and formal var parameters must be identical
[DCC Error] Project1.dpr(5): F2063 Could not compile used unit 'Unit1.pas'

Да еще не понятно куда значение писать....
ЧТО ЗНАЧИТ ID?..
Улыбайся...Люди любят идиотов...
JRcoker вне форума Ответить с цитированием
Старый 27.07.2008, 04:25   #4
Ring0Sn
Форумчанин
 
Аватар для Ring0Sn
 
Регистрация: 06.09.2007
Сообщений: 239
По умолчанию

JRcoker, А если самому немного подумать?
ID - идентификатор процесса, его надо получить...
buf - написал же, буфер (т.е что будем записывать в память, туда и кладем своё значение
Код:
var buf : Integer; //в данном случае наш буфер
    hWnd, PID, hProc, wSize : DWORD;
begin
  hWnd := FindWindow(nil, 'Безымянный - Блокнот');
  if IsWindow(hWnd) then begin
    GetWindowThreadProcessId(hWnd, @PID); //получаем pid  зная заголовок окошка интересующей нас программы
    hProc := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_WRITE, False, PID);
    try
      if hProc <> 0 then begin
        buf := 10;
        WriteProcessMemory(hProc, ptr($00010862), @buf, SizeOf(buf),
                           wSize); 
        ShowMessage(Format('%d bytes writed...', [wSize]));
      end;
    finally
      CloseHandle(hProc);
    end;
  end;
end;
при помощи WriteProcessMemory можно изменить любые страницы памяти, ктрые доступны из Ring3

Последний раз редактировалось Ring0Sn; 27.07.2008 в 05:43.
Ring0Sn вне форума Ответить с цитированием
Старый 27.07.2008, 14:30   #5
JRcoker
Форумчанин
 
Аватар для JRcoker
 
Регистрация: 18.07.2008
Сообщений: 119
По умолчанию

А возможно как нито buf значение заморозить?..Чтоб не менялось?..
Улыбайся...Люди любят идиотов...
JRcoker вне форума Ответить с цитированием
Старый 28.07.2008, 10:36   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Чтоб не менялось?..
АртМани пишем?
1. В таймере постоянно перезаписывать
2. Задать для этой ячейки памяти read-only (через VirtualAlloc кажись)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.07.2008, 20:26   #7
Christoph
 
Аватар для Christoph
 
Регистрация: 28.01.2008
Сообщений: 5
По умолчанию

или выдели просто память и работой с ней....вот тебе и будет небольшой буфер
Christoph вне форума Ответить с цитированием
Старый 29.07.2008, 10:09   #8
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

А про conts у всех память отбило?
BOBAH13 вне форума Ответить с цитированием
Старый 29.07.2008, 10:20   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А про conts у всех память отбило?
А причем тут константы? Автору ведь в чужем процессе нужно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.07.2008, 11:49   #10
Ring0Sn
Форумчанин
 
Аватар для Ring0Sn
 
Регистрация: 06.09.2007
Сообщений: 239
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А причем тут константы? Автору ведь в чужем процессе нужно.
[OFF]
Да уж несовсем ясно ... вероятно кто то про плюшки имел ввиду а кто то про пое...
ПО ТЕМЕ:
Задать атрибуты блока можно через VirtualProtect (предварительно зарезервировав его через VirtylaAlloc с флагом MEM_RECEIVE) если память не отшибло
Ring0Sn вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с памятью в С++ rJIaBkoM Помощь студентам 1 14.06.2008 14:25
Что будет с выделенной памятью? Sibedir Общие вопросы Delphi 9 18.01.2008 13:57
Работа с памятью Shurik Hacker Общие вопросы Delphi 7 22.06.2007 20:51
Прямая работа с оперативной памятью Alex_Vlad Общие вопросы Delphi 2 05.12.2006 16:29