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

C++ трейнер (Exe + DLL) - Общая схема работы


Рекомендуемые сообщения

Привет всем,

Вчера смотрел видео на канале Gamehacklab. Про написание трейнера на С++.

(Замечательное видео, за исключением того что Автор зачем то в последствии уменьшил шрифт. Тяжело стало смотреть, у меня же зрение не очень. Но ничего, досмотрел. Вообще, не понимаю авторов подобных роликов, ну неужели не понимают они что тяжело людям смотреть. Выставят мизерный шрифт и давай записывать.)

 

В видео, @Xipho выделил память и записал уже готовые байты новой и старой инструкции. Это понятно.

Но в видео ничего не говорится к сожалению про метод "internal" чит. Так как тема на "external".

 

Подскажите, какова общая схема создания и использования трейнера/приложения, который работает по средствам написанной dll.

Как перенаправить потоки от оригинальных инструкций в соответствующие им функции в dll. Как получить данные из регистров и использовать их опять же в функциях dll. Есть ли разница в получении данных из регистров в 32 и 64 битных версиях.

 

Хочу иметь общее представление, общую картину, план, как это реализовывается.

 

Можно ли например написать DLL в которой будет основной код для инструкций игры, а также код для создания окна, кнопочек, менюшек, в общем разных контролов, затем написать небольшой EXE, в ресурсах которого будет эта DLL. То есть приложение/трейнер будет состоять всего из EXE файла, внутри которого будет нужная DLL.

Затем, при запуске EXE, методом описанным в самой этой EXE, берется из ресурсов DLL, копируется напрямую в память игры, делаются хуки, и готово. Создается наверно отдельный поток на управление окном и контролами.

 

В общем вопросы может быть глупые, но у меня пока просто нет понимания общей картины. Мне бы только понять план, о мелочах я читаю на MSDN.

 

Ссылка на комментарий
Поделиться на другие сайты

В случае internal читов в виде DLL тебе нет необходимости заморачиваться с кейвами и прыжками. Ты размещаешь нужный тебе код в DLL, при инжекте DLL хукаешь  нужные функции, и выполняешь свой код. Примерное представление можно получить в цикле видео по Гидре на нашем канале. Я там делаю простенький хук для червяков. По поводу шрифта - очень  некомфортно записывать видео с огромным шрифтом. Потому я всегда пишу видео со стандартным для выбранного разрешения экрана шрифтом. И, поскольку я пишу видео в 1920х1080, предполагаю, что и смотреть его будут на таком же разрешении. А если смотреть на таком же разрешении, то шрифт вполне комфортный для большинства зрителей (в том числе и для меня, хотя у меня тоже близорукость, причем довольно большая). Сам терпеть не могу, когда делают видео с буквами на полэкрана, потому так  не делаю.

Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, Antonshka сказал:

 

В общем вопросы может быть глупые, но у меня пока просто нет понимания общей картины. Мне бы только понять план, о мелочах я читаю на MSDN.

 

Посмотри мои работы, которые я здесь выкладывал. Не бог весть что, не идеал, но как концепт понять можно. 

Ссылка на комментарий
Поделиться на другие сайты

9 часов назад, Xipho сказал:

В случае internal читов в виде DLL тебе нет необходимости заморачиваться с кейвами и прыжками. Ты размещаешь нужный тебе код в DLL, при инжекте DLL хукаешь  нужные функции, и выполняешь свой код. Примерное представление можно получить в цикле видео по Гидре на нашем канале. Я там делаю простенький хук для червяков. По поводу шрифта - очень  некомфортно записывать видео с огромным шрифтом. Потому я всегда пишу видео со стандартным для выбранного разрешения экрана шрифтом. И, поскольку я пишу видео в 1920х1080, предполагаю, что и смотреть его будут на таком же разрешении. А если смотреть на таком же разрешении, то шрифт вполне комфортный для большинства зрителей (в том числе и для меня, хотя у меня тоже близорукость, причем довольно большая). Сам терпеть не могу, когда делают видео с буквами на полэкрана, потому так  не делаю.

 

Посмотрю сейчас.

Размер шрифта в первом видео, где стрим, для меня самый комфортный. Ни мелкий, ни крупный, самое-то.

7 часов назад, KRYPTOPUNK сказал:

Посмотри мои работы, которые я здесь выкладывал. Не бог весть что, не идеал, но как концепт понять можно. 

 

Я посмотрел твои трейнеры, - у тебя DLL отдельно от файла EXE.

Не пробовал помещать DLL в ресурсы EXE, а затем просто оттуда считывать её байты в память игры?

Поделись источниками, в которых есть что-нибудь действительно полезное про DLL и хуки.

Для меня самое сложное в изучении программирования, - это найти нормальный источник. Где нет "воды", где не обсасывают одну мысль десять минут, где автор действительно объясняет, а не показывает лишь то что он это знает и умеет. Таких пруд пруди в инете. И ты сидишь и тратишь время, как идиот. Книги, ясное дело, самый лучший вариант.

Я и намеревался почитать про DLL.  Но сперва хотел понять общую картину.

Ссылка на комментарий
Поделиться на другие сайты

57 минут назад, Antonshka сказал:

Не пробовал помещать DLL в ресурсы EXE, а затем просто оттуда считывать её байты в память игры?

При таком подходе еще придется делать дополнительные телодвижения по запуску DLL, тогда как в самом простейшем случае достаточно из игры вызвать LoadLibrary, подсунув ей путь до своей длл-ки. Я не говорю про методы с обходом разных античитов, потому подчеркиваю - в простейшем случае.

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, Antonshka сказал:

 

Я посмотрел твои трейнеры, - у тебя DLL отдельно от файла EXE.

Не пробовал помещать DLL в ресурсы EXE, а затем просто оттуда считывать её байты в память игры?

Поделись источниками, в которых есть что-нибудь действительно полезное про DLL и хуки.

Для меня самое сложное в изучении программирования, - это найти нормальный источник. Где нет "воды", где не обсасывают одну мысль десять минут, где автор действительно объясняет, а не показывает лишь то что он это знает и умеет. Таких пруд пруди в инете. И ты сидишь и тратишь время, как идиот. Книги, ясное дело, самый лучший вариант.

Я и намеревался почитать про DLL.  Но сперва хотел понять общую картину.

Самый простой способ, как назвали выше, это CreateRemoteThread с LoadLibrary и путем к твоей длл. Я не понимаю смысла в ресурсах экзешника держать DLL. Зачем?
Информация про DLL и хуки есть здесь. Если того, что здесь не хватает, гугли сайты. Правда один из хороших закрыли paywall'ом не понятно зачем, но не суть. Информация в основном на английском, но интуитивно понятно.
Если конкретно по книгам то Джеффри Рихтер "Windows для профессионалов", начиная с главы 19.

Если хочешь античиты обходить, то меньше чем мануал маппинг делать не выйдет. А это самому загружать, производить релокацию, импорты фиксить, вызывать TLS'ы и прочее. Ибо более менее нормальные античиты в основном ставят хуки на довольно глубокие штуки, такие как LdrLoadDll, LdrpLoadDll, даже на RtlInitUnicodeString некоторые ставят. При том, что мы имеем дело не с ring0 античитом.

Изменено пользователем KRYPTOPUNK
дополнил по поводу античитов
Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, KRYPTOPUNK сказал:

Самый простой способ, как назвали выше, это CreateRemoteThread с LoadLibrary и путем к твоей длл. Я не понимаю смысла в ресурсах экзешника держать DLL. Зачем?

Я полагал что загрузка DLL - это простое копирование её байт в память игры. Затем навешивание каким-то образом потоков на нее. Также связывание определенных инструкций игры с определенными функциями в DLL. А в функциях DLL идет каким-то образом получение значений из регистров, с дальнейшим их использованием и применением обратно.

Вот мое представление об схеме работы internal чита, при DLL. Моя картина в голове.

Говорю же, мне нужно общее представление об ее работе, на пальцах так сказать. Я же понятия не имею, как там все устроено.

Ссылка на комментарий
Поделиться на другие сайты

13 минут назад, Antonshka сказал:

Я полагал что загрузка DLL - это простое копирование её байт в память игры. Затем навешивание каким-то образом потоков на нее. Также связывание определенных инструкций игры с определенными функциями в DLL. А в функциях DLL идет каким-то образом получение значений из регистров, с дальнейшим их использованием и применением обратно.

Вот мое представление об схеме работы internal чита, при DLL. Моя картина в голове.

Говорю же, мне нужно общее представление об ее работе, на пальцах так сказать. Я же понятия не имею, как там все устроено.

Нет, обычно DLL загружается в память как исполняемая библиотека. DLL инъекция это называется.
А дальше ты используешь функции, написанные тобой, в чужом процессе, используя чужое адресное пространство. Посмотри мои исходники на гитхабе и станет понятно, что я имею ввиду. 

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, KRYPTOPUNK сказал:

Нет, обычно DLL загружается в память как исполняемая библиотека. DLL инъекция это называется.
А дальше ты используешь функции, написанные тобой, в чужом процессе, используя чужое адресное пространство. Посмотри мои исходники на гитхабе и станет понятно, что я имею ввиду. 

То что мы используем функции нашей DLL и используем их в чужом адресном пространстве, - это понятно. Для того собственно мы их и пишем, чтобы их использовать. Мне не понятно как происходит взаимодействие инструкций игры с функциями в библиотеке. Сам механизм. 

 

Вот есть байты DLL в памяти игры, мы их туда загрузили, (по сути просто скопировали, как я понимаю). Есть также байты инструкций игры. И то и это представляют из себя функции. Как же теперь оживить нашу DLL? Что нужно сделать чтобы функции в DLL заработали, и заработали каждая для своей  определенной игровой функции/инструкции.

 

Я смотрел у тебя в профиле, видел только трейнеры. С удовольствием и интересом посмотрю.

 

Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, Antonshka сказал:

Для меня самое сложное в изучении программирования, - это найти нормальный источник.

 

Если для тебе это самое сложное в изучении программирования, возможно, программирование это не для тебя. Как говорится:

Цитата

Кесарю - кесарево, пекарю - пекарево, а слесарю - слесарево.

 

Ссылка на комментарий
Поделиться на другие сайты

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

 

Ссылка на комментарий
Поделиться на другие сайты

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

 

Спасибо.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

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

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