Перейти к содержанию
Авторизация  
Antonshka

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 заработали, и заработали каждая для своей  определенной игровой функции/инструкции.

 

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

 

Поделиться сообщением


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

https://github.com/KRYPTOPUNK/RiskOfRain2_hack
Вот. Смотри. Это исходный код моего трейнера для Risk Of Rain 2.
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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

 

Спасибо.

Поделиться сообщением


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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Предпросмотр
Авторизация  

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

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

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