Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (3): [1] 2 3 »   

> Описание: Работа с процессом. Поиск и заморозка данных
Kibor
Отправлено: 12 Ноября, 2013 - 23:01:28
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8095
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Добавление функций работы с памятью игры.

findmemorymask - поиск данных в памяти процесса по маске.
Используется для поиска в процессе неоднородного по своему значению набора данных. Таким типом данных может быть структура.
Что такое структура? Это набор байт, идущих один за другим в виде ленты в которые последовательно записаны некие данные конкретного объекта. В отличие от масива типы данных могут быть различными.
По русски:
Пример структуры описывающей моба (просто пример)....

Имя моба (отведено 20 байт)
ХП моба (4 байта)
Позиция моба X (4 байта)
Позиция моба Y (4 байта)
Позиция моба Z (4 байта)
Масштаб размера модели в клиенте (4 байта)
Прозрачность (4 байта)
...

Это все примерно. Для расструктуризации (определения какие данные и сколько байт занимают в структуре) необходим опыт работы с такими программами как Cheat Engine.

Вышеприведенная структура в общей сложности займет 46 байт идущих один за другим.

После того как мы поняли что собой представляет структура моба, список адресов всех структур мобов можно получить с помощью findmemorymask.
Пояснение:
Определим какие данные структуры имеют одинаковые значения у всех мобов такого типа...
Это будет

Имя моба (отведено 20 байт)
ХП моба (4 байта)
... (4 байта)
... (4 байта)
... (4 байта)
Масштаб размера модели в клиенте (4 байта)
Прозрачность (4 байта)

Зная общие данные можно составить маску и по ней искать эти 46 байт. Маска нам нужна для того что бы искать именно по известным общим данным (они выделены зеленым) и не учитывать остальные данные.
Для поиска используется 2 масива char размером по 46 байт. Один - набор данных, другой маска.
Для данных нам надо заполнить массив char размером в 46 байт известными данными (Имя моба, ХП моба, Масштаб размера модели в клиенте, Прозрачность) в соответствием с индексами массива.
Для маски так же заполняем массив 46 байт. Инициализируем каждый байт в нем 0 или 1. (0 - данное значение не учитывается при поиске, 1 - учитывается). То есть номера в массивах где находятся искомые данные инициализируем 1, остальные (которые пропускаем 0).

Синтаксис:
findmemorymask (-1, #poisk[0], 46, #adr[0], 0, #poiskmask[0], 100, prc);
Первый параметр: количество искомых адресов. при -1 искать все адреса.
Второй параметр: указатель на массив char в котором находятся искомые данные
Третий: количество искомых байт
четвертый: указатель на массив приемник адресов. int или double. Подробнее..
пятый: адрес старта поиска.
шестой: указатель на массив char - маску.
седьмой: процентное отношение (при котором можно считать поиск совпавшим. учитываются только байты учавствующие в поиске).
восьмой: указатель на процесс.

По поводу 7 параметра. Если поиск с 100 процентами не дал результата можно уменьшить точность до тех пор пока не будет найдено, а потом разбираться какие данные структуры не постоянные...

//

Так же можно указать не обязательным параметром финишный адрес поиска
Указанный финишный адрес является адресом региона, в котором будет происходить поиск!

findmemorymask без ограничения:
findmemorymask (1, #poisk[0], 4, #adr, 0, #poiskmask[0], 100, prc)
Красным обозначен стартовый адрес.

findmemorymask с ограничениями:
findmemorymask (1, #poisk[0], 4, #adr, 0, 500000, #poiskmask[0], 100, prc)
Зеленым обозначен финишный адрес.

Его можно не указывать или поставить его в -1. Тогда будет без ограничений.


Возвращает количество найденных объектов.
///////////////////////////

freezememory - Записывает в память процесса по указанному адресу набор байт и замораживает их (то есть не дает игре изменить их). Работает как и writememory только с заморозкой.
Синтаксис:
freezememory(0, #zamen[0], 16, adr, prc);
Параметр один - порядковый номер команды (как и в textout). По этому номеру можно потом разморозить эти данные.
параметр два - указатель на массив char, в котором записаны данные для замены и заморозки.
три - количество записываемых и замораживающихся байт
четыре - адресс в памяти
пять - процесс.

freememory(0);
Размораживат данные номеру команды в freezememory - (параметр 1).
Либо без параметра freememory();
В этом случае размораживает все что заморожено.



Кто знаком с поиском данных в процессах и Cheat Engine или Artmoney будет намного проще понять назначение этих функций.


//////////////////////////////

Сделал исправление в format - копирование масива char в string. Исправил копирование части массива. Подробнее в Копировать массив char в string

 
 Top
Barabachka
Отправлено: 19 Ноября, 2013 - 19:51:36
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 88
Дата рег-ции: Сент. 2013  
Репутация: 3




На данный момент программа имеет только визуальное определение наличия моба или растояния к мобу. Теперь если довести это все до ума то можно будет сделать более легким ориентирование на месности и определять дальность расположения, досегаемость моба в игре.
 
 Top
Kibor
Отправлено: 19 Ноября, 2013 - 21:06:44
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8095
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Можно, только под фрост пока этот метод не будет работать. Потом буду реанимировать эту функцию по защитой.
 
 Top
Barabachka
Отправлено: 19 Ноября, 2013 - 21:08:28
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 88
Дата рег-ции: Сент. 2013  
Репутация: 3




Вот ктоб обьяснил как в L2 можно найти через Cheat Engine местоположение мобов в игре?
 
 Top
Kibor
Отправлено: 19 Ноября, 2013 - 21:22:42
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8095
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Ну я писал что тут надо уметь разбираться...
 
 Top
shurupay
Отправлено: 10 Сентября, 2015 - 18:01:03
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 2
Дата рег-ции: Сент. 2014  
Репутация: 0




 Цитата:
Синтаксис:
findmemorymask (-1, #poisk[0], 46, #adr[0], 0, #poiskmask[0], 100, prc);
Первый параметр: количество искомых адресов. при -1 искать все адреса.
Второй параметр: указатель на массив char в котором находятся искомые данные
Третий: количество искомых байт
четвертый: указатель на массив приемник адресов. int или double. Подробнее..
пятый: адрес старта поиска.
шестой: указатель на массив char - маску.
седьмой: процентное отношение (при котором можно считать поиск совпавшим. учитываются только байты учавствующие в поиске).
восьмой: указатель на процесс.

Условие:
1й параметр = 1;
2й параметр = массив байт «00 00 00 00 00 00 00 00 59 40 00 00 00 00 00 00 00 00 00»;
3й параметр = сответственно 19;
4й - понятно;
5й - 0;
6й - маска все 1;
7й - 100;
8й - тоже понятно;
Помогите пожалуйста по 2му параметру, не могу массив байт в char загнать, задайте направление куда двигатся.
 
 Top
Kibor
Отправлено: 10 Сентября, 2015 - 18:18:32
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8095
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




если маска вся 1 то можно юзать findmemory

а так
CODE:
char poisk[19];

poisk[0]=formatic(0); poisk[1]=formatic(0); poisk[2]=formatic(0); poisk[3]=formatic(0); poisk[4]=formatic(0);
poisk[5]=formatic(0); poisk[6]=formatic(0); poisk[7]=formatic(0); poisk[8]=formatic(59); poisk[9]=formatic(40);
poisk[10]=formatic(0); poisk[11]=formatic(0); poisk[12]=formatic(0); poisk[13]=formatic(0); poisk[14]=formatic(0);
poisk[15]=formatic(0); poisk[16]=formatic(0); poisk[17]=formatic(0); poisk[18]=formatic(0);

char poiskmask[19];

for (int n=0; n<19; n++)poiskmask[n]=formatic(1);


formatic
 
 Top
shurupay
Отправлено: 10 Сентября, 2015 - 18:35:34
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 2
Дата рег-ции: Сент. 2014  
Репутация: 0




Спассибо!
 
 Top
Dansolo
Отправлено: 30 Июля, 2016 - 20:19:06
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 3
Дата рег-ции: Июль 2016  
Репутация: 0




Можно ли получить по названию моба, его хп и координаты?
 
 Top
Kibor
Отправлено: 30 Июля, 2016 - 20:20:33
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8095
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Можно.
Надо Найти его в памяти и по структуре считать что надо
Сначала надо найти с помощью CE и посмотреть как и что там.
Потом составить маску для поиска и искать Кибором.
 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« О программе Кибор »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by