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му ну и так далее.
Это так задумано? что я делаю не так?
Я пока в начале пути, но тема с ковырянием памяти процесса крайне увлекательна =)
Наткнулся на непонятки с 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]);
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.
там и там нашел по 2.
Адрес смещается пока не дойдет до конца.
Только что протестировал. Все корректно как с указанием количества искомых объектов, так и с -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]));
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 и дальше уже можно пользоваться смещениями из СЕ для последующего поиска/обращения.
возникло два вопроса
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);
}
}
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);
}
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;
}
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);
ошибка...
Подскажите как просто записать число в процесс ? (для начала) Число и адрес найдены в артмани.
win wind=window ("GemsofWar", "UnityWndClass", -1);
int prc=openprocess(wind);//Открываем процесс с указателем на окно w.
writememory(4, 1, 5A211CC0, prc);
ошибка...