ITkhazeplov07 Опубликовано 12 сентября, 2015 Поделиться Опубликовано 12 сентября, 2015 (изменено) Всем, доброго времени суток! Каким способом можно реализовать чтение указателей? Пробовал почти все способы которые нашел в интернете, но все равно крашит игру, и даже d3d тест. А если не крашит, то не читает. Вот мои указатели на байт: webplayer_win.dll+007AA7C8 ,50 ,764 ,e8 ,42c ,114 Игра на unity3d Изменено 12 сентября, 2015 пользователем NullAlex Красный цвет только для администрации. Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 12 сентября, 2015 Поделиться Опубликовано 12 сентября, 2015 А если игра на Unity3D то почему ты пытаешься выйти на указатель не через главный модуль игры, а через какую-то левую библиотеку?И да, выложи свой код на С++, как ты пытался прочитать указатели, нам нужно видеть как ты пытался, или ты вообще спрашиваешь, как в принципе это можно сделать? Ссылка на комментарий Поделиться на другие сайты Поделиться
2zolo2 Опубликовано 13 сентября, 2015 Поделиться Опубликовано 13 сентября, 2015 Coder, обычно, эта dll, используется в браузерах для воспроизведения игр на Unity3D. ITkhazeplov07, попробуй, найти другой указатель. И да, выложи свой код на С++, как ты пытался прочитать указатели, нам нужно видеть как ты пытался, или ты вообще спрашиваешь, как в принципе это можно сделать?И поддерживаю Coder, выложи наработки. Ссылка на комментарий Поделиться на другие сайты Поделиться
ITkhazeplov07 Опубликовано 13 сентября, 2015 Автор Поделиться Опубликовано 13 сентября, 2015 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); } Ссылка на комментарий Поделиться на другие сайты Поделиться
ITkhazeplov07 Опубликовано 13 сентября, 2015 Автор Поделиться Опубликовано 13 сентября, 2015 Вместо 0x6d40000 webplayer_win.dll. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 13 сентября, 2015 Поделиться Опубликовано 13 сентября, 2015 [terminus]Привет! Я делал подобную штуку на C#, посмотреть можно [тут].[/terminus] Ссылка на комментарий Поделиться на другие сайты Поделиться
ITkhazeplov07 Опубликовано 13 сентября, 2015 Автор Поделиться Опубликовано 13 сентября, 2015 [terminus]Привет! Я делал подобную штуку на C#, посмотреть можно [тут].[/terminus]Keng, вы, не поверите, но я с самого начала попробовал как у вас на видео, но у меня ничего не вышло! Кажется во всем виноват, мой базовый адрес.Можете написать тут, метод чтение указателей и получение базового адреса? Буду очень благодарен. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 13 сентября, 2015 Поделиться Опубликовано 13 сентября, 2015 [terminus]Раз у тебя не вышло - нужно было разбираться, почему не вышло, ведь у меня все получилось. Скорее всего, ты просто где-то сделал ошибку. С указателями главное - быть внимательным.[/terminus] Ссылка на комментарий Поделиться на другие сайты Поделиться
ITkhazeplov07 Опубликовано 13 сентября, 2015 Автор Поделиться Опубликовано 13 сентября, 2015 [terminus]Раз у тебя не вышло - нужно было разбираться, почему не вышло, ведь у меня все получилось. Скорее всего, ты просто где-то сделал ошибку. С указателями главное - быть внимательным.[/terminus]Я уже второй день не могу разобраться! Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 14 сентября, 2015 Поделиться Опубликовано 14 сентября, 2015 [terminus]Значит показывай полную цепочку указателей и затем пошагово описывай свои действия и код. Где-то явно ошибся - вот и найдем, где.[/terminus] Ссылка на комментарий Поделиться на другие сайты Поделиться
ITkhazeplov07 Опубликовано 14 сентября, 2015 Автор Поделиться Опубликовано 14 сентября, 2015 (изменено) 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. Изменено 14 сентября, 2015 пользователем ITkhazeplov07 Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 14 сентября, 2015 Поделиться Опубликовано 14 сентября, 2015 [terminus]Интересный способ отладки кода. Я так понимаю, метод toINT32 - ручной выделки. Покажи-ка его, а заодно - сообщение об ошибке, возникающее при его вызове и содержимое buffer в этот момент. PS: Чем тебе не угодил [метод] класса BitConverter?[/terminus] Ссылка на комментарий Поделиться на другие сайты Поделиться
ITkhazeplov07 Опубликовано 14 сентября, 2015 Автор Поделиться Опубликовано 14 сентября, 2015 (изменено) [terminus]Интересный способ отладки кода. Я так понимаю, метод toINT32 - ручной выделки. Покажи-ка его, а заодно - сообщение об ошибке, возникающее при его вызове и содержимое buffer в этот момент.PS: Чем тебе не угодил [метод] класса BitConverter?[/terminus]А как по другому откладывать DLL?Метод:int toINT32(){ int v = 0; memcpy(&v, m_buffer, sizeof(int)); return v;}Попробую с вашим методом и отпишусь позже! Изменено 14 сентября, 2015 пользователем ITkhazeplov07 Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 18 сентября, 2015 Поделиться Опубликовано 18 сентября, 2015 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. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения