Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как изменить память процесса навсегда или что за чудеса творит арт мани?

408
29 июня 2011 года
Lei fang
265 / / 01.10.2005
Здравствуйте. Мне надо менять память процесса из загруженной в него ДЛЛ...
Собственно название темы говорит что не все так просто.
Дело в том, что если поменять память по нужному адресу из арт мани, значение в ячейке сохраняется навсегда.
Если же я пробую сменить там значение из своей длл, то через несколько миллисекунд оно возвращается на старое %)

Делаю так... под конец уже даже PAGE_READONLY стал устанавливать, вместо предыдущих прав
Код:
BYTE* adr_r = (BYTE*)0x006B28C8;
BYTE* adr_l = (BYTE*)0x006B28DC;

if ((*adr_r) == 97)
{
    DWORD dwProtect_r, dwProtect_l;

    VirtualProtect((LPVOID)adr_r, 1, PAGE_EXECUTE_READWRITE, &dwProtect_r);
    VirtualProtect((LPVOID)adr_l, 1, PAGE_EXECUTE_READWRITE, &dwProtect_l);

    *adr_r = 122;
    *adr_l = 122;

    VirtualProtect((LPVOID)adr_r, 1, PAGE_READONLY, &dwProtect_r);
    VirtualProtect((LPVOID)adr_l, 1, PAGE_READONLY, &dwProtect_l);
}

Есть у кого-то идеи в чем дело?
288
29 июня 2011 года
nikitozz
1.2K / / 09.03.2007
Все зависит от конкретного приложения и от того, что оно делает с этом участком памяти.
408
29 июня 2011 года
Lei fang
265 / / 01.10.2005
но артмани как-то меняет значение и оно остается таким навсегда %)
почему я не могу сделать того же?
14
29 июня 2011 года
Phodopus
3.3K / / 19.06.2008
Цитата: Lei fang
но артмани как-то меняет значение и оно остается таким навсегда %)
почему я не могу сделать того же?



Цитата: nikitozz
Все зависит от конкретного приложения и от того, что оно делает с этом участком памяти.



протект на 1 байт устанавливать и снимать? мощно, мощно...

408
29 июня 2011 года
Lei fang
265 / / 01.10.2005
в очередности вызова функций и параметров у меня - протект на 1 байт снимается и устанавливается, а не устанавливается и снимается.
по умолчанию этот байт защищен от записи.

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

значение не должно меняться самопроизвольно
14
29 июня 2011 года
Phodopus
3.3K / / 19.06.2008
Цитата: Lei fang
в очередности вызова функций и параметров у меня - протект на 1 байт снимается и устанавливается, а не устанавливается и снимается.


не важно. вы в константах
PAGE_EXECUTE_READWRITE,
PAGE_READONLY
первое слово переведите. Ну и в справку залезьте.
Кстати, как вы определяете что на миллисекунду это значение изменилось?

408
29 июня 2011 года
Lei fang
265 / / 01.10.2005
в art money мониторю. про миллисекунду сказал примерно. я лишь успеваю заметить в артмани что этот байт менял значение.

перефразирую вопрос, каким образом можно сменить значение по определенному адресу в памяти программы, так чтобы оно не восстановилось? Я пробовал методом описанным в первом посте - по прошествии некоторого времени измененное значение меняется на оригинальное.
Если менять это значение в арт мани, оно остается таким сколь угодно долго.

PAGE это страница.
Особой разницы в описании:
PAGE_READONLY - Enables read-only access to the committed region of pages. An attempt to write to the committed region results in an access violation. If Data Execution Prevention is enabled, an attempt to execute code in the committed region results in an access violation.
PAGE_EXECUTE_READ - Enables execute or read-only access to the committed region of pages. An attempt to write to the committed region results in an access violation.
не вижу, если вы имели ввиду что я устаналиваю не верно защиту

Увы, я не обладаю обширными познаниями во всех тонкостях выполнения процессором кода. Знаю лишь то, что если страница отсутствует в его кеше, генерируеются страничное исключение, выполнение кода останавливается до загрузки в кеш недостающей страницы. Этого явно не достаточно, чтоыб разобраться.
260
30 июня 2011 года
Ramon
1.1K / / 16.08.2003
Может уже расскажите, в контексте какой задачи вы это делаете иначе много воды выльется вам в уши.
408
30 июня 2011 года
Lei fang
265 / / 01.10.2005
Для расширения функционала приложения А, я сделал враппер для одной из длл, которыми пользуется приложение А.

Целью смены значения по адресу является изменить адрес к файлам.

Оригинальные значения хранящиеся там и не меняющиеся в процессе работы приложения А - это "ani\\br%03dr.ani"

Мне надо всего лишь сменить первую букву 'a' на 'z' и обратно когда надо.

BYTE* adr_r = (BYTE*)0x006B28C8; // указатель на начало этой строки. Собственно я им пользуюсь как указатель на отдельный байт памяти (первый элемент массива).
260
30 июня 2011 года
Ramon
1.1K / / 16.08.2003
С учетом того, что сие небось хранитцо в экзешнике в ReadOnly секции. Предложу следующий солюшен:
1. ставите на страницу (размером PAGE_SIZE и адресом выровненным на страницу) по средством VirtualProtect защиту PAGE_WRITECOPY
2. переписываете значение переменной
3. возвращаете изначальную защиту для данной страницы
408
30 июня 2011 года
Lei fang
265 / / 01.10.2005
да, значение вшито в экзешник.
Премного благодарен, задача решена
81K
06 марта 2012 года
SVAN48
1 / / 06.03.2012
Люди, подскажите, что мне делать? У меня не меняется в армани значение денег когда я их меняю в последнем шаге, он исправляет их на то, что было,что мне делать?
408
07 марта 2012 года
Lei fang
265 / / 01.10.2005
если что, это форум для прогеров, а не читеров :)
а так, судя по всему, ты меняешь "значение - копию", которое переписывается "значением - оригинала" каждый фрейм.
316
07 марта 2012 года
Alm3n
889 / / 29.05.2009
Цитата: SVAN48
Люди, подскажите, что мне делать? У меня не меняется в армани значение денег когда я их меняю в последнем шаге, он исправляет их на то, что было,что мне делать?


Искать трейнер.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог