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

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

121. Kibor - 04 Августа, 2018 - 05:01:22 - перейти к сообщению
Заполните массив по которому надо что то найти нужными байтами и ищите.
122. zeronick - 02 Сентября, 2018 - 07:14:47 - перейти к сообщению
Dantes3000 , привет) ты написал бота под Eve Online? Можешь помочь с распознаванием адресов евы (полоска щитов, иконка нейтралов и тд) Напиши скайп, почту или еще что. Буду признателен.
123. Dantes3000 - 02 Сентября, 2018 - 14:20:49 - перейти к сообщению
zeronick , работал в этом направлении, но результатов особо не добился. Там очень много дублирующихся адресов. Если будет время, то допилю через память проверку. А пока можешь задавать вопросы в теме бота
124. dervis - 04 Января, 2019 - 07:41:07 - перейти к сообщению
Бодрый день коллеги
Я пока в начале пути, но тема с ковырянием памяти процесса крайне увлекательна =)

Наткнулся на непонятки с 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]);
125. Kibor - 04 Января, 2019 - 09:02:31 - перейти к сообщению
Как такое может быть не знаю.
Адрес смещается пока не дойдет до конца.
Только что протестировал. Все корректно как с указанием количества искомых объектов, так и с -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.
126. dervis - 05 Января, 2019 - 16:57:11 - перейти к сообщению
разобрался с findmemorymask. крутая штука =))

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

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

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

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

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

у меня в голове родилась пока такая идея - берем ищем имя персонажа по известной маске, с помощью СЕ мы точно знаем по какому адресу он находится относительно game.dll + offset, отнимаем этот offset и вуаля мы знаем точный текущий адрес game.dll и дальше уже можно пользоваться смещениями из СЕ для последующего поиска/обращения.
127. Zireael - 05 Января, 2019 - 18:00:07 - перейти к сообщению
 Цитата:
а как быть со строковыми, да еще и в кодировке 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);
}
}
128. dervis - 07 Января, 2019 - 14:46:09 - перейти к сообщению
вопрос немного не в тему, но я правда искал.

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

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);
}
129. Kibor - 08 Января, 2019 - 01:10:49 - перейти к сообщению
CODE:
messagebox(getMySuperChSV(5, "Wid", 1.5));


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


Возвращает тот тип, который после return
130. konctantin777 - 24 Февраля, 2019 - 05:41:01 - перейти к сообщению
День добрый !
Подскажите как просто записать число в процесс ? (для начала) Число и адрес найдены в артмани.

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

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

ошибка...

Powered by ExBB FM 1.0 Final