Кибор » Кибор - Интегрированная среда разработки ботов » О программе Кибор » Версия 3.05 Работа с процессом. Поиск и заморозка данных

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

1. Kibor - 12 Ноября, 2013 - 15:01:28 - перейти к сообщению
Добавление функций работы с памятью игры.

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

2. Barabachka - 19 Ноября, 2013 - 11:51:36 - перейти к сообщению
На данный момент программа имеет только визуальное определение наличия моба или растояния к мобу. Теперь если довести это все до ума то можно будет сделать более легким ориентирование на месности и определять дальность расположения, досегаемость моба в игре.
3. Kibor - 19 Ноября, 2013 - 13:06:44 - перейти к сообщению
Можно, только под фрост пока этот метод не будет работать. Потом буду реанимировать эту функцию по защитой.
4. Barabachka - 19 Ноября, 2013 - 13:08:28 - перейти к сообщению
Вот ктоб обьяснил как в L2 можно найти через Cheat Engine местоположение мобов в игре?
5. Kibor - 19 Ноября, 2013 - 13:22:42 - перейти к сообщению
Ну я писал что тут надо уметь разбираться...
6. shurupay - 10 Сентября, 2015 - 10:01:03 - перейти к сообщению
 Цитата:
Синтаксис:
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 загнать, задайте направление куда двигатся.
7. Kibor - 10 Сентября, 2015 - 10:18:32 - перейти к сообщению
если маска вся 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
8. shurupay - 10 Сентября, 2015 - 10:35:34 - перейти к сообщению
Спассибо!
9. Dansolo - 30 Июля, 2016 - 12:19:06 - перейти к сообщению
Можно ли получить по названию моба, его хп и координаты?
10. Kibor - 30 Июля, 2016 - 12:20:33 - перейти к сообщению
Можно.
Надо Найти его в памяти и по структуре считать что надо
Сначала надо найти с помощью CE и посмотреть как и что там.
Потом составить маску для поиска и искать Кибором.

Powered by ExBB FM 1.0 Final