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

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

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

> Описание: Работа с памятью процесса
konctantin777
Отправлено: 25 Февраля, 2019 - 20:59:15
Post Id



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


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




Добрый день.
Есть скрипт
CODE:
win wind=window ("GemsofWar", "UnityWndClass", -1);
wind.left =0;
wind.top =0;
movewindow(wind);


int prc=openprocess(wind);//Открываем процесс с указателем на окно w.
int mana=11;
int adr[1000000];
int chitat_v_char[100000];

/////////////////////////
char poisk[32];
poisk[0]=formatic(31); poisk[1]=formatic(0); poisk[2]=formatic(0);
poisk[3]=formatic(0); poisk[4]=formatic(111);
poisk[5]=formatic(0); poisk[6]=formatic(0);
poisk[7]=formatic(0); poisk[8]=formatic(53);
poisk[9]=formatic(0); poisk[10]=formatic(0);
poisk[11]=formatic(0); poisk[12]=formatic(13);
poisk[13]=formatic(0); poisk[14]=formatic(0);
poisk[15]=formatic(0); poisk[16]=formatic(mana);
poisk[17]=formatic(0); poisk[18]=formatic(0);
poisk[19]=formatic(0); poisk[20]=formatic(14);
poisk[21]=formatic(0); poisk[22]=formatic(0);
poisk[23]=formatic(0); poisk[24]=formatic(0);
poisk[25]=formatic(0);poisk[26]=formatic(0);
poisk[27]=formatic(0); poisk[28]=formatic(0);
poisk[29]=formatic(0); poisk[30]=formatic(0);poisk[31]=formatic(0);
/////////////////////////////////////////////
char poiskmask[32];

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

findmemorymask (1, #poisk[0], 1, #adr[0], 0, #poiskmask[0], 100, prc);


(по артмани смотрю)... 17е значение надо менять, а 5е не учитывать.
Не соображу как poisk[16] заменить на цифру "2"....
 
 Top
Zireael
Отправлено: 26 Февраля, 2019 - 02:11:30
Post Id



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


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




Сама по себе затея не имеет смысла. Изменение значения в памяти ничего не даст, потому что это не изменит данные на сервере, т. к. игра онлайн. Разве что научится использовать findmemorymask для поиска адресов и получения нужных значений из памяти не прибегая к readtext.
 Цитата:
"GemsofWar"

Она не в эмуляторе запускается?
 Цитата:
по артмани смотрю

Cheat Engine удобнее.
 Цитата:
как poisk[16] заменить на цифру "2"....

Для начала неплохо бы найти адрес.
 Цитата:
poisk[0]=formatic(31);

formatic не нужен. poisk[0]=31;
 Цитата:
findmemorymask (1, #poisk[0], 1, #adr[0], 0, #poiskmask[0], 100, prc);

Ищется только 1 адрес, при этом объявлен массив для адресов. Можно и один искать если на 100% уверены что таких структур больше нет. Для начала лучше искать все.
Ищется 1 байт, а искать надо всю структуру, т. е 32 байта в данном случае.
 Цитата:
int count=findmemorymask (sizearray(adr), #poisk[0], sizearray(poisk), #adr[0], 0, #poiskmask[0], 100, prc);
messagebox("Найдено адресов: "+format(count));
 
 Top
konctantin777
Отправлено: 26 Февраля, 2019 - 07:00:42
Post Id



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


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




1. Что, в основном, инфа хранится на сервере- знаю. Но именно это значение ломается )
Вот и пытаюсь findmemorymask научиться...
2. И в эмуляторе можно и в стиме. Ломается в стиме.
3. СЕ в основном и пользую. Просто мне артмани удобнее последовательность вводить- приятней кажется интерфейс )
4. int t1=codhexi(#poisk[16], 1);
messagebox(adr[0]);
выдаёт нужное число, но не записав своё, непонятно оно ли... Тоже помощь нужна (
5. "formatic не нужен. poisk[0]=31;" Спасибо- исправлю.
6. "findmemorymask (1, #poisk[0], 32, #adr[0], 0, #poiskmask[0], 100, prc);" Так правильно ? Обычно находит 1 адрес, редко 2. Как разберусь, просто маску расширю.. А если 1е значение ставить "-1", вылетает с ошибкой памяти. Как ограничить конец до куда искать ?
(Добавление)
[img](для просмотра ссылки Вам необходимо авторизоваться) /img] , а кибор выдёт 0
код (Отобразить)

(Добавление)
Даже если все адреса в маске поставить, что учитываются
Код (Отобразить)

то messagebox("Найдено адресов: "+format(count)); выдаёт 0
Скрин с СЕ [img](для просмотра ссылки Вам необходимо авторизоваться) /img]
 
 Top
Zireael
Отправлено: 26 Февраля, 2019 - 11:01:21
Post Id



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


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




 Цитата:
poiskmask[5]=formatic(0);

poisk[4]=111;
 
 Top
konctantin777
Отправлено: 26 Февраля, 2019 - 15:29:21
Post Id



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


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




 Zireael пишет:
 Цитата:
poiskmask[5]=formatic(0);

poisk[4]=111;


Исправил. Но
Вот код (Отобразить)


Вообще сделал, чтобы искал все значения (взяты с СЕ)- выдаёт, что найдено 0...
[img][/img]
 
 Top
Zireael
Отправлено: 27 Февраля, 2019 - 03:36:18
Post Id



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


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




Странно оно работает. Точнее не работает.
CODE:
external(INT, "wsprintf", "wsprintfA", "User32.dll" );
win wind=window ("GemsofWar", "UnityWndClass", -1);

int prc=openprocess(wind);
int adr[1000];
char a[1024];

char poisk[12]={102, 102, 102, 63, 102, 102, 102, 63, 102, 102, 102, 63};
new char poiskmask[sizearray(poisk)];

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

int count=findmemorymask (sizearray(adr), #poisk[0], sizearray(poisk), #adr[0], 0, #poiskmask[0], 100, prc);
messagebox("Найдено адресов: "+format(count));

for(int i=0; i<count; i++)
{
wsprintf(address(#a[0]), "%x", adr[i]); // перевод в hex
messagebox(format(i)+", "+format(adr[i])+", "+format(#a[0]));
}

Находит 32 адреса. И последний даже не близко к тому что надо, т. е. ищет не всё.
https://ibb.co/yX7xYX5
Если искать:
CODE:
char poisk[15]={102, 102, 102, 63, 102, 102, 102, 63, 102, 102, 102, 63, 0, 0, 128};

то не найдёт ни одного адреса.
 
 Top
konctantin777
Отправлено: 27 Февраля, 2019 - 06:59:42
Post Id



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


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




код (Отобразить)


Если искать без маски, просто findmemory- вылетает...
 
 Top
Kibor
Отправлено: 27 Февраля, 2019 - 09:05:58
Post Id



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


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




Что это за игра и где ее скачать?
На другой программе проверил. Все ок.
(Добавление)
Попробуйте объявить указатель не тип int, а тип double

double adr[1000];
 
 Top
Zireael
Отправлено: 27 Февраля, 2019 - 10:39:11
Post Id



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


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




 Цитата:
Что это за игра и где ее скачать?

В steam GemsofWar.
https://store.steampowered.com/a...War__Puzzle_RPG/
Установить steam, в магазине в поиске найти игру, установить. Игра бесплатная.
 Цитата:
На другой программе проверил. Все ок.

В lineage2 тоже работает без проблем.
 Цитата:
Попробуйте объявить указатель не тип int, а тип double

Пробовал. Не влияет. К тому же адрес влезает в int.
 
 Top
Kibor
Отправлено: 27 Февраля, 2019 - 16:40:52
Post Id



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


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




Что то не понятное в этой игре или в CE или в Кибор.
Запустил игру, запустил Кибор и CE
Произвел поиск в CE
CODE:
102, 102, 102, 63, 102, 102, 102, 63, 102, 102, 102, 63
66 66 66 3F 66 66 66 3F 66 66 66 3F

CE нашел 32 адреса.
Произвел тот же поиск в Кибор.
Тоже показал 32 адреса.
Но адреса не совпадали. Смещение на 1 байт.
В Кибор произвел просто поиск 4х байт из этой группы.
И в CE так же. Адреса совпали.
Попытка найти ошибку ни к чему не привела. Там все примитивно. Адрес региона+смещение.
После долгих попыток безрезультатно разобраться перезапустил CE и повторил поиск.
CE дал другие адреса, те что давал изначально Кибор и те что продолжал давать.
Короче не знаю.

Но баг все же нашел и исправил. На это не влиял. А влиял на нахождение двух подряд идущих значений, так как после нахождения первого перепрыгивал через байт и не находил второй.

CODE:
external(INT, "wsprintf", "wsprintfA", "User32.dll" );
win wind=window ("GemsofWar", "UnityWndClass", -1);

int prc=openprocess(wind);
int adr[1000];
char a[1024];


char poisk[12]={102, 102, 102, 63, 102, 102, 102, 63, 102, 102, 102, 63};
// 66 66 66 3F 66 66 66 3F 66 66 66 3F

//char poisk[6]={102, 63, 102, 102, 102, 63};
// 66 3F 66 66 66 3F

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

new char poiskmask[sizearray(poisk)];

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

int count=findmemorymask (sizearray(adr), #poisk[0], sizearray(poisk), #adr[0], 0, #poiskmask[0], 100, prc);

//int count=findmemory (1000, #poisk[0], sizearray(poisk), #adr[0], 0, prc);//Ищем 8 байт ( числа 1032983058 одно за другим)


messagebox("Найдено адресов: "+format(count));

/*
char zz[1];
codhex(255, #zz[0]);
writememory(#zz[0], 1, adr[0], prc);
*/



if (fopen ("c:\5.txt", "w")!=0)
{
for(int i=0; i<count; i++)
{
wsprintf(address(#a[0]), "%x", adr[i]); // перевод в hex
//messagebox(format(i)+", "+format(adr[i])+", "+format(#a[0]));
fwrite(format(i)+", "+format(adr[i])+", "+format(#a[0]));
fwrite(ENDL);//записываем в файл перевод строки
}
fclose();//закрываем файл
}
start("c:\5.txt");
 
 Top
Страниц (6): [1] 2 3 4 5 6 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы и решение проблем »


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




Powered by