Описание: Работа с памятью процесса. Поиск, чтение, запись в память процесса игры |
Поиск в теме | Версия для печати |
dervis |
Отправлено: 04 Января, 2019 - 15:41:07
|
Прохожий
Покинул форум
Сообщений всего: 4
Дата рег-ции: Янв. 2019
Репутация: 0
|
Бодрый день коллеги
Я пока в начале пути, но тема с ковырянием памяти процесса крайне увлекательна =)
Наткнулся на непонятки с 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]);
(Отредактировано автором: 04 Января, 2019 - 15:48:11) |
|
|
Zireael |
Отправлено: 06 Января, 2019 - 02:00:07
|
Эксперт
Покинул форум
Сообщений всего: 4456
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: а как быть со строковыми, да еще и в кодировке 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);
}
} (Отредактировано автором: 06 Января, 2019 - 02:12:18) |
|
|
|
Поиск в теме | Версия для печати |
Страниц (24): В начало « 9 10 11 12 [13] 14 15 16 17 » В конец |
Сейчас эту тему просматривают: 7 (гостей: 7, зарегистрированных: 0) |
« О программе Кибор » |
Все гости форума могут просматривать этот раздел. Только администраторы и модераторы могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
|
|