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

SweetAss1337

Пользователи
  • Постов

    20
  • Зарегистрирован

  • Посещение

  • Победитель дней

    1

Весь контент SweetAss1337

  1. Все верно, в матрице хранятся параметры искажений, но помимо этого надо понимать откуда ты наблюдаешь. Если ты смотришь на объект и крутишь головой - матрица меняется, если не крутишь, а просто идешь вперед - она не меняется. Это верно или нет? Матрица не привязана к внутриигровому пространству, представь что пил балтику девятку и залил мышь, она сломалась и ты играешь без нее - бегаешь по карте - положение объектов на экране все равно будет меняться. Ты даже сможешь найти такое положение,когда они все будут на экране. Как этого добиться без относительных координат? Камера не знает где ОТНОСИТЕЛЬНО нее находятся объекты. По крайней мере в одном из видео уроков я точно видел примитивный способ поиска матрицы серез СЕ, там в том и суть что камера не двигается - значения не меняются, их отсеивают. Все просто: Двигаешь мышь-матрица меняется, не двигаешь - не меняется. Но координаты на экране то меняются, [CENSORED] Ладно в общем, буду пробовать разные варианты
  2. Еще раз, ты видимо не понимаешь сути проблемы: Камера НЕ двигается, двигаются только ее координаты в общей системе координат. Объект НЕ двигается. Как перемножение статичных координат на статичную матрицу может дать изменяющееся значение двухмерных координат? Координаты МЕНЯЮТСЯ если я изменяю матрицу движением камеры, но НЕ меняются если камера движется вперед. Дело вот в чем: матрица,которая у меня есть, не содержит в себе никакой информации о своем положении по XYZ, и я не знаю нормально это или нет. Я могу просто добавить в нее эту информацию самостоятельно,если это надо, но такого нигде не видел. Возможно игра самостоятельно это делает где-то дальше по мере преобразований.
  3. Чтобы знать где рисовать ESP, странный вопрос. Если бы я радар делал мне бы матрица не была нужна. Отрисовывать спроецированные трехмерные координаты игроков на двухмерной плоскости камеры
  4. Для трансформации трехмерных координат в двухмерные. Я может немного неправильно говорю некоторые вещи, но суть вопроса то в том, что я не понимаю откуда берутся изменения, если матрица никак не привязано к координатам игрока. Чтобы что-то проецировать надо понимать откуда - куда, а там просто все подряд координаты ВСЕХ игроков. Я понимаю матрицы математически, но не понимаю как при таком раскладе возникает информация об относительном положении объектов. Если двигаться в сторону обездвиженного объекта, не трогая камеру, то его проекция будет перемещаться, и рано или поздно вы пройдете его насквозь, он перестанет отображаться. Откуда этот эффект должен взяться? Единственным изменяющимся параметров в такой системе являются мировые координаты самой камеры, но они никак не упомянуты нигде, везде просто читают игроков по списку
  5. Итоговая матрица для преобразования проекции. Modelview - Projection матрица. Итог то один, матрица не должна меняться при статическом положении камеры, следственно не понятно откуда возьмутся изменения. Нигде не уточнен этот момент, везде говорят просто про координаты.
  6. Не понимаю матрицы проекций. (кто бы их вообще понимал) Дело в том, что конечная матрица одна. Она не изменяется по мере движения камеры(мышь не трогаем), координаты объекта тоже не меняются (стоит на месте). Откуда возьмется изменение двухмерных координат? Выходит, для того чтобы они изменялись, координаты объектов должны быть относительными. То есть надо принять за ноль свою камеру,верно? Или я не правильно это понимаю?
  7. Так регистры не сохраняются ни в какую сторону. Пробовал разные параметры context.ContextFlags = CONTEXT_ALL CONTEXT_FULL. Я даже сделал тестовую консольку, которая раз в 3 сек выдает MessageBoxA. В ее регистре rdx хранится указатель на текст. Обычным хуком его можно поменять. Ставлю хук брейкпоинтом, код перенаправляется в мой коллбек, но регистры там уже не те что в начале оригинальной функции. И даже если я перезапишу их вручную, будь то просто ассемблером или через установку контекста, после возвращения назад в оригинальную функцию они не сохраняются. Да и прочитать таким образом регистры я могу только в момент когда я поймал текущий поток и провел все манипуляции, что само по себе довольной объемный код, которые эти же регистры трогает и перезаписывает. Я хочу поймать значение регистра как если бы перед началом функции я совершил обычный прыжок: 0x00000: mov rdx,FFFFFFFF 0x00001: jmp 0x00004 0x00002: 0x00003: jmp 0x00000 0x00004: начало оригинальной функции Вместо этого я прыгаю на изолированный кусок кода, внутри которого можно писать почти что угодно, но это не сохранится. Регистры в коллбеке: его код: CONTEXT context; //HANDLE Current = GetCurrentThread(); memset(&context, 0, sizeof(CONTEXT)); context.ContextFlags = CONTEXT_ALL; HANDLE hThread = OpenThread(THREAD_GET_CONTEXT | THREAD_SET_CONTEXT |THREAD_SUSPEND_RESUME | THREAD_QUERY_INFORMATION, FALSE, GetCurrentThreadId()); //SuspendThread(hThread); GetThreadContext(hThread, &context); printf("rdx: %p\n", context.Rdx); printf("rsi: %p\n", context.Rsi); printf("rcx: %p\n", context.Rcx); SetThreadContext(hThread, &context); Регистры в оригинальной функции в это время:
  8. После установки хардверного бряка и вызывается исключение, я ловлю его и отправляю на свой код. Но я не могу получить доступ к регистрам, а следственно не могу получить параметры функции. Не удается туда ничего записать, мой код как будто изолирован от кода функции. Я не очень понимаю что означает размер брейкпоинта, написано что он может быть 1,2,4,8 байт. Это тот размер,внутри которого выполнятся инструкции,попавшие в него? Или это что-то другое? При этом если я трогаю регистр стека то он сохраняется, в отличие от остальных. То есть есть если после прыжка на свой код я напишу mov rdx,00000BB8 ret То не произойдет ничего, даже если в этом регистре лежит указатель на параметр функции, а если я напишу sub esp, FFF ret Произойдет краш. Не могу найти информации по этому поводу нигде
  9. Получилось отрисовать, действительно пришлось создавать свой контекст. Оказывается в imgui есть возможность рисовать без использования сторонних библиотек, только средствами чистого opengl, но возникает проблема с обработкой событий. Я нашел Пример (ссылка почему-то открывается только через vpn) с использованием хука SDL для перехвата событий, но в моей целевой игре не используется SDL, поэтому я просто использовал глобальный хук мыши и клавиатуры. Если кому надо: так же имеется пример отрисовки на чистом opengl https://github.com/ocornut/imgui/pull/1553/files
  10. Имеется хук функции в графической библиотеке (glSwapBuffers). Таким образом я рисую простое гуи, но управлять им могу только кнопками, без обработки событий. Хочется использовать более сложную библиотеку типа ImGUI и ей подобных. Но на сколько я понял у меня не получится взять контекст игры. То есть opengl не предусматривает такой возможности вообще, а даже если и предусматривает то это так не работает. Могу ли я рисовать такие сложные вещи в чужом окне? Что для этого нужно? Я видел пример использования этой библиотеки в CS GO, но она может рисоваться как через directX так и через openGL на выбор, на сколько я знаю.
  11. Ставлю хук на функцию в целевом процессе. Все нормально работало, после чего последовал фикс. Фикс заключается в том что как только я изменяю функцию (ее размер,судя по всему), это фиксируется. Вопрос в том как обходить такую защиту от хука? Самый просто вариант это просто поставить другой хук на функцию,берущую размер первой, но я не знаю какие методы используются.
  12. Долгое время в одной игре работал мой чит, внедряемый в процесс, с недавнего времени в игре появилась защита от инжекта. Работает она таким образом что при создании удаленного потока игра закрывается. То есть игра мониторит потоки (То ли их количество,то ли просто мониторит функции), в следствие чего ни один из известных методов инжекта не работает. Снимать эту защиту естественно можно только снаружи. Можно ли как-то занопить функции,которые игра использует для мониторинга, или что-то вроде этого? Можно ли как-то хукнуть их снаружи? Я не нашел такой техники,которая бы позволяла ставить хуки, не ссылаясь при этом на адреса в своей Длл. Думаю что в теории это возможно.
  13. Реализовал в своем инжекторе такую фичу, как в CheatEngine. То есть моя длл инжектится моим же инжектором в процесс игры, после чего я вызываю из инжектора функции, объявленные в DllExport у моей библиотеки. Библиотека на c++. Проблема в том, что для того чтобы вызвать функцию в постороннем процессе, мне надо получить адрес этой функции через GetProcAddress, а для этого мне надо подгрузить библиотеку в процесс инжектора, что сильно мешает. Была идея загружать библиотеку, брать адрес функции и выгружать (всем костылям костыль) То есть делаю примерно так: try { IntPtr ExampleLib=LoadLibrary(@"C:/Users/Dmitry/Desktop/Hook/x64/Release/Example.dll"); //Загружаю библиотеку чтобы взять из нее "слепок" памяти,чтобы обратиться к этой же длл в чужом процессе IntPtr lpLLAddress = GetProcAddress(GetModuleHandle("Example.dll"), "Pass"); //Беру адрес из "слепка" IntPtr hndProc = OpenProcess((0x2 | 0x8 | 0x10 | 0x20 | 0x400), 1, Pid); //Открываю CreateRemoteThread(hndProc, (IntPtr)null, INTPTR_ZERO, lpLLAddress, (IntPtr)null, 0, (IntPtr)null); //Удаленный поток чтобы вызвать функцию по взятому адресу CloseHandle(hndProc); // FreeLibraryAndExitThread(ExampleLib,0x1); Если выгружаю библиотеку таким образом то происходит краш с AccessViolation. Но ели выгружаю библиотеку "саму из себя" то все нормально. } Адрес вроде как всегда статический но я не смог разобраться с типами и перевести его в нормальный вид чтобы по нему обратиться
  14. У меня есть x64 процесс, в списке его модулей я вижу opengl32.dll. Использовать х32 библиотеку в х64 процессе невозможно по идее, но почему тогда она так называется?
  15. Я более-менее разобрался. Ddraw.dll используется судя по всему только для всяких win api, то есть для отрисовки самого окна игры и т.д, хоть это и странно. Игра отрисовывается через opengl, но не использует функцию glDrawElements. То есть эта функция вообще никогда не вызывается. Создается ощущение что игра отрисовывает через opengl только так называемый skybox и меню. Мне удалось повлиять на все, я убирал элемены меню, и даже отрисовывал какие-то фигуры на skybox'е. Но моделей игры так и не смог задеть.
  16. У меня есть логгер текстур для OpenGL, в целом принцип его действия такой же как и при d3d, и все работает нормально. Но есть одна игра, которая вроде как отрисовывается через OpenGL, но при этом там нет текстур, игра использует воксели. Мало того, в модулях игры помимо opengl32.dll есть еще и ddraw.dll, то есть DirectDraw, который вообще по идее имеет отношение к директ иксу, но какое я так и не понял. И если я хукаю функцию glClear, то игра перестает отрисовывать все,кроме некоторых элементов, а значит явно использует OpenGL. Помогите разобраться, как игра отрисовывает воксели.
  17. Кто-нибудь работал с античитом? Видно что он защищает процесс игры от чтения и записи памяти, что еще он делает? Можно ли это обойти если действовать на уровне драйвера? Может быть тут есть кто-нибудь кто вкурсе как это работает.
  18. Но какое это имеет значение в конкретно этом случае? Видовая матрица она всегда должна быть одинаковой, ей математика не позволяет состоять менее чем из 16 значений. Тут вариантов не много: Либо это только кусок матрицы а остальное надо искать, либо она действительно такая. Просто я представить себе не могу как нужно будет менять world_to_screen или get_viev_matrix
  19. Пишу есп, все координаты находятся, цифорки рисуются и мерзко мигают на окне, но рисуются они не там где надо , а прямо у меня под ногами. Как я понимаю проблема в видовой матрице, которую я по нормальному так и не нашел. Как я понял она должна состоять из 16 значений, но у меня сколько бы я ее не искал, находятся только 14 этих значений. Может ли она быть такой? Может это особенность движка или еще че-то. Как тогда надо переделывать функцию world_to_screen?
×
×
  • Создать...

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

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