Перейти к содержанию

Функция на динамическом адресе


Рекомендуемые сообщения

Всем привет
Нашел нужные указатели на динамический адрес и тд
Через Се все отлично работает (переходит на нужный мне адрес по указателям)
Генерировал трейнер через се тоже все хорошо работает
Но на С# и на с++ выдает не правильный адрес(
Киньте код если есть у кого или подскажите как сделать функцию на указателях)Желательно С#
Mutq-u7RiMU.jpg

Ссылка на комментарий
Поделиться на другие сайты

Привет! Логика простая. Если у тебя не работает код - показывай код, иначе мы будем пытаться прочитать его телепатически, а это больно.

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

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;
}

 

 

Изменено пользователем Xipho
У нас принято код оборачивать тегом специальным. А если код большой, то еще и прятать его под спойлер. Такие дела.
Ссылка на комментарий
Поделиться на другие сайты

На первый взгляд - все в норме. Попробуй воспользоваться функцией GetLastError, чтобы выяснить, верно ли работает ReadProcessMemory. К тому же, память, которую ты читаешь, может быть защищена от чтения - от этого спасет VirtualProtectEx.

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Ещё как вариант , предположу что BaseAddress у модуля Game.exe смещается. У тебя на скрине статичный адрес это "Game.exe"+016*** (видны на скрине только первые 3 цифры). А в коде у тебя жестко задано число. Однако в зависимости от смещения Game.exe будет разный первоначальный адрес.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, holy сказал:

Ещё как вариант , предположу что BaseAddress у модуля Game.exe смещается. У тебя на скрине статичный адрес это "Game.exe"+016*** (видны на скрине только первые 3 цифры). А в коде у тебя жестко задано число. Однако в зависимости от смещения Game.exe будет разный первоначальный адрес.

Я сгенерировал трейнер через се и там используется эти смещения и адрес что в коде и все отлично работает,а вот через с++ адрес выдает которой вообще за пределами вроде как)

Ссылка на комментарий
Поделиться на другие сайты

7 часов назад, holy сказал:

Ещё как вариант , предположу что BaseAddress у модуля Game.exe смещается. У тебя на скрине статичный адрес это "Game.exe"+016*** (видны на скрине только первые 3 цифры). А в коде у тебя жестко задано число. Однако в зависимости от смещения Game.exe будет разный первоначальный адрес.

первоначальный адрес. это ты имеешь ввиду что на скрине 0xBF972F8?

Ссылка на комментарий
Поделиться на другие сайты

Ребята, динамический base_address для PE-модуля - это очень редкая фигня, если я ничего не путаю. Автор, readprocessmemory точно правильно отрабатывает и точно есть все права? Ты можешь руками в Memory Viewer в Cheat Engine пройтись по всей цепочке и посмотреть, верна ли она, а затем сравнить с тем, что происходит в коде. Отладчик или логи - в помощь. Ошибиться тут сложно, главное - быть аккуратным.

Ссылка на комментарий
Поделиться на другие сайты

30 минуты назад, keng сказал:

Ребята, динамический base_address для PE-модуля - это очень редкая фигня, если я ничего не путаю. Автор, readprocessmemory точно правильно отрабатывает и точно есть все права? Ты можешь руками в Memory Viewer в Cheat Engine пройтись по всей цепочке и посмотреть, верна ли она, а затем сравнить с тем, что происходит в коде. Отладчик или логи - в помощь. Ошибиться тут сложно, главное - быть аккуратным.

При открытии отладчика игра закрывается (
 

Ссылка на комментарий
Поделиться на другие сайты

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;
}

 

 

Изменено пользователем partoftheworlD
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.