Antonshka Опубликовано 12 августа, 2021 Поделиться Опубликовано 12 августа, 2021 Привет всем, Вчера смотрел видео на канале Gamehacklab. Про написание трейнера на С++. (Замечательное видео, за исключением того что Автор зачем то в последствии уменьшил шрифт. Тяжело стало смотреть, у меня же зрение не очень. Но ничего, досмотрел. Вообще, не понимаю авторов подобных роликов, ну неужели не понимают они что тяжело людям смотреть. Выставят мизерный шрифт и давай записывать.) В видео, @Xipho выделил память и записал уже готовые байты новой и старой инструкции. Это понятно. Но в видео ничего не говорится к сожалению про метод "internal" чит. Так как тема на "external". Подскажите, какова общая схема создания и использования трейнера/приложения, который работает по средствам написанной dll. Как перенаправить потоки от оригинальных инструкций в соответствующие им функции в dll. Как получить данные из регистров и использовать их опять же в функциях dll. Есть ли разница в получении данных из регистров в 32 и 64 битных версиях. Хочу иметь общее представление, общую картину, план, как это реализовывается. Можно ли например написать DLL в которой будет основной код для инструкций игры, а также код для создания окна, кнопочек, менюшек, в общем разных контролов, затем написать небольшой EXE, в ресурсах которого будет эта DLL. То есть приложение/трейнер будет состоять всего из EXE файла, внутри которого будет нужная DLL. Затем, при запуске EXE, методом описанным в самой этой EXE, берется из ресурсов DLL, копируется напрямую в память игры, делаются хуки, и готово. Создается наверно отдельный поток на управление окном и контролами. В общем вопросы может быть глупые, но у меня пока просто нет понимания общей картины. Мне бы только понять план, о мелочах я читаю на MSDN. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 12 августа, 2021 Поделиться Опубликовано 12 августа, 2021 В случае internal читов в виде DLL тебе нет необходимости заморачиваться с кейвами и прыжками. Ты размещаешь нужный тебе код в DLL, при инжекте DLL хукаешь нужные функции, и выполняешь свой код. Примерное представление можно получить в цикле видео по Гидре на нашем канале. Я там делаю простенький хук для червяков. По поводу шрифта - очень некомфортно записывать видео с огромным шрифтом. Потому я всегда пишу видео со стандартным для выбранного разрешения экрана шрифтом. И, поскольку я пишу видео в 1920х1080, предполагаю, что и смотреть его будут на таком же разрешении. А если смотреть на таком же разрешении, то шрифт вполне комфортный для большинства зрителей (в том числе и для меня, хотя у меня тоже близорукость, причем довольно большая). Сам терпеть не могу, когда делают видео с буквами на полэкрана, потому так не делаю. Ссылка на комментарий Поделиться на другие сайты Поделиться
KRYPTOPUNK Опубликовано 12 августа, 2021 Поделиться Опубликовано 12 августа, 2021 3 часа назад, Antonshka сказал: В общем вопросы может быть глупые, но у меня пока просто нет понимания общей картины. Мне бы только понять план, о мелочах я читаю на MSDN. Посмотри мои работы, которые я здесь выкладывал. Не бог весть что, не идеал, но как концепт понять можно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 12 августа, 2021 Автор Поделиться Опубликовано 12 августа, 2021 9 часов назад, Xipho сказал: В случае internal читов в виде DLL тебе нет необходимости заморачиваться с кейвами и прыжками. Ты размещаешь нужный тебе код в DLL, при инжекте DLL хукаешь нужные функции, и выполняешь свой код. Примерное представление можно получить в цикле видео по Гидре на нашем канале. Я там делаю простенький хук для червяков. По поводу шрифта - очень некомфортно записывать видео с огромным шрифтом. Потому я всегда пишу видео со стандартным для выбранного разрешения экрана шрифтом. И, поскольку я пишу видео в 1920х1080, предполагаю, что и смотреть его будут на таком же разрешении. А если смотреть на таком же разрешении, то шрифт вполне комфортный для большинства зрителей (в том числе и для меня, хотя у меня тоже близорукость, причем довольно большая). Сам терпеть не могу, когда делают видео с буквами на полэкрана, потому так не делаю. Посмотрю сейчас. Размер шрифта в первом видео, где стрим, для меня самый комфортный. Ни мелкий, ни крупный, самое-то. 7 часов назад, KRYPTOPUNK сказал: Посмотри мои работы, которые я здесь выкладывал. Не бог весть что, не идеал, но как концепт понять можно. Я посмотрел твои трейнеры, - у тебя DLL отдельно от файла EXE. Не пробовал помещать DLL в ресурсы EXE, а затем просто оттуда считывать её байты в память игры? Поделись источниками, в которых есть что-нибудь действительно полезное про DLL и хуки. Для меня самое сложное в изучении программирования, - это найти нормальный источник. Где нет "воды", где не обсасывают одну мысль десять минут, где автор действительно объясняет, а не показывает лишь то что он это знает и умеет. Таких пруд пруди в инете. И ты сидишь и тратишь время, как идиот. Книги, ясное дело, самый лучший вариант. Я и намеревался почитать про DLL. Но сперва хотел понять общую картину. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 12 августа, 2021 Поделиться Опубликовано 12 августа, 2021 57 минут назад, Antonshka сказал: Не пробовал помещать DLL в ресурсы EXE, а затем просто оттуда считывать её байты в память игры? При таком подходе еще придется делать дополнительные телодвижения по запуску DLL, тогда как в самом простейшем случае достаточно из игры вызвать LoadLibrary, подсунув ей путь до своей длл-ки. Я не говорю про методы с обходом разных античитов, потому подчеркиваю - в простейшем случае. Ссылка на комментарий Поделиться на другие сайты Поделиться
KRYPTOPUNK Опубликовано 12 августа, 2021 Поделиться Опубликовано 12 августа, 2021 (изменено) 2 часа назад, Antonshka сказал: Я посмотрел твои трейнеры, - у тебя DLL отдельно от файла EXE. Не пробовал помещать DLL в ресурсы EXE, а затем просто оттуда считывать её байты в память игры? Поделись источниками, в которых есть что-нибудь действительно полезное про DLL и хуки. Для меня самое сложное в изучении программирования, - это найти нормальный источник. Где нет "воды", где не обсасывают одну мысль десять минут, где автор действительно объясняет, а не показывает лишь то что он это знает и умеет. Таких пруд пруди в инете. И ты сидишь и тратишь время, как идиот. Книги, ясное дело, самый лучший вариант. Я и намеревался почитать про DLL. Но сперва хотел понять общую картину. Самый простой способ, как назвали выше, это CreateRemoteThread с LoadLibrary и путем к твоей длл. Я не понимаю смысла в ресурсах экзешника держать DLL. Зачем? Информация про DLL и хуки есть здесь. Если того, что здесь не хватает, гугли сайты. Правда один из хороших закрыли paywall'ом не понятно зачем, но не суть. Информация в основном на английском, но интуитивно понятно. Если конкретно по книгам то Джеффри Рихтер "Windows для профессионалов", начиная с главы 19. Если хочешь античиты обходить, то меньше чем мануал маппинг делать не выйдет. А это самому загружать, производить релокацию, импорты фиксить, вызывать TLS'ы и прочее. Ибо более менее нормальные античиты в основном ставят хуки на довольно глубокие штуки, такие как LdrLoadDll, LdrpLoadDll, даже на RtlInitUnicodeString некоторые ставят. При том, что мы имеем дело не с ring0 античитом. Изменено 12 августа, 2021 пользователем KRYPTOPUNK дополнил по поводу античитов Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 12 августа, 2021 Автор Поделиться Опубликовано 12 августа, 2021 2 часа назад, KRYPTOPUNK сказал: Самый простой способ, как назвали выше, это CreateRemoteThread с LoadLibrary и путем к твоей длл. Я не понимаю смысла в ресурсах экзешника держать DLL. Зачем? Я полагал что загрузка DLL - это простое копирование её байт в память игры. Затем навешивание каким-то образом потоков на нее. Также связывание определенных инструкций игры с определенными функциями в DLL. А в функциях DLL идет каким-то образом получение значений из регистров, с дальнейшим их использованием и применением обратно. Вот мое представление об схеме работы internal чита, при DLL. Моя картина в голове. Говорю же, мне нужно общее представление об ее работе, на пальцах так сказать. Я же понятия не имею, как там все устроено. Ссылка на комментарий Поделиться на другие сайты Поделиться
KRYPTOPUNK Опубликовано 12 августа, 2021 Поделиться Опубликовано 12 августа, 2021 13 минут назад, Antonshka сказал: Я полагал что загрузка DLL - это простое копирование её байт в память игры. Затем навешивание каким-то образом потоков на нее. Также связывание определенных инструкций игры с определенными функциями в DLL. А в функциях DLL идет каким-то образом получение значений из регистров, с дальнейшим их использованием и применением обратно. Вот мое представление об схеме работы internal чита, при DLL. Моя картина в голове. Говорю же, мне нужно общее представление об ее работе, на пальцах так сказать. Я же понятия не имею, как там все устроено. Нет, обычно DLL загружается в память как исполняемая библиотека. DLL инъекция это называется. А дальше ты используешь функции, написанные тобой, в чужом процессе, используя чужое адресное пространство. Посмотри мои исходники на гитхабе и станет понятно, что я имею ввиду. Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 12 августа, 2021 Автор Поделиться Опубликовано 12 августа, 2021 2 часа назад, KRYPTOPUNK сказал: Нет, обычно DLL загружается в память как исполняемая библиотека. DLL инъекция это называется. А дальше ты используешь функции, написанные тобой, в чужом процессе, используя чужое адресное пространство. Посмотри мои исходники на гитхабе и станет понятно, что я имею ввиду. То что мы используем функции нашей DLL и используем их в чужом адресном пространстве, - это понятно. Для того собственно мы их и пишем, чтобы их использовать. Мне не понятно как происходит взаимодействие инструкций игры с функциями в библиотеке. Сам механизм. Вот есть байты DLL в памяти игры, мы их туда загрузили, (по сути просто скопировали, как я понимаю). Есть также байты инструкций игры. И то и это представляют из себя функции. Как же теперь оживить нашу DLL? Что нужно сделать чтобы функции в DLL заработали, и заработали каждая для своей определенной игровой функции/инструкции. Я смотрел у тебя в профиле, видел только трейнеры. С удовольствием и интересом посмотрю. Ссылка на комментарий Поделиться на другие сайты Поделиться
KRYPTOPUNK Опубликовано 12 августа, 2021 Поделиться Опубликовано 12 августа, 2021 https://github.com/KRYPTOPUNK/RiskOfRain2_hack Вот. Смотри. Это исходный код моего трейнера для Risk Of Rain 2. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
JustHack Опубликовано 12 августа, 2021 Поделиться Опубликовано 12 августа, 2021 4 часа назад, Antonshka сказал: Для меня самое сложное в изучении программирования, - это найти нормальный источник. Если для тебе это самое сложное в изучении программирования, возможно, программирование это не для тебя. Как говорится: Цитата Кесарю - кесарево, пекарю - пекарево, а слесарю - слесарево. Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 12 августа, 2021 Поделиться Опубликовано 12 августа, 2021 13 часов назад, Antonshka сказал: Подскажите, какова общая схема создания и использования трейнера/приложения, который работает по средствам написанной dll. 1 в DllMain DLL_PROCESS_ATTACH кодишь инжектор и создание локал потока на Main 2 проверка GetModuleHandleW - модуль игры не найден - инжект и return 0 а если найден - локал поток на Main и return 1 3 инжектор K32EnumProcesses/K32GetModuleBaseNameW/lstrcmpiW/OpenProcess/VirtualAllocEx/GetModuleFileNameW/WriteProcessMemory/CreateRemoteThread/LoadLibraryW 4 кодишь чит в Main 5 можешь переименовать dll в cpl для запуска почти как ехе или rundll32.exe hack.dll,0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 12 августа, 2021 Автор Поделиться Опубликовано 12 августа, 2021 3 часа назад, JustHack сказал: Если для тебе это самое сложное в изучении программирования, возможно, программирование это не для тебя. Как говорится: Возможно. 2 часа назад, gmz сказал: 1 в DllMain DLL_PROCESS_ATTACH кодишь инжектор и создание локал потока на Main 2 проверка GetModuleHandleW - модуль игры не найден - инжект и return 0 а если найден - локал поток на Main и return 1 3 инжектор K32EnumProcesses/K32GetModuleBaseNameW/lstrcmpiW/OpenProcess/VirtualAllocEx/GetModuleFileNameW/WriteProcessMemory/CreateRemoteThread/LoadLibraryW 4 кодишь чит в Main 5 можешь переименовать dll в cpl для запуска почти как ехе или rundll32.exe hack.dll,0 Спасибо. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения