Esone Опубликовано 7 сентября, 2016 Поделиться Опубликовано 7 сентября, 2016 Всем привет Нашел нужные указатели на динамический адрес и тд Через Се все отлично работает (переходит на нужный мне адрес по указателям) Генерировал трейнер через се тоже все хорошо работает Но на С# и на с++ выдает не правильный адрес( Киньте код если есть у кого или подскажите как сделать функцию на указателях)Желательно С# Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 7 сентября, 2016 Поделиться Опубликовано 7 сентября, 2016 Привет! Логика простая. Если у тебя не работает код - показывай код, иначе мы будем пытаться прочитать его телепатически, а это больно. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Esone Опубликовано 7 сентября, 2016 Автор Поделиться Опубликовано 7 сентября, 2016 (изменено) 5 часов назад, keng сказал: Привет! Логика простая. Если у тебя не работает код - показывай код, иначе мы будем пытаться прочитать его телепатически, а это больно. Скрытый текст DWORD CVD_STATIC = 0x1AE6B3C; DWORD PointerCVD_1() { DWORD result; ReadProcessMemory(GetCurrentProcess(), (void*)(CVD_STATIC), &result, sizeof(result), 0); return result; } //0bf772f8 DWORD PointerCVD_2() { DWORD result; ReadProcessMemory(GetCurrentProcess(), (void*)(PointerCVD_1() + 0x84), &result, sizeof(result), 0); return result; } DWORD PointerCVD_3() { DWORD result; ReadProcessMemory(GetCurrentProcess(), (void*)(PointerCVD_2() + 0x25c), &result, sizeof(result), 0); return result; } DWORD PointerCVD_4() { DWORD result; ReadProcessMemory(GetCurrentProcess(), (void*)(PointerCVD_3() + 0x20), &result, sizeof(result), 0); return result; } DWORD PointerCVD_5() { DWORD result; ReadProcessMemory(GetCurrentProcess(), (void*)(PointerCVD_4() + 0x30), &result, sizeof(result), 0); return result; } DWORD PointerCVD_6() { DWORD result; ReadProcessMemory(GetCurrentProcess(), (void*)(PointerCVD_5() + 0xbc), &result, sizeof(result), 0); return result; } Изменено 7 сентября, 2016 пользователем Xipho У нас принято код оборачивать тегом специальным. А если код большой, то еще и прятать его под спойлер. Такие дела. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 7 сентября, 2016 Поделиться Опубликовано 7 сентября, 2016 На первый взгляд - все в норме. Попробуй воспользоваться функцией GetLastError, чтобы выяснить, верно ли работает ReadProcessMemory. К тому же, память, которую ты читаешь, может быть защищена от чтения - от этого спасет VirtualProtectEx. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
holy Опубликовано 7 сентября, 2016 Поделиться Опубликовано 7 сентября, 2016 Ещё как вариант , предположу что BaseAddress у модуля Game.exe смещается. У тебя на скрине статичный адрес это "Game.exe"+016*** (видны на скрине только первые 3 цифры). А в коде у тебя жестко задано число. Однако в зависимости от смещения Game.exe будет разный первоначальный адрес. Ссылка на комментарий Поделиться на другие сайты Поделиться
Esone Опубликовано 7 сентября, 2016 Автор Поделиться Опубликовано 7 сентября, 2016 1 час назад, holy сказал: Ещё как вариант , предположу что BaseAddress у модуля Game.exe смещается. У тебя на скрине статичный адрес это "Game.exe"+016*** (видны на скрине только первые 3 цифры). А в коде у тебя жестко задано число. Однако в зависимости от смещения Game.exe будет разный первоначальный адрес. Я сгенерировал трейнер через се и там используется эти смещения и адрес что в коде и все отлично работает,а вот через с++ адрес выдает которой вообще за пределами вроде как) Ссылка на комментарий Поделиться на другие сайты Поделиться
Esone Опубликовано 8 сентября, 2016 Автор Поделиться Опубликовано 8 сентября, 2016 7 часов назад, holy сказал: Ещё как вариант , предположу что BaseAddress у модуля Game.exe смещается. У тебя на скрине статичный адрес это "Game.exe"+016*** (видны на скрине только первые 3 цифры). А в коде у тебя жестко задано число. Однако в зависимости от смещения Game.exe будет разный первоначальный адрес. первоначальный адрес. это ты имеешь ввиду что на скрине 0xBF972F8? Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 8 сентября, 2016 Поделиться Опубликовано 8 сентября, 2016 Ребята, динамический base_address для PE-модуля - это очень редкая фигня, если я ничего не путаю. Автор, readprocessmemory точно правильно отрабатывает и точно есть все права? Ты можешь руками в Memory Viewer в Cheat Engine пройтись по всей цепочке и посмотреть, верна ли она, а затем сравнить с тем, что происходит в коде. Отладчик или логи - в помощь. Ошибиться тут сложно, главное - быть аккуратным. Ссылка на комментарий Поделиться на другие сайты Поделиться
Esone Опубликовано 8 сентября, 2016 Автор Поделиться Опубликовано 8 сентября, 2016 30 минуты назад, keng сказал: Ребята, динамический base_address для PE-модуля - это очень редкая фигня, если я ничего не путаю. Автор, readprocessmemory точно правильно отрабатывает и точно есть все права? Ты можешь руками в Memory Viewer в Cheat Engine пройтись по всей цепочке и посмотреть, верна ли она, а затем сравнить с тем, что происходит в коде. Отладчик или логи - в помощь. Ошибиться тут сложно, главное - быть аккуратным. При открытии отладчика игра закрывается ( Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 8 сентября, 2016 Поделиться Опубликовано 8 сентября, 2016 (изменено) 22 часа назад, Esone сказал: DWORD CVD_STATIC = 0x1AE6B3C; DWORD PointerCVD_1() { DWORD result; ReadProcessMemory(GetCurrentProcess(), (void*)(CVD_STATIC), &result, sizeof(result), 0); return result; } А вот тут ты разве не должен получать указатель первого уровня? Т.е Game.exe+016XXXXX -> 0BF972F8 DWORD CVD_STATIC = 016XXXXX; DWORD PointerCVD_1() { DWORD result; ReadProcessMemory(GetCurrentProcess(), (PBYTE*)(exebaseaddress + CVD_STATIC), &result, sizeof(result), 0); return result; } Потом второй уровень с 0xBC, посмотри как CE выстраивает цепочку снизу вверх, а у тебя все наоборот получилось. DWORD PointerCVD_2() { DWORD result; ReadProcessMemory(GetCurrentProcess(), (void*)(PointerCVD_1() + 0xBC), &result, sizeof(result), 0); return result; } Изменено 8 сентября, 2016 пользователем partoftheworlD Ссылка на комментарий Поделиться на другие сайты Поделиться
Esone Опубликовано 9 сентября, 2016 Автор Поделиться Опубликовано 9 сентября, 2016 Я пробовал с низу в верх и все ровно не то,0BF972F8 - этот адрес тоже меняется каждый раз. от этого адреса Game.exe + 016E6B3C к 0BF972F8 смещения 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения