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

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

 Страниц (24): В начало « 9 10 11 12 [13] 14 15 16 17 » В конец    

> Описание: Работа с памятью процесса. Поиск, чтение, запись в память процесса игры
Kibor
Отправлено: 04 Августа, 2018 - 13:01:22
Post Id



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


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




Заполните массив по которому надо что то найти нужными байтами и ищите.
 
 Top
zeronick
Отправлено: 02 Сентября, 2018 - 15:14:47
Post Id



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


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




Dantes3000 , привет) ты написал бота под Eve Online? Можешь помочь с распознаванием адресов евы (полоска щитов, иконка нейтралов и тд) Напиши скайп, почту или еще что. Буду признателен.
 
 Top
Dantes3000
Отправлено: 02 Сентября, 2018 - 22:20:49
Post Id



Пользователь
Эксперт


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




zeronick , работал в этом направлении, но результатов особо не добился. Там очень много дублирующихся адресов. Если будет время, то допилю через память проверку. А пока можешь задавать вопросы в теме бота
 
 Top
dervis
Отправлено: 04 Января, 2019 - 15:41:07
Post Id



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


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




Бодрый день коллеги
Я пока в начале пути, но тема с ковырянием памяти процесса крайне увлекательна =)

Наткнулся на непонятки с findmemory. Суть ниже.

Я точно знаю через СЕ что по искомому параметру в процессе 6 адресов.

Пытался писать код, в итоге сам Кибор постоянно зависал, я думал долго ищет - но нет он реально висел 20-30 минут не выходя из шутдауна.

И я нашел в чем причина. Опущу детали. Сам процесс инициализируется корректно. Число "37535864" по анализу с СЕ встречается 6 раз, модификация всех 6 адресов успешно приводит к тому чего я добиваюсь. Сам кКибор тоже успешно находит эти 6 адресов успешно их записывает в массив адресов и .... начинает опять записывать те же самые адреса воспринимая их как новые. До этого размер массива адресов я выставлял от балды 10000 и первым параметром "-1" и поэтому код банально вис, после того как я выставил размерность в 6 и стал постеменно увеличивать первый параметр с 1 до 10 - код успешно завершается, мессаджбоксом и калькулятором я перепроверяю все найденные адреса и все отлично, все иедально совпадает с данными из СЕ.
добавляю размерность и вижу что после 6го адреса Кибер начинает опять писать 7й адрес как новый хотя он идеентичен 1му, 8й идеентичен 2му ну и так далее.

Это так задумано? что я делаю не так?

CODE:

messagebox(prc);

char poisk[4];
codhex(37535864,#poisk[0]);

int adr[10];

int res = findmemory (7, #poisk[0], 4, #adr[0], 0, prc);
messagebox(res);
messagebox(adr[0]);
messagebox(adr[1]);
messagebox(adr[2]);
messagebox(adr[3]);
messagebox(adr[4]);
messagebox(adr[5]);
messagebox(adr[6]);

(Отредактировано автором: 04 Января, 2019 - 15:48:11)

 
 Top
Kibor
Отправлено: 04 Января, 2019 - 17:02:31
Post Id



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


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




Как такое может быть не знаю.
Адрес смещается пока не дойдет до конца.
Только что протестировал. Все корректно как с указанием количества искомых объектов, так и с -1.

CODE:
win w=window ("11111");

int prc=openprocess(w);

char poisk[4];
codhex(11111,#poisk[0]);

int adr[10];

int res = findmemory (-1, #poisk[0], 4, #adr[0], 0, prc);
messagebox(format (res)+" "+format (adr[0])+" "+format (adr[1])+" "+format (adr[2]));


там и там нашел по 2.
 
 Top
dervis
Отправлено: 06 Января, 2019 - 00:57:11
Post Id



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


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




разобрался с findmemorymask. крутая штука =))

возникло два вопроса

1. мы обычно читаем булевые переменные либо числовые(интовые, дабловые и тп, не суть)

а как быть со строковыми, да еще и в кодировке UTF-16? тот же СЕ если галку не поставить напротив кодировки стрингового значения он хрен что найдет.
например я точно знаю по какой маске найти адрес, где прописано имя персонажа. но как его вытащить используя Кибор читая именно память и не применяя графический анализ? как прочитать то что написано справа в блоке СЕ при обзоре памяти? Радость

2. многие ботоделы используют так называемые оффсеты. довольно таки полезная штука если точно знаешь что найденные позиции всегда отталкиваются от какой-то конкретной "базы", чаще всего это какая-либо dll выгружаемая в ОЗУ(если я ничего не перепутал). тот же СЕ конкретно показывает какой-нить аля game.dll + смещение(оффсет). понятно что адреса при перезапуске всегда разные, но вот эта "база" + константовое смещение упрощает жизнь таки очень сильно.

возможно ли с помощью кибора как-то применить данный способ к обращению к адресам памяти с уже заранее известными смещениями из СЕ?

у меня в голове родилась пока такая идея - берем ищем имя персонажа по известной маске, с помощью СЕ мы точно знаем по какому адресу он находится относительно game.dll + offset, отнимаем этот offset и вуаля мы знаем точный текущий адрес game.dll и дальше уже можно пользоваться смещениями из СЕ для последующего поиска/обращения.
 
 Top
Zireael
Отправлено: 06 Января, 2019 - 02:00:07
Post Id



Пользователь
Эксперт


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




 Цитата:
а как быть со строковыми, да еще и в кодировке UTF-16?

CODE:
// Прочитать строку из памяти
external(INT, "WideCharToMultiByte", "WideCharToMultiByte", "Kernel32.dll");

win w=window (-1, "l2UnrealWWindowsViewportWindow", -1); // указатель на окно
int prc=openprocess(w); // открыть процесс

char c[20]; // массив для 10 символов unicode
char cc[20]; // массив для ansi
string s=""; // сюда строку запишем

int adr=531523680; // адрес в памяти

if(readmemory(#c[0], sizearray(c), adr, prc)) // прочитать 20 байт (по размеру массива)
{
int x=WideCharToMultiByte(1251, 0, address(#c[0]), sizearray(c), address(#cc[0]), sizearray(cc), 0, 0); // из utf-16 в ansi
if(x)
{
s=format(#cc[0], x/2);
messagebox(s);
}
}

(Отредактировано автором: 06 Января, 2019 - 02:12:18)

 
 Top
dervis
Отправлено: 07 Января, 2019 - 22:46:09
Post Id



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


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




вопрос немного не в тему, но я правда искал.

есть ли функционал самописных процедур? про функции с передачей параметров понятно все. но чтобы я мог писать что типа того с выводом переменной определенного типа есть что-то?

CODE:

bool check_something()
{
if (blablabla) return true;

return false;
}

int getMySuperChSV(int a, string b, double c)
{

blablabla with a,b,c;

return (a+100500);
}
 
 Top
Kibor
Отправлено: 08 Января, 2019 - 09:10:49
Post Id



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


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




CODE:
messagebox(getMySuperChSV(5, "Wid", 1.5));


function getMySuperChSV(int a, string b, double c)
{
return a+100500;
}


Возвращает тот тип, который после return
 
 Top
konctantin777
Отправлено: 24 Февраля, 2019 - 13:41:01
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1134
Дата рег-ции: Окт. 2017  
Откуда: Архангельск
Репутация: 6




День добрый !
Подскажите как просто записать число в процесс ? (для начала) Число и адрес найдены в артмани.

win wind=window ("GemsofWar", "UnityWndClass", -1);
int prc=openprocess(wind);//Открываем процесс с указателем на окно w.

writememory(4, 1, 5A211CC0, prc);

ошибка...
 
 Top
Страниц (24): В начало « 9 10 11 12 [13] 14 15 16 17 » В конец
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« О программе Кибор »


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




Powered by