Dejavu Опубликовано 23 октября, 2016 Поделиться Опубликовано 23 октября, 2016 Вопрос 1: Использую ProcMem(Source: ProcMem.h,UPD). Пытаюсь получить Base адрес процесса игры: ProcMem Mem("collapse.exe"); DWORD Base = Mem.dwBase; Для того, что бы потом с указателя типа "collapse.exe" + 0x123 прочитать значение, но проблема в том, что в CE показывает один адрес процесса(Например, 00905A4D), а в C++ совсем другой(4194304). Не могу разобраться, в чем же проблема?Вопрос 2 Как правильно использовать указатель с несколькими смещениями? Я использую так: float Status = Mem.read<float>((((Base + 0x0024EC1C) + 0x36c) + 0x308) + 0x508); Или можно float Status = Mem.read<float>(Base + 0x0024EC1C + 0x36c + 0x308 + 0x508); Как правильно? Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 23 октября, 2016 Поделиться Опубликовано 23 октября, 2016 (изменено) Получи сначала базовый адрес process.exe + 0x0024EC1C в DWORD, а потом делай как тут Сначала получал указатель на структуру способностей, потом на саму способность и на характеристики. auto base = memory->ReadMem<DWORD>(DarkVision + 0x4c8); memory->WriteMem((base + 0x5b8) + 0x190, 0.f); memory->WriteMem((base + 0x5b8) + 0x184, 0.f); memory->WriteMem((base + 0x5b8) + 0x15C, 870000000.f); memory->WriteMem((base + 0x5b8) + 0x160, 870000000.f); или auto dwmana = memory->ReadMem<DWORD>(m_mana + 0x790); dwmana = memory->ReadMem<DWORD>(dwmana + 0x680); memory->WriteMem(dwmana + 0x594,101); Изменено 23 октября, 2016 пользователем partoftheworlD Ссылка на комментарий Поделиться на другие сайты Поделиться
Dejavu Опубликовано 23 октября, 2016 Автор Поделиться Опубликовано 23 октября, 2016 Скрытый текст #include "Includes.h" ProcMem Mem("collapse.exe"); DWORD Base = Mem.dwBase; DWORD BaseAdress; float Status; using namespace std; int main() { DWORD BaseAdress = Base + 0x0024EC1C; float Status = Mem.read<float>(((BaseAdress + 0x36c) + 0x308) + 0x508); cout << Status << endl; system("pause"); return 0; } Все равно не то Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 23 октября, 2016 Поделиться Опубликовано 23 октября, 2016 (изменено) 5 минут назад, Dejavu сказал: Все равно не то Конечно не то. Получается, что ты просто сложил 2 числа, а не прочитал указатель. Попробуй так. Переделаешь под себя конечно же. auto BaseAdress = memory->ReadMem<DWORD>(Base + 0x24EC1C); Изменено 23 октября, 2016 пользователем partoftheworlD 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Dejavu Опубликовано 23 октября, 2016 Автор Поделиться Опубликовано 23 октября, 2016 Что это? Откуда memory->? Если убрать все, что мне тут непонятно, то получится то же самое, что и у меня, иначе не работает Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 23 октября, 2016 Поделиться Опубликовано 23 октября, 2016 (изменено) 2 минуты назад, Dejavu сказал: Откуда memory->? Обновил, под себя переделаешь. Я пример смотрю из код своего трейнера, который прекрасно работает. Изменено 23 октября, 2016 пользователем partoftheworlD Ссылка на комментарий Поделиться на другие сайты Поделиться
Dejavu Опубликовано 23 октября, 2016 Автор Поделиться Опубликовано 23 октября, 2016 14 минуты назад, partoftheworlD сказал: Обновил, под себя переделаешь. Я пример смотрю из код своего трейнера, который прекрасно работает. Хорошо, днем разберусь Ссылка на комментарий Поделиться на другие сайты Поделиться
Dejavu Опубликовано 23 октября, 2016 Автор Поделиться Опубликовано 23 октября, 2016 @partoftheworlD Получилось, но только таким образом Скрытый текст int main() { DWORD BaseAdress = Mem.read<DWORD>(Base + 0x0024EC1C); DWORD BaseAdress1 = Mem.read<DWORD>(BaseAdress + 0x36c); DWORD BaseAdress2 = Mem.read<DWORD>(BaseAdress1 + 0x308); float Status = Mem.read<float>(BaseAdress2 + 0x508); cout << Status << endl; system("pause"); return 0; } Ссылка на комментарий Поделиться на другие сайты Поделиться
Dejavu Опубликовано 23 октября, 2016 Автор Поделиться Опубликовано 23 октября, 2016 В 23.10.2016в09:44, partoftheworlD сказал: Обновил, под себя переделаешь. Я пример смотрю из код своего трейнера, который прекрасно работает. Есть функция readP, но, видимо, я неправильно ей пользуюсь Скрытый текст #include "Includes.h" ProcMem Mem("collapse.exe"); DWORD Base = Mem.dwBase; char Pointers[] = {0x36c, 0x308,0x508 }; float Status; using namespace std; int main() { float BaseAdress = Mem.readP<float>((DWORD)Base + 0x0024EC1C,Pointers,true); cout << BaseAdress << endl; system("pause"); return 0; } Ссылка на комментарий Поделиться на другие сайты Поделиться
Trix Опубликовано 23 октября, 2016 Поделиться Опубликовано 23 октября, 2016 Помнится мне, что надо не складывать смещение, а читать информацию по адресу и к этой информации уже прибавлять смещение. По крайней мере, у меня в WOW так было, ибо какой смысл ставить несколько смещений отдельно?? Читай информацию из адреса Base + 0x0024EC1C Прибавляй к значению по этому адресу +0x36c и так до конца указателей Ссылка на комментарий Поделиться на другие сайты Поделиться
Trix Опубликовано 23 октября, 2016 Поделиться Опубликовано 23 октября, 2016 3 часа назад, Dejavu сказал: Для того, что бы потом с указателя типа "collapse.exe" + 0x123 прочитать значение, но проблема в том, что в CE показывает один адрес процесса(Например, 00905A4D), а в C++ совсем другой(4194304). Не могу разобраться, в чем же проблема? Тут используется модульная адресация, а ты ищешь базовый модуль, когда скорее всего используется другой Посмотри все модули и сопоставь со своим Ссылка на комментарий Поделиться на другие сайты Поделиться
Dejavu Опубликовано 23 октября, 2016 Автор Поделиться Опубликовано 23 октября, 2016 5 часов назад, Trix сказал: Тут используется модульная адресация, а ты ищешь базовый модуль, когда скорее всего используется другой Посмотри все модули и сопоставь со своим Нет, здесь я использую все правильно, мне и нужен базовый Ссылка на комментарий Поделиться на другие сайты Поделиться
Dejavu Опубликовано 23 октября, 2016 Автор Поделиться Опубликовано 23 октября, 2016 5 часов назад, Trix сказал: Помнится мне, что надо не складывать смещение, а читать информацию по адресу и к этой информации уже прибавлять смещение. По крайней мере, у меня в WOW так было, ибо какой смысл ставить несколько смещений отдельно?? Читай информацию из адреса Base + 0x0024EC1C Прибавляй к значению по этому адресу +0x36c и так до конца указателей Я уже разобрался Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 23 октября, 2016 Поделиться Опубликовано 23 октября, 2016 (изменено) 14 часа назад, Dejavu сказал: Есть функция readP, но, видимо, я неправильно ей пользуюсь Не уверен, но вроде бы тут цикл должен быть который будет перебирать смещения, а шаблон читает их. Изменено 23 октября, 2016 пользователем partoftheworlD Ссылка на комментарий Поделиться на другие сайты Поделиться
Dejavu Опубликовано 23 октября, 2016 Автор Поделиться Опубликовано 23 октября, 2016 1 час назад, partoftheworlD сказал: Не уверен, но вроде бы тут цикл должен быть который будет перебирать смещения, а шаблон читает их. Да, скорее всего. Попробую Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения