Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Как записать в процесс число ?

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

1. konctantin777 - 25 Февраля, 2019 - 12:59:15 - перейти к сообщению
Добрый день.
Есть скрипт
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"....
2. Zireael - 25 Февраля, 2019 - 18:11:30 - перейти к сообщению
Сама по себе затея не имеет смысла. Изменение значения в памяти ничего не даст, потому что это не изменит данные на сервере, т. к. игра онлайн. Разве что научится использовать 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));
3. konctantin777 - 25 Февраля, 2019 - 23:00:42 - перейти к сообщению
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]
4. Zireael - 26 Февраля, 2019 - 03:01:21 - перейти к сообщению
 Цитата:
poiskmask[5]=formatic(0);

poisk[4]=111;
5. konctantin777 - 26 Февраля, 2019 - 07:29:21 - перейти к сообщению
 Zireael пишет:
 Цитата:
poiskmask[5]=formatic(0);

poisk[4]=111;


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


Вообще сделал, чтобы искал все значения (взяты с СЕ)- выдаёт, что найдено 0...
[img][/img]
6. Zireael - 26 Февраля, 2019 - 19:36:18 - перейти к сообщению
Странно оно работает. Точнее не работает.
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};

то не найдёт ни одного адреса.
7. konctantin777 - 26 Февраля, 2019 - 22:59:42 - перейти к сообщению
код (Отобразить)


Если искать без маски, просто findmemory- вылетает...
8. Kibor - 27 Февраля, 2019 - 01:05:58 - перейти к сообщению
Что это за игра и где ее скачать?
На другой программе проверил. Все ок.
(Добавление)
Попробуйте объявить указатель не тип int, а тип double

double adr[1000];
9. Zireael - 27 Февраля, 2019 - 02:39:11 - перейти к сообщению
 Цитата:
Что это за игра и где ее скачать?

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

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

Пробовал. Не влияет. К тому же адрес влезает в int.
10. Kibor - 27 Февраля, 2019 - 08:40:52 - перейти к сообщению
Что то не понятное в этой игре или в 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");

Powered by ExBB FM 1.0 Final