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

Проблема с чтением указателей C++


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

Всем, доброго времени суток!

Каким способом можно реализовать чтение указателей?

Пробовал почти все способы которые нашел в интернете, но все равно крашит игру, и даже d3d тест. А если не крашит, то не читает.

 

Вот мои указатели на байт:

webplayer_win.dll+007AA7C8 ,50 ,764 ,e8 ,42c ,114

200bb169e6e2.png

Игра на unity3d

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

А если игра на Unity3D то почему ты пытаешься выйти на указатель не через главный модуль игры, а через какую-то левую библиотеку?

И да, выложи свой код на С++, как ты пытался прочитать указатели, нам нужно видеть как ты пытался, или ты вообще спрашиваешь, как в принципе это можно сделать?

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

Coder, обычно, эта dll, используется в браузерах для воспроизведения игр на Unity3D.

ITkhazeplov07, попробуй, найти другой указатель.

И да, выложи свой код на С++, как ты пытался прочитать указатели, нам нужно видеть как ты пытался, или ты вообще спрашиваешь, как в принципе это можно сделать?

И поддерживаю Coder, выложи наработки.
Ссылка на комментарий
Поделиться на другие сайты

Read(DWORD from, size_t size){	HANDLE t6sp = GetCurrentProcess();	memset(m_buffer, 0, m_bufferSize);	ReadProcessMemory(t6sp, (LPCVOID)from, m_buffer, size, NULL);	return m_buffer;}ReadPointer(DWORD base, DWORD* offsets, int count){	HANDLE t6sp = GetCurrentProcess();	for (int i = 0; i < count - 1; i++)	{				base = ReadProcessMemory(t6sp, &(LPCVOID)base + offsets[i], m_buffer, 4, NULL);	}	return base + offsets[count - 1];}

а вызов:

	if (GetAsyncKeyState(VK_F4)){						HANDLE t6sp = GetCurrentProcess(); // gets the process, the dll is injected in...			DWORD offsets[] = { 0x7AA7C8 ,0x50,0x764,0xe8,0x42c,0x114};			DWORD address = ReadPointer(0x6d40000, offsets, 6);			float value1 = 0.1;			WriteProcessMemory(t6sp, (LPVOID)address, &value1, sizeof(DWORD), 0);								}
Ссылка на комментарий
Поделиться на другие сайты

[terminus]Привет! Я делал подобную штуку на C#, посмотреть можно [тут].[/terminus]

Keng, вы, не поверите, но я с самого начала попробовал как у вас на видео, но у меня ничего не вышло! Кажется во всем виноват, мой базовый адрес.

Можете написать тут, метод чтение указателей и получение базового адреса? Буду очень благодарен.

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

[terminus]Раз у тебя не вышло - нужно было разбираться, почему не вышло, ведь у меня все получилось. Скорее всего, ты просто где-то сделал ошибку. С указателями главное - быть внимательным.[/terminus]

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

[terminus]Раз у тебя не вышло - нужно было разбираться, почему не вышло, ведь у меня все получилось. Скорее всего, ты просто где-то сделал ошибку. С указателями главное - быть внимательным.[/terminus]

Я уже второй день не могу разобраться! :(

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

[terminus]Значит показывай полную цепочку указателей и затем пошагово описывай свои действия и код. Где-то явно ошибся - вот и найдем, где.[/terminus]

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

int ReadPointer(int baseAddres, byte offsets[], DWORD processID, int sm){    MessageBox(NULL, "3", "dasdas", MB_OK);    int value = 0;    byte buffer[4];    HANDLE phandle = OpenProcess(PROCESS_VM_READ, 0, processID);    MessageBox(NULL, "4", "dasdas", MB_OK);    ReadProcessMemory(phandle, (void*)baseAddres, buffer, 4, 0);    MessageBox(NULL, "5", "dasdas", MB_OK);    for (int i = 0; i < sm; i++){        MessageBox(NULL, "6", "dasdas", MB_OK);        baseAddres = toINT32(buffer,0);        MessageBox(NULL, "7", "dasdas", MB_OK);        baseAddres += offsets[i];        MessageBox(NULL, "8", "dasdas", MB_OK);        ReadProcessMemory(phandle, (void*)baseAddres, buffer, 4, 0);        MessageBox(NULL, "9", "dasdas", MB_OK);            }    int result = toINT32(buffer, 0);    MessageBox(NULL, "10", "7", MB_OK);    CloseHandle(phandle);    MessageBox(NULL, "11", "7", MB_OK);    return toINT32(buffer, 0);    MessageBox(NULL, "12", "7", MB_OK);}

Вот вызов метода:

MessageBox(NULL, "1", "dasdas", MB_OK);			byte offsets[] = { 0x007AA7C8, 0x50, 0x764, 0xe8, 0x42c, 0x114 };			MessageBox(NULL, "2", "dasdas", MB_OK);			int address = ReadPointer(0x065F0000, offsets, 4816, 5);			MessageBox(NULL, "3", "dasdas", MB_OK);

Ошибка на MessageBox 6, то есть при конвертировании в int32. 

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

[terminus]Интересный способ отладки кода. Я так понимаю, метод toINT32 - ручной выделки. Покажи-ка его, а заодно - сообщение об ошибке, возникающее при его вызове и содержимое buffer в этот момент.

PS: Чем тебе не угодил [метод] класса BitConverter?[/terminus]

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

[terminus]Интересный способ отладки кода. Я так понимаю, метод toINT32 - ручной выделки. Покажи-ка его, а заодно - сообщение об ошибке, возникающее при его вызове и содержимое buffer в этот момент.

PS: Чем тебе не угодил [метод] класса BitConverter?[/terminus]

А как по другому откладывать DLL?

Метод:

int toINT32(){	int v = 0;	memcpy(&v, m_buffer, sizeof(int));	return v;}

Попробую с вашим методом и отпишусь позже!

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

OpenProcess ReadProcessMemory тд тп в инжекторной длке? *FACEPALM*

примерно так:

DWORD_PTR Base = (DWORD_PTR)GetModuleHandle(0);DWORD_PTR Address1 = Base + 0x100500;Address1 = *(DWORD_PTR*)(Address1 + 0x4);Address1 = *(DWORD_PTR*)(Address1 + 0x40);Address1 = *(DWORD_PTR*)(Address1 + 0x8);

NullAlex: Для кода есть специальный тег. Читай FAQ.

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

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

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

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