IzerodayI Опубликовано 16 июля, 2017 Поделиться Опубликовано 16 июля, 2017 Примерная реализация DirectX в dll такая : Показать контент void DrawIndicator(void* self) { IDirect3DDevice9* dev = (IDirect3DDevice9*)self; dev->BeginScene(); GiveMeLineStandart(dev); D3DXMATRIX v_m; dev->GetTransform(D3DTS_VIEW, &v_m); D3DVIEWPORT9 viewport; dev->GetViewport(&viewport); FindClientModule(); float coordX, coordY, coordZ; float pOut[3]; if (indicator) { for (int i = 1; i < 15; i++)//Да с 1, знаю кто я...(на то есть причина) { coordX = *reinterpret_cast<float*>(client_dll + player_onl_coordX*i); coordY = *reinterpret_cast<float*>(client_dll + player_onl_coordY*i); coordZ = *reinterpret_cast<float*>(client_dll + player_onl_coordZ*i); if ((coordX == 0) || (coordY == 0)) { continue; } World_To_Screen(coordX, coordY, coordZ, &v_m, viewport, pOut); m_font1->DrawTextA(0, "just do it", -1, &fontRect1, 0, D3DCOLOR_ARGB(255, 255, 255, 0)); treangle[0] = D3DXVECTOR2(pOut[0], pOut[1]); treangle[1] = D3DXVECTOR2(pOut[0], pOut[1] + 50); line->Begin(); line->Draw(treangle, 2, cool); line->End(); } else { } функция GiveMeLineStandart : Показать контент void GiveMeLineStandart(IDirect3DDevice9* device) { D3DXCreateLine(device, &line); line->SetWidth(4.0f); line->SetPattern(0xffffffff); line->SetAntialias(FALSE); } функция FindClientModule : Показать контент void FindClientModule() { MODULEINFO moduleinfo = { 0 }; HMODULE hModule = GetModuleHandle("client.dll"); GetModuleInformation(GetCurrentProcess(), hModule, &moduleinfo, sizeof(MODULEINFO)); client_dll = (DWORD)moduleinfo.lpBaseOfDll; } функция World_To_Screen : Показать контент int World_To_Screen(float coordX, float coordY, float coordZ, D3DXMATRIX* vm, D3DVIEWPORT9 viewport, float* pOut) { float w = 0.0f; pOut[0] = vm[0][0] * coordX + vm[0][1] * coordY + vm[0][2] * coordZ + vm[0][3]; pOut[1] = vm[1][0] * coordX + vm[1][1] * coordY + vm[1][2] * coordZ + vm[1][3]; w = vm[3][0] * coordX + vm[3][1] * coordY + vm[3][2] * coordZ + vm[3][3]; if (w < 0.01f) { return 0; } float intw = 1.0f / w; pOut[0] *= intw; pOut[1] *= intw; int weight = (int)(viewport.Width);//(rect.right - rect.left); int height = (int)(viewport.Height);//(rect.bottom - rect.top); float x = weight / 2; float y = height / 2; x += 0.5*pOut[0] + weight + 0.5; y -= 0.5*pOut[1] + height + 0.5; pOut[0] = x;//+ rect.left pOut[1] = y;//+ rect.top return 1; } и глобальные переменные : DWORD client_dll; D3DXVECTOR2 treangle[2];//для рисования D3DCOLOR cool = D3DCOLOR_ARGB(255, 255, 0, 0); ID3DXLine *line; const DWORD player_onl_coordX = 0x1a0; const DWORD player_onl_coordY = 0x1a4; const DWORD player_onl_coordZ = 0x1a8; кто знает , примерно, почему ничего не рисует на экране ? я предполагаю , что не так нашел видовую матрицу или vievport, ещё возможно ошибка в функции World_To_Screen: D3DXMATRIX v_m; dev->GetTransform(D3DTS_VIEW, &v_m);//view_matrix - видовая матрица D3DVIEWPORT9 viewport; dev->GetViewport(&viewport);//для размеров окна игры // еще возможно client_dll не так нашел (где-нибудь ошибка) MODULEINFO moduleinfo = { 0 }; HMODULE hModule = GetModuleHandle("client.dll"); GetModuleInformation(GetCurrentProcess(), hModule, &moduleinfo, sizeof(MODULEINFO)); client_dll = (DWORD)moduleinfo.lpBaseOfDll; dll находится в процессе игры(inject through СЕ)! Благодарю за ответы // Заголовок поправил, на первый раз без предупреждений. Garik66 1. Нарушения правила оформления заголовка тем. Общие правила форума Пункт 1.3 Ссылка на комментарий Поделиться на другие сайты Поделиться
uhx Опубликовано 16 июля, 2017 Поделиться Опубликовано 16 июля, 2017 В 16.07.2017 в 15:20, IzerodayI сказал: dev->GetTransform(D3DTS_VIEW, &v_m); Показать По моему это так не работает. Лучше сам найди матрицу. Ссылка на комментарий Поделиться на другие сайты Поделиться
IzerodayI Опубликовано 16 июля, 2017 Автор Поделиться Опубликовано 16 июля, 2017 В 16.07.2017 в 16:00, uhx сказал: По моему это так не работает. Лучше сам найди матрицу. Показать Если я начал , то попробую уже через DirectX доделать, самому интересно как сделать правильно через DirectX Ссылка на комментарий Поделиться на другие сайты Поделиться
uhx Опубликовано 16 июля, 2017 Поделиться Опубликовано 16 июля, 2017 (изменено) В 16.07.2017 в 16:03, IzerodayI сказал: Если я начал , то попробую уже через DirectX доделать, самому интересно как сделать правильно через DirectX Показать Флаг тебе в руки. Но ты хотя бы пробовал посмотреть, что тебе выдает GetTransform на выходе? Я не знаю почему так, не знаток DX и все такое, но через GetTransform ты не достанешь видовую матрицу. Ты думаешь всем по приколу мучаться и искать оффсет на нее? Типа все так делают, потому что оффсеты - это круто?) Через DX можно разве что при помощи GetVertexShaderConstantF достать ее, но там тоже придется танцы с бубном устраивать, поэтому какого-то уникального решения нет, потому что в каждой игре по своему хранится эта видовая матрица, и приходится постоянно ее выискивать. Тут пару дней назад до тебя тоже человечек один писал по этому поводу, тык. Дело в том, что GetTransform возвращает единичные матрицы, а при помощи них ты никаких преобразований не получишь) Сам только что проверил в CS:GO. Слева GetTransform, справа - через оффсет. Изменено 16 июля, 2017 пользователем uhx Ссылка на комментарий Поделиться на другие сайты Поделиться
IzerodayI Опубликовано 16 июля, 2017 Автор Поделиться Опубликовано 16 июля, 2017 В 16.07.2017 в 16:06, uhx сказал: какого-то уникального решения нет, Показать А я думал , что этот способ универсален... Что-то типа правил или этикета всех программистов пишущих игры делать матрицу в одном месте для удобства(другим людям) Ссылка на комментарий Поделиться на другие сайты Поделиться
IzerodayI Опубликовано 16 июля, 2017 Автор Поделиться Опубликовано 16 июля, 2017 В 16.07.2017 в 16:06, uhx сказал: через оффсет Показать не подскажешь как получить (оптимально)оффсет матрицы через dll, если через exe Кенг делал так : Показать контент read_bytes((PCVOID)(client_dll_base+v_matrix_offset), 64, &view_matrix); //и int read_bytes(PCVOID addr, int num, void* buf) { SIZE_T sz = 0; int r = ReadProcessMemory(hProcess, addr, buf, num, &sz); if (r == 0 || sz == 0) { printf("RPM error, %08Xn", GetLastError()); return 0; } return 1; } один из параметров это 64 байта , и это разумное решение , но в dll я не могу пользоваться ReadProcessMemory , и как это лучше провернуть. Должна же быть какая-нибудь функция вытаскивающая сразу все оффсеты (через dll)? Просто я координаты тоже криво нахожу: Показать контент const DWORD player_onl_coordX = 0x1a0; const DWORD player_onl_coordY = 0x1a4; const DWORD player_onl_coordZ = 0x1a8; float coordX, coordY, coordZ; coordX = *reinterpret_cast<float*>(client_dll + player_onl_coordX*i); coordY = *reinterpret_cast<float*>(client_dll + player_onl_coordY*i); coordZ = *reinterpret_cast<float*>(client_dll + player_onl_coordZ*i); Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 16 июля, 2017 Поделиться Опубликовано 16 июля, 2017 (изменено) В 16.07.2017 в 17:41, IzerodayI сказал: но в dll я не могу пользоваться ReadProcessMemory Показать Структура из 16 значений Изменено 16 июля, 2017 пользователем partoftheworlD Ссылка на комментарий Поделиться на другие сайты Поделиться
IzerodayI Опубликовано 16 июля, 2017 Автор Поделиться Опубликовано 16 июля, 2017 В 16.07.2017 в 16:06, uhx сказал: что тебе выдает GetTransform на выходе? Показать как ты её отобразил через DirectX? мне интересно все проверить самому(насчет других параметров). Ссылка на комментарий Поделиться на другие сайты Поделиться
elvis66666 Опубликовано 16 июля, 2017 Поделиться Опубликовано 16 июля, 2017 В 16.07.2017 в 17:44, partoftheworlD сказал: Структура из 16 или 64 значений. Показать из 16 значений по 4 байта каждое. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 16 июля, 2017 Поделиться Опубликовано 16 июля, 2017 В 16.07.2017 в 19:05, elvis66666 сказал: из 16 значений по 4 байта каждое. Показать А ну да, не понятно почему я по байту посчитал Ссылка на комментарий Поделиться на другие сайты Поделиться
Wanderer Опубликовано 17 июля, 2017 Поделиться Опубликовано 17 июля, 2017 (изменено) Я тоже долго мучался с поиском матрицы через D3D, но uhx подсказал, что лучше ручками найти. Так и сделал, теперь всё нормально рисуется. Спасибо ему Так что лучше не трать время на это, и найди сам матрицу. Изменено 17 июля, 2017 пользователем Wanderer Ссылка на комментарий Поделиться на другие сайты Поделиться
uhx Опубликовано 17 июля, 2017 Поделиться Опубликовано 17 июля, 2017 В 16.07.2017 в 17:41, IzerodayI сказал: но в dll я не могу пользоваться ReadProcessMemory Показать А зачем тебе ReadProcessMemory, если ты уже в процессе игры? В 16.07.2017 в 17:45, IzerodayI сказал: как ты её отобразил через DirectX? Показать Взял и нарисовал все значения на экране. ID3DXFont->DrawTextA В 16.07.2017 в 17:30, IzerodayI сказал: типа правил или этикета всех программистов пишущих игры делать матрицу в одном месте для удобства(другим людям) Показать Нет, такого нет. У разработчиков и так все исходники перед лицом, они легко могут эту матрицу использовать, какая им разница в каком месте она лежит. Вообще, тебе следовало бы взяться сначала за что-то одно: либо асм (реверс), либо цпп. Судя по твоим вопросам ты ни там ни там не разбираешься, а учить тебя всем особенностям C++ вряд ли кто то захочет - информации и без того полно. Ссылка на комментарий Поделиться на другие сайты Поделиться
IzerodayI Опубликовано 17 июля, 2017 Автор Поделиться Опубликовано 17 июля, 2017 В 17.07.2017 в 09:45, uhx сказал: Взял и нарисовал все значения на экране Показать как ты туда массив значений поместил ? там же второе значение у функции LPCTSTR В 17.07.2017 в 09:45, uhx сказал: либо асм (реверс), либо цпп. Показать можно по подробней? PS я примерно нашел видовую матрицу , но там только 15 значений изменяющихся от -0.99 до 0.99 (в ксс в34 максимум 89 градусов наклон) почему 15 , потому что одно из них Double screen: [img= https://cloud.mail.ru/public/GNMC/3jz33yKb5] это и есть видовая матрица или я нашел не то? Ссылка на комментарий Поделиться на другие сайты Поделиться
uhx Опубликовано 17 июля, 2017 Поделиться Опубликовано 17 июля, 2017 (изменено) Вот как она примерно выглядит: Она должна при прямых углах отображать твои координаты камеры, поэтому X и Y позиции должны быть видны в ней. Как у меня: -113 в матрице и 113 в позиции. 159.38 в матрице и -159.38 ну и тд... + у нее статический адрес, но она слетает обычно после апдейтов. Практически всегда. То, что у тебя - это похоже не то. Я сейчас буквально за 15 минут нашел матрицу + сигнатуру под нее, а то надоело что после апдейтов слетает. Могу какой-то гайдец запилить, хотя об этом уже столько сказано было... шо капец Изменено 17 июля, 2017 пользователем uhx Ссылка на комментарий Поделиться на другие сайты Поделиться
IzerodayI Опубликовано 17 июля, 2017 Автор Поделиться Опубликовано 17 июля, 2017 В 17.07.2017 в 12:27, uhx сказал: Могу какой-то гайдец запилить, Показать Я был бы не против =) PS ты её просто отсеивал от -1 до 1 и получил матрицу сразу в таком виде? то есть не так (допустим пример)[img=https://cloud.mail.ru/public/HACe/x1EjsZNnd] в буквенных непонятных значений, а сразу в цифрах? Ссылка на комментарий Поделиться на другие сайты Поделиться
uhx Опубликовано 17 июля, 2017 Поделиться Опубликовано 17 июля, 2017 В 17.07.2017 в 12:57, IzerodayI сказал: то есть не так (допустим пример) Показать Хоспадее, да переключи ты режим отображения на Float. ПКМ -> Display Type -> Float. Ну или просто Ctrl + 9 В 17.07.2017 в 12:57, IzerodayI сказал: ты её просто отсеивал от -1 до 1 и получил матрицу сразу в таком виде Показать Да, просто экраном вверх-вниз. Я искал значение между 0.9 и 1.1. Потом поднимал экран вверх и искал между -1.1 и -0.9, потому что там угол ~89 максимальный, проще промежуток искать, все равно левак отпадет на 2-3 скане. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
IzerodayI Опубликовано 17 июля, 2017 Автор Поделиться Опубликовано 17 июля, 2017 В 17.07.2017 в 13:02, uhx сказал: Да, просто экраном вверх-вниз. Я искал значение между 0.9 и 1.1. Потом поднимал экран вверх и искал между -1.1 и -0.9, потому что там угол ~89 максимальный, проще промежуток искать, все равно левак отпадет на 2-3 скане. Показать это она? , тут 16 уже =) [img= https://cloud.mail.ru/public/3SiE/Yso3dmHte] Ссылка на комментарий Поделиться на другие сайты Поделиться
uhx Опубликовано 17 июля, 2017 Поделиться Опубликовано 17 июля, 2017 В 17.07.2017 в 13:29, IzerodayI сказал: это она? , тут 16 уже =) [img= https://cloud.mail.ru/public/3SiE/Yso3dmHte] Показать Просто посмотри какой-нибудь урок по нахождению видовой матрицы. Почему ты по столбцу только считаешь их? Как бы значения идут слева-направо. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 17 июля, 2017 Поделиться Опубликовано 17 июля, 2017 (изменено) setang 89 49 Ищешь 0.75 Отсеиваешь setang 0.0 5.0 Ищешь 0.08 Последний адрес в пространстве engine.dll будет видовой матрицей. Чтобы каждое обновление не искать, делаешь сигнатуру и по ней получаешь адрес матрицы. Изменено 17 июля, 2017 пользователем partoftheworlD 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
uhx Опубликовано 17 июля, 2017 Поделиться Опубликовано 17 июля, 2017 В 17.07.2017 в 13:45, partoftheworlD сказал: пространстве engine.dll Показать Но ведь он в client.dll Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 17 июля, 2017 Поделиться Опубликовано 17 июля, 2017 (изменено) В 17.07.2017 в 13:48, uhx сказал: Но ведь он в client.dll Показать Нет, это в csgo в client.dll, в css, l4d2, portal (на счет portal 2 не уверен) и прочих играх со старым движком в engine.dll Изменено 17 июля, 2017 пользователем partoftheworlD Ссылка на комментарий Поделиться на другие сайты Поделиться
IzerodayI Опубликовано 17 июля, 2017 Автор Поделиться Опубликовано 17 июля, 2017 В 17.07.2017 в 13:49, partoftheworlD сказал: в css, Показать + Ссылка на комментарий Поделиться на другие сайты Поделиться
IzerodayI Опубликовано 17 июля, 2017 Автор Поделиться Опубликовано 17 июля, 2017 (изменено) похоже ? [img= https://cloud.mail.ru/public/JnVD/a8BZyZdDw ] её находил пока , без совета partoftheworlD Изменено 17 июля, 2017 пользователем IzerodayI Ссылка на комментарий Поделиться на другие сайты Поделиться
IzerodayI Опубликовано 17 июля, 2017 Автор Поделиться Опубликовано 17 июля, 2017 В 17.07.2017 в 13:32, uhx сказал: Как бы значения идут слева-направо. Показать похоже ? [img= https://cloud.mail.ru/public/JnVD/a8BZyZdDw ] её находил пока , без совета partoftheworlD Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 17 июля, 2017 Поделиться Опубликовано 17 июля, 2017 (изменено) В 17.07.2017 в 13:51, IzerodayI сказал: похоже ? [img= https://cloud.mail.ru/public/JnVD/a8BZyZdDw ] Показать скорее всего она и есть, но смысла спрашивать "похоже" нет, когда будешь использовать узнаешь то нашел или нет. если сделал так, как я написал выше, то значит нашел именно её. и статейкаhttp://www.codinglabs.net/article_world_view_projection_matrix.aspx Изменено 17 июля, 2017 пользователем partoftheworlD 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения