Как писать читы на c
Перейти к содержимому

Как писать читы на c

  • автор:

Как научиться кодить? Писать читы для различных игр?

Здравствуйте! Я учусь в 8 классе и по информатике изучаю язык программирования в Pascal(на данный момент изучаем case). Мне очень нравится,как люди пишут разные читы,программы и так далее. Давно мечтал написать свой чит для игры CS:GO,но не знаю где учиться,как учиться и у кого соответственно.Не могли бы подсказать какой-либо сайт,где я бы мог научиться этому? На ютубе видео смотрел,но там не понятно. Буду очень благодарен,если вы поможете мне! Спасибо!

  • Вопрос задан более трёх лет назад
  • 25709 просмотров

6 комментариев

Средний 6 комментариев

Vlad_IT

Давно мечтал написать свой чит для игры CS:GO

Какой вы хороший человек.

Буду очень благодарен,если вы поможете мне!

Обязательно найдется такой же хороший человек, и поможет вам.

myjcom

В каникулы надо гулять на свежем воздухе и заниматься подвижными играми.
Даже взрослые бородатые дяди мечтают об этом. У них это называется отпуск.

Начинает нравится программирование поучаствуйте в олимпиадах, решайте задачки — для мозга полезнее будет.

Pavel_Dryndin @Pavel_Dryndin Автор вопроса
Владимир Проскурин, нет,руки у меня некривые,это для себя)
Андрей @poslannikD
Pavel_Dryndin, gamehacklab.ru

советую почитать как работает мозг, начать изучать другие языки как пайтон или C++/C#, паскаль умер лет 20 назад если не больше, в целом идея варится в той среде в которой вы хотите быть, что автоматически повысит уровень знаний, но к сожалению не повысит личные качества. и чтобы что то ломать для начала надо понимать как это работает и на чем это пишут и как например работает память и тд и тп

ElenaIcemen

Ольга Йсмен @ElenaIcemen
на это уйдёт не один год
Решения вопроса 0
Ответы на вопрос 2
Saboteur @saboteur_kiev Куратор тега IT-образование
software engineer

1. Читы это просто программы. Не нужно учиться писать читы, нужно учиться программировать. Тем более, начинать с сетевой игры типа CS:GO — не для начинающих.

2. Просто пишите много разных программ. Сперва простых, потом усложняйте.

Программирование — штука сложная. Требует много усилий и много времени. Нельзя посмотреть годик ютуб и стать программистом. Нужно несколько лет потратить на написание программ различной сложности. Чтобы вам стало понятнее, case — это оператор. В программировании это настолько простая вещь, что умение пользоваться подобными вещами даже не считается за обучение. Даже начинающий программист, который способен пройти собеседование на джуниора, может за 10 минут научиться пользоваться оператором case для любого языка программирования, даже если он его впервые видит (ну может за исключением извращений типа brainfuck).

Хотите стать программистом — парралельно с паскалем начните учить что-то из современного. Питон, php, java, c++, javascript
пробуйте все школьные задачи написать на этих языках. Через полгодика-год решите какой язык вам понравился больше и дальше углубляйтесь в него.

P.S. И да, терпение. Его нужно много.

Ответ написан более трёх лет назад
Комментировать
Нравится 3 Комментировать

tsarevfs

C++ developer

Если вам интересна тема игр, можно двигаться в эту сторону.
Читы дело не очень хорошее. Будем честны, большого вреда вы не нанесете в первое время, все взломают и без вас. Но вот на всевозможные баны нарваться будет обидно.
Хорошей практикой может стать создание модов и расширений. Говорят достаточно легко начинать с minecraft + python. Начать может даже ребенок, а возможности у языка и игры почти неограниченные.

Как писать читы?

Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно.
Вам необходимо обновить браузер или попробовать использовать другой.

Sqrol
Новичок

Автор темы
Я новичок в c++ думаю пользоваться Notepad++ те кто шарит как вообще писать с чего лучше начать?
Последнее редактирование: 8 Июн 2021

PanSeek

Я новичок в c++ думаю пользоваться Notepad++ те кто шарит как вообще писать с чего лучше начать?

Для C++ нужен компилятор, также если ты раньше таким не занимался — может быть сложно начинать. Если есть силы и терпения, то вперед!
А так, если хочешь простое что-то написать и для SAMP’а, можно использовать Lua, CLEO, AHK и т.п.

Главное понять логику, как должно работать, где и как правильно использовать циклы, как прописывать функции и прочие вещи. К примеру в CLEO и Lua, многое сделано уже за тебя и нужно просто искать опкоды/функции.

К примеру тебе нужно сделать телепорт к сохраненной метке. Вот и примерная логика:
1. По команде /setmark — запоминаются координаты персонажа, а получается что нужно взять свои координаты.

ARMOR
I’m sorry that I let you down

Модератор
Я новичок в c++ думаю пользоваться Notepad++ те кто шарит как вообще писать с чего лучше начать?
На НотПаде Плюсы спокойно не напишешь, прийдется скачивать Code Blocks или Visual Studio.

LagoonNR
Известный

Я новичок в c++ думаю пользоваться Notepad++ те кто шарит как вообще писать с чего лучше начать?

Сначала с мелких скриптов и так постепенно наращивать обороты.
Чтобы писать Читы, надо понять логику его действия, и тогда ты сможешь более менее сделать

F0RQU1N and
Известный

На НотПаде Плюсы спокойно не напишешь, прийдется скачивать Code Blocks или Visual Studio.
Нет. Писать можно хоть в блокноте, можно использовать компилятор, например minigw

Impossible In Rage
Известный

писать в нотпаде это как забивать гвоздь шуруповёртом , качай вст , благо по плюсам есть много книг , курсов и статей

bT3a
Потрачен

Лучше изучай Lua, намного легче писать софты, вот прога Sublime Text

ghostex
Активный

Для начало нужно определиться какой чит хочешь написать. Потом продумай как он будет работать (например я хочу сделать бота, для этого он должен бежать от 1 координате к другой и нажать допустим альт), затем приступай к написанию используя интернет, спрашивай на бх, ищи на бх вики и т.д, также можешь спрашивать у опытных кодеров. Так же рекомендую использовать Visual Studio Code.

Sqrol
Новичок

Автор темы
Спасибо всем��

ARMOR
I’m sorry that I let you down

Модератор
Нет. Писать можно хоть в блокноте, можно использовать компилятор, например minigw
Ну так поэтому я сказал что «Спокойно не попишешь»
Последнее редактирование: 14 Сен 2022

PanSeek
t.me/dailypanseek

Всефорумный модератор
Я новичок в c++ думаю пользоваться Notepad++ те кто шарит как вообще писать с чего лучше начать?

Для C++ нужен компилятор, также если ты раньше таким не занимался — может быть сложно начинать. Если есть силы и терпения, то вперед!
А так, если хочешь простое что-то написать и для SAMP’а, можно использовать Lua, CLEO, AHK и т.п.

Главное понять логику, как должно работать, где и как правильно использовать циклы, как прописывать функции и прочие вещи. К примеру в CLEO и Lua, многое сделано уже за тебя и нужно просто искать опкоды/функции.

К примеру тебе нужно сделать телепорт к сохраненной метке. Вот и примерная логика:
1. По команде /setmark — запоминаются координаты персонажа, а получается что нужно взять свои координаты на тот момент и записать их в переменные или массив.
2. Команда /tpmark — координаты которые на данный момент нужно подменить на те, которые сохранились в переменной, т.е. телепорт.

Заспавнился. Отбегаем от спавна, прописываем /setmark, потом также отбегаем и прописываем /tpmark и наш персонаж телепортируется к тем координатам, где прописали /setmark.

Что-то вроде того должно получиться. К примеру я вначале тоже расписывал все в блокноте, чтоб не забыть, сейчас уже так не делаю ибо некоторые моменты знаю наперед как делать и просто пропускаю их объяснению. Зачастую есть просто список и иногда в скобках себе поясняю что-нибудь, если понадобится.

UPD: Вот тот пример который писал выше. Скрипт сделан с помощью LuaJIT в поддержке MoonLoader’а.

sampRegisterChatCommand('setmark', function(arg) posX, posY, posZ = getCharCoordinates(PLAYER_PED) end) sampRegisterChatCommand('tpmark', function() setCharCoordinates(playerPed, posX, posY, posZ) end)

Но также, если мы пропишем сразу /tpmark, то будет ошибка и нужна проверка на инициализированные переменные или чтоб они были не равны 0 (если инициализируешь выше (вряд ли сделаешь метку на 0.0, 0.0, 0.0))
В C++ без использований SDK уже просто так не напишешь, нужны адреса твоего местоположения и тому подобное.

Чит своими руками. Вскрываем компьютерную игру и пишем трейнер на C++

Иг­рать в игры любят все, но это гораз­до инте­рес­нее, ког­да у тебя име­ется нес­конча­емый запас пат­ронов и здо­ровья. Что­бы обза­вес­тись и тем и дру­гим, мож­но погуг­лить читы и трей­неры для тво­ей любимой игры. Но как быть, если их еще не раз­работа­ли? Написать самому! Обла­дая навыка­ми реверс‑инжи­нирин­га и прог­рамми­рова­ния, сде­лать это нам­ного про­ще, чем кажет­ся.

Выбор игры

Для начала опре­делим­ся с игрой. Мой выбор пал на Hyper Light Drifter (далее HLD). Если ты пла­ниру­ешь поэк­спе­римен­тировать с ком­мерчес­кой игрой, обра­ти вни­мание на сайт pcgamingwiki, а так­же на игры с откры­тым исходным кодом.

warning

Так как для написа­ния этой статьи я буду исполь­зовать ком­мерчес­кую игру, мне нуж­но удос­товерить­ся, что лицен­зион­ное сог­лашение (EULA) поз­воля­ет это делать.

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

EULA HLD

Поиск значений

Для поис­ка зна­чений, которые будет изме­нять чит, мы ста­нем исполь­зовать Cheat Engine (далее CE).

За­пус­тим игру и в нас­трой­ках игры выберем окон­ный режим — нам нуж­но, что­бы на экра­не помеща­лось еще что‑то, кро­ме игры.

Оконный режим

Как видим, в окон­ном режиме отсутс­тву­ет панель заголов­ка, с помощью которой мы мог­ли бы перетас­кивать окно игры по экра­ну. Что­бы испра­вить эту неп­рият­ность, откро­ем отладчик x64dbg, а имен­но его 32-бит­ную вер­сию ( x32dbg ) и запус­тим под ним HLD.

Пос­тавим брейк‑пой­нты на фун­кции CreateWindowExA и CreateWindowExW , которые отве­чают за соз­дание окна. Най­ти их мож­но на вклад­ке Symbols, выб­рав биб­лиоте­ку user32. dll .

Вкладка символов

Ви­дим, что наше окно соз­дает­ся с парамет­ром dwStyle , име­ющим зна­чение WS_POPUP = 0x80000000 .

Значение параметра dwStyle, равное WS_POPUP

По­меня­ем это зна­чение на WS_OVERLAPPED = 0x00000000 .

Параметр dwStyle, измененный на WS_OVERLAPPED

И вот резуль­тат: теперь мы можем переме­щать окно.

Оконный режим с панелью заголовка окна

Пос­ле того как мы нас­тро­или окно игры с помощью отладчи­ка, ненадол­го отло­жим его. Что­бы най­ти нуж­ные нам зна­чения в Cheat Engine, раз­берем­ся с теорией.

Что такое статический адрес

Ста­тичес­кий адрес — это адрес, который изме­няет­ся пред­ска­зуемо по отно­шению к модулю, которо­му он при­над­лежит. Если перемен­ная гло­баль­ная, то мож­но най­ти ее в сег­менте дан­ных.

Ста­тичес­кие адре­са ука­зыва­ются в фор­мате [ module+offset] . Нап­ример, в library. dll мы мог­ли обна­ружить зна­чение по адре­су 0x700004C0 ( base = 0x70000000, offset = 0x4C0 ). Пос­коль­ку library. dll может переме­щать­ся и ее базовый адрес заг­рузки будет менять­ся, что­бы получить дос­туп к нашему зна­чению, мы не исполь­зуем этот адрес нап­рямую. Вмес­то это­го возь­мем адрес [ library. dll + 0x4C0 ]. Сле­дова­тель­но, ког­да library. dll заг­ружа­ется по базово­му адре­су 0x10000000 , [ library. dll + 0x4C0 ] дает нам 0x100004C0 и у нас появит­ся дос­туп к нашему зна­чению.

Ес­ли же перемен­ная локаль­ная, то искать нуж­но в сте­ке. Для это­го получа­ем TebBaseAddress опре­делен­ного потока, а затем вто­рой ука­затель из этой струк­туры ( FS:[ 0x04] или GS:[ 0x08] , в зависи­мос­ти от раз­ряднос­ти про­цес­са), которая содер­жит вер­шину сте­ка. TebBasePointer может быть получен с помощью NtQueryInformationThread (если это 64-бит­ный про­цесс) или же с помощью Wow64GetThreadSelectorEntry (если это 32-бит­ный про­цесс в 64-бит­ной сис­теме).

Поиск показателей здоровья

За­пус­каем Cheat Engine и под­клю­чаем­ся к про­цес­су игры.

Подключение к процессу игры

Так как мы не зна­ем, в каком типе хра­нит­ся показа­тель здо­ровья, выс­тавля­ем сле­дующие парамет­ры для пер­вого ска­ниро­вания.

Первое сканирование

Да­лее про­дол­жаем ска­ниро­вание, не забывая при этом терять hp (показа­тель здо­ровья) в игре. Дела­ем мы это для того, что­бы отсле­живать изме­нения зна­чения hp в памяти игры через CE, а так­же умень­шать зна­чение в поис­ке для сле­дующих ска­ниро­ваний. Делать мы это будем до тех пор, пока не будет дос­тигну­то адек­ватное количес­тво зна­чений в окне CE. Адек­ватное количес­тво зна­чений в дан­ном слу­чае — это такое количес­тво адре­сов, про­вер­ка которых зай­мет мак­симум минут пять.

Найденные адреса и их значения

Мне приг­лянулись вот эти два адре­са, которые я добавил в ниж­нее окно двой­ным щел­чком мыши на них. Приг­лянулись они мне в пер­вую оче­редь потому, что зна­чения по этим адре­сам сре­ди всех осталь­ных име­ют наиболь­ший тип — double. Всег­да нуж­но про­верять от боль­шего типа к мень­шему. То есть сна­чала про­веря­ем адре­са, хра­нящие тип double, затем float, пос­ле integer и так далее. Более под­робно о раз­мере типов дан­ных мож­но про­читать в до­кумен­тации Microsoft.

Добавленные адреса

Ес­ли мы поменя­ем зна­чение по адре­су 0x36501940 , то на экра­не появит­ся полоса здо­ровья, но его количес­тво не поменя­ется.

Индикатор hp

Ес­ли теперь мы поменя­ем зна­чение по адре­су 0x36501A30 , то на экра­не появит­ся полоса hp и зна­чение изме­нит­ся. Это зна­чит, что мы наш­ли адрес, в котором хра­нит­ся зна­чение здо­ровья в игре. Зна­чение хра­нит­ся в фор­мате double (стан­дарт IEEE 754).

Изменение hp

Да­дим наз­вание най­ден­ным нами адре­сам: hp_bar и hp соот­ветс­твен­но. Одна­ко, как я уже рас­ска­зывал в раз­деле, пос­вящен­ном ста­тичес­ким адре­сам, най­ден­ный нами адрес будет бес­полезен пос­ле того, как мы вый­дем в меню или переза­пус­тим игру.

Поиск статического адреса для индикатора здоровья

Для даль­нейше­го поис­ка ста­тичес­кого адре­са вер­немся к отладчи­ку. В окне дам­па перехо­дим по ранее получен­ному адре­су 0x36501A30 , в котором хра­нит­ся зна­чение hp.

Значение по адресу 0x36501A30 в окне дампа

Ста­вим по адре­су 0x36501A34 аппа­рат­ный брейк‑пой­нт на запись и теря­ем в игре здо­ровье. Брейк‑пой­нт сра­баты­вает, и мы видим, что новое зна­чение hp берет­ся из регис­тра EDI . Это зна­чение явля­ется пер­вым парамет­ром текущей фун­кции.

Вый­дя из этой фун­кции, прос­ледим, отку­да она получа­ет свой пер­вый параметр. Мы уви­дим, что переда­ваемый параметр — это воз­вра­щаемое зна­чение фун­кции по адре­су 0x003EFCE9 .

Пос­тавим брейк‑пой­нт на вызов фун­кции по адре­су 0x003EFCE9 , а даль­ше про­дол­жим отладку, пока не оста­новим­ся на ее вызове. Зай­дя внутрь фун­кции, выпол­няем ее до кон­ца. Как толь­ко мы дос­тигнем адре­са 0x00F88E19 , мы уви­дим, что регистр EAX хра­нит адрес зна­чения hp. Оче­вид­но, что в этой фун­кции про­исхо­дит дос­туп к нашему адре­су через ариф­метику с ука­зате­лями для струк­тур, а имен­но через при­бав­ление к ука­зате­лю сме­щений и даль­нейше­го его разыме­нова­ния. Более под­робно об этом мож­но про­читать здесь. Нам нуж­но будет пов­торно прой­тись по этой фун­кции, что­бы узнать, через какой адрес и сме­щения она получа­ет адрес зна­чения hp.

Пос­ле того как мы узна­ли адрес 0x353F9BB0 , из которо­го получа­ется адрес зна­чения hp, начина­ем выходить из фун­кций. При этом вни­матель­но отсле­жива­ем, что переда­ется им в качес­тве парамет­ров. Спус­тя пару выходов мы нат­кнем­ся на сле­дующее.

Мы наш­ли ста­тичес­кий адрес! Если пос­мотреть его рас­положе­ние в памяти, он находит­ся в сек­ции . data .

Зная все сме­щения, добавим их в CE, нажав Add Address Manually .

Поиск значения числа патронов

Те­перь прис­тупим к поис­ку зна­чения чис­ла пат­ронов (ammo). Пер­вое ска­ниро­вание дела­ем с такими же парамет­рами поис­ка, как ког­да мы иска­ли здо­ровье.

В дан­ном слу­чае мы смог­ли най­ти лишь одно зна­чение, и это зна­чение полосы, которая показы­вает чис­ло боеп­рипасов.

В игре этот инди­катор не появил­ся. В отли­чие от полосы здо­ровья, он отоб­ража­ется толь­ко пос­ле нажатия на кноп­ку E или во вре­мя выс­тре­лов.

Поиск статического адреса для ammo

Мы понима­ем, что показа­ния инди­като­ров в игре всег­да срав­нива­ются с фак­тичес­кими. Если одна из полос показы­вает не то, что нуж­но, ее дли­на изме­няет­ся. Поэто­му воз­вра­щаем­ся к отладчи­ку и начина­ем с аппа­рат­ного брейк‑пой­нта на запись по адре­су 0x365014С4 . Как видим по ком­мента­риям, эта фун­кция уже нам встре­чалась.

По ана­логии с поис­ком hp, выходим из фун­кции.

Так как мы уже зна­ем, что инди­катор дол­жен получать зна­чение где‑то рань­ше, нам при­дет­ся про­лис­тать окно дизас­сем­бле­ра выше, пока мы не уви­дим фун­кцию, пред­положи­тель­но получа­ющую фак­тичес­кое зна­чение ammo.

Мы видим, что в этой фун­кции мы уже были, а это зна­чит, что она тоже получа­ет зна­чение, но уже ammo — 365014E0 . Толь­ко какое‑то оно стран­ное.

До­бавив это «стран­ное» зна­чение в Cheat Engine, а потом изме­нив его, к при­меру, на 100, мы уви­дим, что на экра­не появит­ся инди­катор пат­ронов и его зна­чение поменя­ется. Зна­чит, мы наш­ли адрес, в котором хра­нит­ся зна­чение ammo в игре.

Зная все сме­щения от ста­тичес­кого адре­са к адре­су зна­чений ammo, добавим их в CE, нажав Add Address Manually .

info

Ско­рее все­го, боеп­рипасы в HLD пред­став­ляют собой заряд энер­гии и поэто­му хра­нят­ся в про­цен­тах, ведь при их поис­ке через отладчик мож­но было уви­деть стро­ки, содер­жащие сло­во energy . Которое намека­ет на то, как будет выг­лядеть зна­чение в памяти. Нап­ример, игра от одной небезыз­вес­тной поль­ской ком­пании хра­нила пат­роны в памяти вмес­те, а для игро­ка показы­вала раз­дель­но: как рожок, так и количес­тво оставших­ся пат­ронов, поэто­му при их поис­ке не уда­валось най­ти каж­дое из зна­чений, а нуж­но было искать их сум­му.

Проверка полученного статического адреса

Что­бы про­верить, пра­виль­но ли мы опре­дели­ли адре­са, нуж­но вый­ти в меню игры и вер­нуть­ся к игро­вому про­цес­су или же переза­пус­тить игру.

Проверка для HP

Так выг­лядит наша cheat table для hp.

Таблица до выхода в меню / перезапуска игры

А вот так она выг­лядит пос­ле переза­пус­ка игры.

Таблица после запуска игрового процесса

Проверка для ammo

Так выг­лядит наша cheat table для ammo.

Таблица до выхода в меню / перезапуска игры

А вот так она выг­лядит пос­ле переза­пус­ка игры.

Таблица после запуска игрового процесса

Как будет выглядеть наш указатель в C++

В нашем чите дос­туп к най­ден­ным адре­сам зна­чений будет таким.

static_addr = ( DWORD ) GetModuleHandle ( 0 ) ;
static_addr = * ( DWORD * ) ( static_addr + 0x255AF150 ) ;
static_addr = * ( DWORD * ) ( static_addr ) ;
static_addr = * ( DWORD * ) ( static_addr + 0xD48 ) ;
static_addr = * ( DWORD * ) ( static_addr + 0x0C ) ;
static_addr = ( DWORD * ) ( static_addr + 0xC4 ) ;
static_addr = * ( DWORD * ) ( * static_addr + 0x08 ) ;
static_addr = * ( DWORD * ) ( static_addr + 0x44 ) ;
static_addr = * ( DWORD * ) ( static_addr + 0x10 ) ;
drifter_hp = ( double * ) ( DWORD * ) * ( DWORD * ) ( static_addr + 0x1FD8 ) ;
drifter_ammo = ( double * ) ( DWORD * ) * ( DWORD * ) ( static_addr + 0x268C ) ;

Написание трейнера

По прин­ципу дей­ствия читы мож­но раз­делить на две груп­пы: внут­ренние и внеш­ние. Внеш­ние читы — это отдель­ное при­ложе­ние, запущен­ное в сис­теме в виде про­цес­са. Внут­ренние читы обыч­но реали­зова­ны как динами­чес­кая биб­лиоте­ка, внед­ряемая в про­цесс игры.

Мы будем писать внут­ренний чит, поэто­му нам понадо­бит­ся не толь­ко сама биб­лиоте­ка, но и инжектор, который внед­рит нашу биб­лиоте­ку в про­цесс игры. Инжектор получит спи­сок про­цес­сов, най­дет про­цесс игры, выделит в ней память, в которую запишет наш внут­ренний чит, а пос­ле соз­даст уда­лен­ный поток внут­ри игры для выпол­нения кода нашего чита.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.

Гайд Как писать читы на C# (BunnyHop)

Я не буду объяснять, как создавать проекты в VisualStudio и тому подобное, будем считать, что те, кто читают этот гайд, хотя бы немного разбираются в том, как создавать и работать с проектами в визуалке.

1)Первым делом нужно скачать библиотеку на GitHub:NativeManager
2)Скомпилируйте эту библиотеку у себя на компьютере
3)Создайте свой проект с будущим читом
4)Через ссылки добавьте NativeManager в свой проект
5)Приступаем к разработке.
————————————————————————————————————————————————————————————————————————————
Чит мы будем создавать на примере игры CS:GO

1)После того как мы создали проект с читом, нам нужно добавить ссылки на пространства имен нашего NativeManager’a
using System.MemoryInteraction;

  1. SimpleMemoryManager
  2. MemoryManager(Производный класс от SimpleMemoryManager)

3)Пишем код для присоединения к процессу игры
ВАЖНО.
Игра должна быть запущена раньше чита, иначе мы словим исключение, что такого процесса не существует!

Process process = Process.GetProcessesByName("csgo")[0]; MemoryManager memory = process.GetMemoryManager();

В первой строчке кода мы указали, что нам нужен процесс с именем «CSGO».
Во второй строчке кода мы указали, что нам нужно получить экземпляр MemoryManager для работы с виртуальной памятью процесса.

4)Следующим этапом нам нужно получить модули процесса, с которыми нам нужно работать, что бы прочитать нужные нам данные

IntPtr client = process.GetModule("client.dll").BaseAddress;

5)Создаем бесконечный цикл для того, что бы наш чит постоянно читал данные из игры и мог так же в нее записывать.

while(true)

6)Теперь нам нужно получить локального игрока из игры. Для этого в цикле нам нужно написать вот такой код

IntPtr localPlayer = memory.Read(client + 0xD3FC5C);

Число 0xD3FC5C может меняться с каждым обновлением игры. Следить за обновлением оффсетов можно на GitHub по этой ссылке:hazedumper

7)Мы получили локального игрока, теперь нам нужно получить его флаг. С помощью него мы будем понимать в прыжке он или нет

 int flag = memory.Read(localPlayer + 0x104);

8)Для начала сделаем проверку на нажатие кнопки пробела
Этот код нужно добавить в любой из классов

[DllImport("user32.dll")] static extern bool GetAsyncKeyState(int vKey);

А этот код в наш цикл после получения флага

if (GetAsyncKeyState(32))

9)Теперь нам нужно сделать проверку, находится игрок в воздухе или на земле. Для этого нужно добавить этот код в условие проверки нажатия клавиши пробел

 if(flag == 256 || flag == 262)

10)В этом условии нам нужно сделать запись в память игры, что бы делать прыжок, когда мы оказываемся на земле

if (flag == 256 || flag == 262) < memory.Write(client + 0x51FE22C, 4); >else

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

Process process = Process.GetProcessesByName("csgo")[0]; MemoryManager memory = process.GetMemoryManager(); IntPtr client = process.GetModule("client.dll").BaseAddress; while(true) < IntPtr localPlayer = memory.Read(client + 0xD3FC5C); int flag = memory.Read(localPlayer + 0x104); if (GetAsyncKeyState(32)) < if (flag == 256 || flag == 262) < memory.Write(client + 0x51FE22C, 4); >else < memory.Write(client + 0x51FE22C, 5); >> Thread.Sleep(1); >

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *