Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Чтение из чужой памяти  (Прочитано 14211 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Mfcer__
Команда клуба

ru
Offline Offline

« : 18-08-2004 22:10 » 

Добрый день!

Есть задачка:

известно что некоторое приложение содержит какое то число, допустим N. Так как мне найти адрес этого числа и изменить его из своей программы.

не могли бы привести примеры.
Записан
xelos
Гость
« Ответ #1 : 18-08-2004 22:28 » 

чисто теоретически никак. каждый процесс имеет свое адресное пространство, которое недоступно другому процессу. для коммуникаций между процессами существуют специальные механизмы (Inter Process Communication) - типа спроецированных в память файлов, мэйлслотов... но эти механизмы должны быть интегрированы с самого начала в обе программы. на этом построена вся система безопасности windows.
в общем, из пользовательского приложения вариантов я не вижу... даже с правами системы это не такая тривиальная задача.
Записан
Mfcer__
Команда клуба

ru
Offline Offline

« Ответ #2 : 18-08-2004 23:13 » 

Нарыл в сети что надо использовать ReadProcessMemory(), а только примеров как ее использовать не нашел Жаль
Может кто - нибудь с ней работал ?
Записан
sss
Специалист

ru
Offline Offline

« Ответ #3 : 19-08-2004 04:30 » new

Примера нет. Последовательность...

1) EnumProcesses(...) //PSAPI здесь получить pid

2) OpenProces(PROCESS_VM_READ | PROCESS_VM_WRITE |   PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION, .., pid)
// Возможно долько с этими флагами. здесь получить hp

3) ReadProcessMemory(hp,...)

4) WriteProcessMemory(hp,...)
Записан

while (8==8)
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #4 : 19-08-2004 05:07 » 

А это приложение в котором ты хочешь поменять число это твое приложение В смысле ты его сам писал или это какое то левое уже откомпилированое
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 19-08-2004 09:28 » 

xelos,
Цитата

чисто теоретически никак. каждый процесс имеет свое адресное пространство, которое недоступно другому процессу. для коммуникаций между процессами существуют специальные механизмы (Inter Process Communication) - типа спроецированных в память файлов, мэйлслотов... но эти механизмы должны быть интегрированы с самого начала в обе программы. на этом построена вся система безопасности windows.

нифига подобного

слышал когда-нибудь про Cheat'O'matic , ArtMoney, MagicCreator ?

такое возможно. Причём Cheat'O'matic работает даже и под Win3.1 и под W98, на других не проверял Улыбаюсь
Записан

xelos
Гость
« Ответ #6 : 19-08-2004 10:39 » 

драйвер ядра, в принципе, может напрямую читать и писать память, и то с оговорками. одно пользовательское приложение чтобы имело доступ к памяти другого - я не в курсе такого. поконкретнее документацию приведи. под W98 и W3.1 архитектура системы была мягко скажем другой, чем в 2к или в хр. попробуй в 2к или хр запусти эти штуки.
Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 19-08-2004 11:36 » 

xelos, в Windows NT и старше это вполне возможно.  Надо открыть хендл процесса с правом на чтение или запись.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
xelos
Гость
« Ответ #8 : 19-08-2004 13:53 » 

кстати, http://www.freevbcode.com/ShowCode.asp?ID=4115
ВБ клон Cheat'O'matic

смотрим MSDN:

The WriteProcessMemory function writes data to an area of memory in a specified process. The entire area to be written to must be accessible, or the operation fails.
Код:

BOOL WriteProcessMemory)
  HANDLE hProcess,
  LPVOID lpBaseAddress,
  LPCVOID lpBuffer,
  SIZE_T nSize,
  SIZE_T* lpNumberOfBytesWritten
:;

hProcess [in] Handle to the process whose memory is to be modified. The handle must have PROCESS_VM_WRITE and PROCESS_VM_OPERATION access to the process.

как было указано, чтобы получить хэндл пользуем OpenProcess, с указанием флагов доступа.
в описании OpenProcess:
The OpenProcess function opens an existing process object.
Код:

HANDLE OpenProcess)
  DWORD dwDesiredAccess,
  BOOL bInheritHandle,
  DWORD dwProcessId
:;

Parameters
dwDesiredAccess [in] Access to the process object. This access right is checked against any security descriptor for the process. This parameter can be one or more of the process access rights.

вам может быть запросто отказано в доступе к процессу.
Записан
xelos
Гость
« Ответ #9 : 19-08-2004 14:08 » 

из раздела управление памятью:

Each process on 32-bit Microsoft® Windows® has its own virtual address space that enables addressing up to 4 gigabytes of memory. Each process on 64-bit Windows has a virtual address space of 8 terabytes. All threads of a process can access its virtual address space. However, threads cannot access memory that belongs to another process, which protects a process from being corrupted by another process.

вывод: защищайте свои программы от внешнего вмешательства, установкой соответствующих описателей безопасности.

кстати, есть функции защищающие отдельные страницы памяти.

посмотрите http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/memory_protection.asp
Записан
sss
Специалист

ru
Offline Offline

« Ответ #10 : 20-08-2004 00:48 » 

Защищал я как-то память с помощью VirtualProtectEx(...). ArtMoney обломался.

Интересная ситуация. С помощью драйвера читать память процесса c 3 уровня дико сложно. Сложнее чем с помощью ReadProcessMemory() в сотни раз. Необходимо абсолютное знание страничного механизма памяти. Поэтому и примеров не видно...
Записан

while (8==8)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines