konctantin777
Отправлено: 25 Февраля, 2019 - 20:59:15
Эксперт
Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 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"....
Zireael
Отправлено: 26 Февраля, 2019 - 02:11:30
Эксперт
Покинул форум
Сообщений всего: 4466
Дата рег-ции: Нояб. 2017
Репутация: 585
Сама по себе затея не имеет смысла. Изменение значения в памяти ничего не даст, потому что это не изменит данные на сервере, т. к. игра онлайн. Разве что научится использовать 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));
konctantin777
Отправлено: 26 Февраля, 2019 - 07:00:42
Эксперт
Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 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 код (Отобразить ) win wind=window ("GemsofWar", "UnityWndClass", -1);
wind.left =0;
wind.top =0;
movewindow(wind);
int prc=openprocess(wind);//Открываем процесс с указателем на окно w.
int mana=14;
int adr[1000000];
int chitat_v_char[100000];
/////////////////////////
char poisk[32];
poisk[0]=29; poisk[1]=0; poisk[2]=0;
poisk[3]=0; poisk[4]=111;
poisk[5]=0; poisk[6]=0;
poisk[7]=0; poisk[8]=53;
poisk[9]=0; poisk[10]=0;
poisk[11]=0; poisk[12]=14;
poisk[13]=0; poisk[14]=0;
poisk[15]=0; poisk[16]=mana;
poisk[17]=0; poisk[18]=0;
poisk[19]=0; poisk[20]=14;
poisk[21]=0; poisk[22]=0;
poisk[23]=0; poisk[24]=0;
poisk[25]=0;poisk[26]=0;
poisk[27]=0; poisk[28]=0;
poisk[29]=0; poisk[30]=0;poisk[31]=0;
/////////////////////////////////////////////
char poiskmask[32];
for (int n=0; n<32; n++)poiskmask[n]=formatic(1);
poiskmask[5]=formatic(0);
findmemorymask (1, #poisk[0], 32, #adr[0], 0, #poiskmask[0], 100, prc);
int t1=codhexi(#poisk[16], 1);
//messagebox(adr[0]);
//messagebox(t1);
int count=findmemorymask (sizearray(adr), #poisk[0], sizearray(poisk), #adr[0], 0, #poiskmask[0], 100, prc);
messagebox("Найдено адресов: "+format(count));
(Добавление)
Даже если все адреса в маске поставить, что учитываются Код (Отобразить ) win wind=window ("GemsofWar", "UnityWndClass", -1);
wind.left =0;
wind.top =0;
movewindow(wind);
int prc=openprocess(wind);//Открываем процесс с указателем на окно w.
int mana=14;
int adr[1000000];
int chitat_v_char[100000];
/////////////////////////
char poisk[32];
poisk[0]=29; poisk[1]=0; poisk[2]=0;
poisk[3]=0; poisk[4]=20;
poisk[5]=0; poisk[6]=0;
poisk[7]=0; poisk[8]=53;
poisk[9]=0; poisk[10]=0;
poisk[11]=0; poisk[12]=14;
poisk[13]=0; poisk[14]=0;
poisk[15]=0; poisk[16]=mana;
poisk[17]=0; poisk[18]=0;
poisk[19]=0; poisk[20]=14;
poisk[21]=0; poisk[22]=0;
poisk[23]=0; poisk[24]=0;
poisk[25]=0;poisk[26]=0;
poisk[27]=0; poisk[28]=0;
poisk[29]=0; poisk[30]=0;poisk[31]=0;
/////////////////////////////////////////////
char poiskmask[32];
for (int n=0; n<32; n++)poiskmask[n]=formatic(1);
//poiskmask[5]=formatic(0);
//findmemorymask (1, #poisk[0], 32, #adr[0], 0, #poiskmask[0], 100, prc);
int t1=codhexi(#poisk[16], 1);
//messagebox(adr[0]);
//messagebox(t1);
int count=findmemorymask (sizearray(adr), #poisk[0], sizearray(poisk), #adr[0], 0, #poiskmask[0], 100, prc);
messagebox("Найдено адресов: "+format(count));
то messagebox("Найдено адресов: "+format(count)); выдаёт 0
Скрин с СЕ [img](для просмотра ссылки Вам необходимо авторизоваться) /img]
konctantin777
Отправлено: 26 Февраля, 2019 - 15:29:21
Эксперт
Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017
Откуда: Архангельск
Репутация: 6
Zireael пишет:
Цитата:
poiskmask[5 ]=formatic(0);
poisk[
4 ]=111;
Исправил. Но Вот код (Отобразить ) win wind=window ("GemsofWar", "UnityWndClass", -1);
//wind.left =0;
//wind.top =0;
//movewindow(wind);
int prc=openprocess(wind);//Открываем процесс с указателем на окно w.
int mana=14;
int adr[1000000];
int chitat_v_char[100000];
/////////////////////////
char poisk[32];
poisk[0]=29; poisk[1]=0; poisk[2]=0;
poisk[3]=0; poisk[4]=53;
poisk[5]=0; poisk[6]=0;
poisk[7]=0; poisk[8]=53;
poisk[9]=0; poisk[10]=0;
poisk[11]=0; poisk[12]=14;
poisk[13]=0; poisk[14]=0;
poisk[15]=0; poisk[16]=mana;
poisk[17]=0; poisk[18]=0;
poisk[19]=0; poisk[20]=14;
poisk[21]=0; poisk[22]=0;
poisk[23]=0; poisk[24]=0;
poisk[25]=0;poisk[26]=0;
poisk[27]=0; poisk[28]=0;
poisk[29]=0; poisk[30]=0;poisk[31]=0;
/////////////////////////////////////////////
char poiskmask[32];
for (int n=0; n<32; n++)poiskmask[n]=formatic(1);
//poiskmask[4]=formatic(0);
findmemorymask (1, #poisk[0], 32, #adr[0], 0, #poiskmask[0], 100, prc);
int t1=codhexi(#poisk[16], 1);
//messagebox(adr[0]);
//messagebox(t1);
int count=findmemorymask (sizearray(adr), #poisk[0], sizearray(poisk), #adr[0], 0, #poiskmask[0], 100, prc);
messagebox("Найдено адресов: "+format(count));
Вообще сделал, чтобы искал все значения (взяты с СЕ)- выдаёт, что найдено 0...
[img] [/img]
Zireael
Отправлено: 27 Февраля, 2019 - 03:36:18
Эксперт
Покинул форум
Сообщений всего: 4466
Дата рег-ции: Нояб. 2017
Репутация: 585
Странно оно работает. Точнее не работает.
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};
то не найдёт ни одного адреса.
Zireael
Отправлено: 27 Февраля, 2019 - 10:39:11
Эксперт
Покинул форум
Сообщений всего: 4466
Дата рег-ции: Нояб. 2017
Репутация: 585
Цитата:
Что это за игра и где ее скачать?
В steam GemsofWar.
https://store.steampowered.com/a...War__Puzzle_RPG/
Установить steam, в магазине в поиске найти игру, установить. Игра бесплатная.
Цитата:
На другой программе проверил. Все ок.
В lineage2 тоже работает без проблем.
Цитата:
Попробуйте объявить указатель не тип int, а тип double
Пробовал. Не влияет. К тому же адрес влезает в int.
Kibor
Отправлено: 27 Февраля, 2019 - 16:40:52
Эксперт
Просматривает форум
Сообщений всего: 8222
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
Что то не понятное в этой игре или в 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 дал другие адреса, те что давал изначально Кибор и те что продолжал давать.
Короче не знаю.
VIDEO
Но баг все же нашел и исправил. На это не влиял. А влиял на нахождение двух подряд идущих значений, так как после нахождения первого перепрыгивал через байт и не находил второй.
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");