Что нового

[Процессы] Создание дампов памяти процесса

NickGrava

Новичок
Сообщения
12
Репутация
0
Версия AutoIt: 3.3.14.0

Описание:
День добрый, друзья! Прошу помощи в одном интересном вопросе. Можно ли с помощью средств autoit делать дамп памяти нужного нам процесса по нажатию заданной клавиши? Необходимо определить какая именно ячейка памяти процесса изменяется в определенный момент игры. Погуглив я понял что можно сделать дамп до этого события и дамп сразу после..и каким то образом сравнить эти два дампа между собой. Проделав сию операцию несколько раз - возможно мы и найдем нужную нам ячейку. Так вот -может кто знает как написать функцию создания дампа нужного процесса по нажатию заданной клавиши. Функцию сравнения тоже было бы неплохо.

Примечания: событие в игре это не изменение какого либо числа, или полоски жизни например - иначе понятно что можно было использовать например артмани.
 
Автор
N

NickGrava

Новичок
Сообщения
12
Репутация
0
Щас пока гуглил и смотрел разные варианты - задумался.... мой вопрос можно изменить так - как в процессе отыскать ячейку памяти отвечающую за данное событие в игре? Игра - рыбалка. В принципе сам процесс вылова уже автоматизирован (используя pixelsearch я это реализовал), но в игре очень много локаций и всегда приходится править параметры данной функции. Поэтому и возникает желание реализовать поиск поклевки не по поиску пикселей на экране - а по изменениям значений в памяти.


Добавлено:
Сообщение автоматически объединено:

Нашел вот такой способ сканирования памяти процесса:

Код:
#RequireAdmin
#include <nomadmemory.au3>

$min= ;~ начинасть сканировать с этого адреса
$max= ;~ закончить этим
$Process = "process.exe"


$size=$max-$min+1 ;~определяется размер массива для хранения данных
Global $adres[$size], $xxx[$size] ;~ создаётся массивы разсмором с количество адресов сканирования

$memory = _MemoryOpen(ProcessExists($Process)) ;~открывается процесс для чтения памяти
MsgBox (0,"1","переменные созданы")
for $i=$min To $max  ;~цикл сохраняющий в массив значения адресов
    $adres[$i] = _MemoryRead($i, $memory) ;~чтение памяти
Next

MsgBox (0,"2","значения сохранены")

for $i=$min To $max ;~цикл читающий значения адресов и сравнивающий их с преведущими
    $adre = _MemoryRead($i, $memory) 
    if $adre = $adres[$i] Then
    Else
        $xxx[$a]=$i
        $a=$a+1
        EndIf
    Next

for $i=0 To $size ;~в сообщениях MsgBox выдаёт изменившиеся адреса
    MsgBox (0,"3- изменившиеся адреса",$xxx[$i])
Next



Но тогда другой вопрос - как определить диапазон адресов которые в памяти занимает процесс?
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Процессу может выделяться до 2 терабайт (в 64 системе). Вы хотите все адреса просканировать?
 
Автор
N

NickGrava

Новичок
Сообщения
12
Репутация
0
inververs сказал(а):
Процессу может выделяться до 2 терабайт (в 64 системе). Вы хотите все адреса просканировать?

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

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

Касаемо 2 терабайт - а назвать такую онлайн игру (с локальным клиентом на компе) сможете? (которой бы выделялось столько памяти) - не думаю.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
NickGrava [?]
Касаемо 2 терабайт - а назвать такую онлайн игру (с локальным клиентом на компе) сможете? (которой бы выделялось столько памяти) - не думаю.
Согласен, что это не реально, но все же это возможно.

Мои знания заканчиваются на том, что есть например определенный базовый адрес от которого по смещениям можно накопать практически любой параметр в игре.
Как то так. Но это же не на autoit делают. Ставьте chetengine и ищите нужные адреса. Из autota будете только читать. Поиск изменений - не самая удачная идея.
 
Автор
N

NickGrava

Новичок
Сообщения
12
Репутация
0
Просто в том же Cheat Engine для того чтобы найти адрес нужно ввести значение которое необходимо искать в памяти. а когда событие происходит на экране...и ввести особо не чего. даж и не знаешь как использовать эту прогу.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Как то так: Искать все значения, а затем - Значение увеличилось, уменьшилось, не изменилось и т.п.
 
Автор
N

NickGrava

Новичок
Сообщения
12
Репутация
0
Щас вообщем вымучал. Нашел нужный адрес...но проблема в том что не умею находить смещения. так что после перезахода в игру - будет уже другой адрес.
 
Верх