Всем привет! В этой короткой статье мы затронем тему разработки DMA читов на примере игры RUST. Пройдемся по базовому функционалу, без фанатизма. Для разработки мы будем использовать библиотеку MemProcFS. Предположим, что вы уже подключили библиотеку (Если вы не справились даже с этим, то я не знаю что вам поможет)... Для начала, нам нужно инициализировать её. Spoiler В main.cpp vector<LPSTR> arguments = { (LPSTR)"", (LPSTR)"-device", (LPSTR)"fpga" }; VMM_HANDLE vmm_handle = 0; DWORD game_pid = 0; vmm_handle = VMMDLL_Initialize(3, arguments.data()); //инициализируем библиотку с нашими аргументами VMMDLL_PidGetFromName(vmm_handle, (LPSTR)"RustClient.exe", &game_pid); //получаем ProcessID нашей игры. C В main.cpp vector<LPSTR> arguments = { (LPSTR)"", (LPSTR)"-device", (LPSTR)"fpga" }; VMM_HANDLE vmm_handle = 0; DWORD game_pid = 0; vmm_handle = VMMDLL_Initialize(3, arguments.data()); //инициализируем библиотку с нашими аргументами VMMDLL_PidGetFromName(vmm_handle, (LPSTR)"RustClient.exe", &game_pid); //получаем ProcessID нашей игры. Отлично, первая часть позади, далее, нам нужно получить адресс модуля, в нашем случае это GameAssembly.dll. Тут всё ещё проще: uint64_t address = VMMDLL_ProcessGetModuleBaseU(vmm_handle, game_pid, (LPSTR)"GameAssembly.dll"); C uint64_t address = VMMDLL_ProcessGetModuleBaseU(vmm_handle, game_pid, (LPSTR)"GameAssembly.dll"); Мы получили базовый модуль, теперь можно навести суету Последнее, что мы сделаем в первой части, это получим LocalPlayer'a. Spoiler unit64_t LocalPlayer; VMMDLL_MemRead(vmm_handle, game_pid, game_assembly + 53923288, PBYTE(&LocalPlayer), sizeof(unit64_t)); //53923288 == LocalPlayer_c* unit64_t EntitySF; VMMDLL_MemRead(vmm_handle, game_pid, LocalPlayer + 0xB8, PBYTE(&EntitySF), sizeof(unit64_t)); unit64_t Entity; VMMDLL_MemRead(vmm_handle, game_pid, LocalPlayer + 0x0, PBYTE(&Entity), sizeof(unit64_t)); C unit64_t LocalPlayer; VMMDLL_MemRead(vmm_handle, game_pid, game_assembly + 53923288, PBYTE(&LocalPlayer), sizeof(unit64_t)); //53923288 == LocalPlayer_c* unit64_t EntitySF; VMMDLL_MemRead(vmm_handle, game_pid, LocalPlayer + 0xB8, PBYTE(&EntitySF), sizeof(unit64_t)); unit64_t Entity; VMMDLL_MemRead(vmm_handle, game_pid, LocalPlayer + 0x0, PBYTE(&Entity), sizeof(unit64_t)); Готово, перерь вы самый крутой читер и у вас есть функция получения LocalPlayer'a и Entity. В следующей статье мы реализуем FakeAdmin. Что на счет детекта? Данная шляпа уже как несколько лет Undetected, не то что ваши несчастные HyperHub'ы которые используют Internal методы и отлетают раз в пол месяца. Какие сложности будут у вас с реализацией этого? Не давно (в июле или июне не помни точно), в EAC ввели чудесную штуку как CR3, обходится она не то что бы тяжело, но подумать вам придется. Возможно, если будет актив, то я напишу и про это статью.
Гайд хоть и максимально простой и не требующих особых знаний но всё же это можно считать почти что единственный гайд по читам на дма.
Можно поспорить здесь. Те же VGK и FaceIT проверяют сторонние девайсы через IOMMU. Вторые, кстати, немножечко криво это делают. Зависит от прошивки по большей части, конечно же. Из ещё одного интересного вектора атак, скажем так - SMM.
Replacer, в этом посте я говорил конкретно про раст, если говорить про фейсит, у него это плохо получается, даже прошивка в гитхаба будет андетектед, а на счет первого мне нечего сказать, не работал с ним
ПереигралВсех, По рассказам своих знакомых - растовский EAC тоже проверяет IOMMU с какого-то времени, но сам я не убеждался, так как мною не ковырялся EAC. Это я указал и у себя же выше. Забавно, что они первые начали это делать и сделали хуже всего.
У DMA есть ряд проблем. Он очень не дружелюбен с пользователем, не сразу все заведется из под коробки. Библиотеки VMM, LeechCore тяжелы в использовании и отсутствует полная документация. Карта фризить может, наблюдаться задержки + они неоправданно дорогие. Faceit недавно начал это детектить плюсом. За гайд спасибо но хотелось бы побольше информации
Очень скучно, мало инфы, мало экшона. Единственное полезное в этой статье - это ссылка на гитхаб Все остальное, просто навалил псевдокода или спастил с чужой статьи и все. А зачем, нахуя, почему, ноль инфы
AIexa, Ну так напиши свою статью, где на 1 функцию ты создашь 100 графиков которые будут показывать как и по какому принципу она работает, добавь ещё кучу мусора на который всем будет похуй а статья будет просто похожа на арабский мем. Инфы тут достаточно чтобы понять принцип работы базовых функций и имея определенные навыки геймхакинга создать свой первый чит.