Пишем чит для Counter-Strike или как работать с памятью в C++
Сёркииис! Сегодня затронем почти не обсуждаемую тему в рунете — как написать чит на C++. Я не призываю вас писать читы для игр, эту тему я затрагиваю лишь в познавательных целях.
Вчера мне предложили написать чит для игры, опыта в этом у меня конечно нет, но из любопытства я сразу же «побежал» читать забугорные сайты на эту тему, так в итоге я написал свой «чит» для накрутки денег в CS 1.6:
Идея такая, ищем процесс с игрой, заходим в его память и меняем нужные нам данные. Как можно заметить, я явно указываю адрес в памяти, который хранит деньги, чтобы сэкономить вам время чтения этого поста (кому интересно, здесь можно посмотреть, как перебирать ячейки памяти процесса). Весь код прокомментирован и думаю, у вас не должно быть проблем с его понимаем, ведь в C++ невероятно удобно работать с памятью.
Дубликаты не найдены
Да это-то хуйня, чё там писать-то.
Проблема адрес с текущими деньгами получить.
На сколько я знаю, адреса в 1.6 уже не обновляются и их можно гуглить как оффсеты. А вот у ксго они обновляются каждый месяц.
Ну так в том-то и писечка. То, что ты написал — это никому не интересно, эта байда даже для тех, кто не знает, гуглится за 5 минут, любой нуб найдёт.
А вот найти адрес, где ключ от квартиры где деньги лежат — вот это вот уже интересно.
Почему не пользовать artmoney?
Потому что он показывает исходный код для реализации артмоней 🙂
Нет, игра запущена на стимовской кс. У себя в телеге я написал почему такой чит VAC не палит.
Да, я сам такое не поддерживаю, но для образовательных целей и как от этого защищаться — отличная тема
О мои глаза, о нет, мои глаза.
Ну как бы не реклама, просто ссылка на канал, а так пост соответствует — полная информация есть, исходные коды приведены, так что все нормуль, по правилам.
Типобезопасные контейнеры в GNU C11 без кодогенерации
Всем привет!
Я решаю проблему про которую никто не знает, на языке, на котором никто не пишет. Это пост про язык Си.
Я сам не пишу на Си уже очень давно. Профессионально последние 7 лет только на C++ и C#. Но Си очень привлекает своей простотой. Но отталкивает отсутствием множества удобных штук.
Есть интересное открытие, которым я хотел бы поделиться, но не знаю с кем, так как мало кто пишет на Си и вообще задумывается о нем. Поэтому напишу тут, вдруг кому-то будет интересно. Это не готовое решение, а лишь идея, которая пришла в голову вчера утром и обросла деталями в течении дня.
Не хочу чтобы идея пылилась, хочу скорее от нее освободиться и вернуться к работе. Поэтому в посте мало деталей, пожалуйста, посмотрите пример, там вроде все довольно понятно.
1. Проблема
Если вы хотите универсальные контейнера на Си, можно пойти двумя путями:
1. Макросы, которые работают почти как шаблоны в C++, генерировать функции для доступа к контейнерам для тех типов, которые вы хотите использовать. Вот пример: https://github.com/stefanct/sglib
Это быстро, но требует объявить все используемые типы в одном месте, что усложняет разделение проекта на модули. Поправьте, если я не прав.
2. Типы данных, хранящие всю инфорацию внутри как это сделано в Glib https://developer.gnome.org/glib/2.66/ в данном случае, невозможно организовать типобезопасность, повсеместно используюется void* . Меняешь тип контейнера и не знаешь, что после этого отвалится. Моя цель — решить именно этот класс проблем.
2. Как выглядит решение
Так вот, слыхали что существует C11? Это почти как C++11, только C11.
Так вот, там появилось такое ключевое слово _Generic, которое позволяет выбрать функцию, в зависимости от типа и позволяет сделать какую ни какую перегрузку функций (которой нет в Си из коробки)
Оказалось, что используя _Generic + typeof() из GNU + указатели на функции можно сделать типобезопасные контейнеры прямо в Си! Эти контейнеры не используют кодогенерацию, однако так же удобны в использовании (хотя будут чуть медленней работать, но в большинстве случаев удобство важнее)
Вот короткий пример создания вектора:
ABVECTOR(int) numbers = CREATE_ABVECTOR(int);
for (int i = 0; i
Если поменять тип контейнера, или тип переменной хоть в одном месте, вы получите ошибку компиляции. А это ровно то, чего я хочу!
Другой пример, передача контейнера в качестве аргумента в функцию:
void printValues(ABVECTOR(float) numbers)
<
for (float* iter = BEGIN(numbers); iter != END(numbers); iter = NEXT(numbers, iter))
printf(«Val: %f\n», *iter);
for (int i = 0; i Показать полностью
Рождество и эльфы!
— Мам, кто делает рождественские игрушки?
— Вау, реально? Даже компьютерные игры?
Эльф глядя в книжку C++ для чайников: «О, Господи, что это за дерьмо!»
Только одно видео
Мотивация роста программистов
Есть у меня знакомый, который является отличным программистом на языке программирования C++. У него в конторе руководство придумало следующую схему мотивации программистов. Вывесили таблицу с фамилиями сотрудников и каждый должен был проставить напротив себя в каждом столбике оценку своих знаний различных языков программирования.
Надо отметить, что мой знакомый большой противник растекания мысью по древу и попытки изучить все языки программирования. Поэтому в знак протеста он не стеснясь проставил везде себе самый низкий балл, кроме, конечно же своего любимого Си++. И это с учетом того, что оценивать знания предлагалось самостоятельно без каких либо тестов. Но всем остальным карта поперла. В ход под хорошие оценки пошли все языки программирования с любым опытом начиная от написания HelloWorld. Особенно начали оценивать себя по модному Java. Ведь вполне вероятно было, что в будущем это скажется на уровне зарплаты.
Через время результаты оценки были зафиксированы руководством.И.
. каждому программисту подкинули проектов по языкам, в которых он, якобы, разбирается. Наверняка, вы уже догадались, что зарплату никто не повышал. Ну а чё, в контракте написано тыжпрограммист, вот и программируй коль знаешь язык. Сам же написал!
Сказ о том, почему LelResetFeg со спидраном не свезло
3 дня назад во время прохождения GTA: San Andreas на скорость товарищу LelResetFeg на голову упал вертолёт. Некоторые игроки начали подозревать стримера в нечестной игре, но если подумать, то ситуация выглядит слишком глупо
Если вы ранее играли в GTA: SA, то вполне возможно, что подобное с вами уже случалось: совершенно рандомная последовательность клавиш приводила к активации какого-нибудь чита.
В этом посте мы разберёмся, что же приводит к такому поведению игры
Дальше будет много технических подробностей, а сочетания, которые мог случайно прожать стример, будут в конце
Для начала, нужно понять, как игра хранит список чит кодов.
Этот вопрос решается простым гуглением:
GTAG Modding:
San Andreas stores the last 29 characters typed on the keyboard, hashes the resulting string and compares it with the hashes of the cheats. Because the cheats are stored in hash form, it is much harder to figure out what they are. Most cheats have more than one code due to hash collisions and the intended cheat phrases for many took a long time to find.
Cheats have a minimum length of 6 characters and are stored all in upper-case.
Отлично, теперь мы знаем следующее:
— Чит коды хранятся в виде хешей
— Хеш-функция достаточно слабая (много коллизий)
— Длина чит кода может быть от 6 до 29 символов
— При вводе символы сохраняются в верхнем регистре (это важно, поскольку хеш-функция учитывает регистр)
Для вашего понимания (определения неполные и значительно упрощены):
Хеш-функция — это такая штука, которая может преобразовать набор входных данных в набор выходных данных, но уже определённой длинны (который будет называться хешем).
Пример: Вы можете хешировать «Войну и мир» Л. Н. Толстого и на выходе получить строку вроде «73279c854ad356869d3f59150ebc964d53269aed» (хеш по алгоритму SHA-1). Затем, если вам скинут архив с кучей книг и рандомными названиями, то найти среди них нужное издание книги вы сможете просчитав хеши всех книг, и найдя среди них книгу с хешем «73279c854ad356869d3f59150ebc964d53269aed» (не читая ни названий, ни содержания).
Вероятность того, что хеш SHA-1 совпадёт с хешем другой книги — крайне мала.
Коллизии — те самые случаи, когда хеши разных входных данных совпадают. Вероятность появления коллизий зависит от длины хеша и особенностей конкретной хеш-функции (алгоритма).
Итак, что мы можем сделать дальше?
Поверим англоязычным товарищам на слово и будем считать, что хеш-функция действительно слабая.
Для этого есть некоторые предпосылки, например, оптимизация: во времена разработки GTA: SA (напомню, игра вышла в конце 2004 года) трата кучи ресурсов компьютера на просчёт хеша последних введённых символов на клавиатуре была бы. не лучшим вложением.
Наша задача — найти как можно больше коллизий для чит кода OHDUDE (спавн вертолёта Hunter), для её упрощения (и ускорения расчётов) мы ограничимся набором символов «WASD»
Проблема: не понятно, какую хеш-функцию использует игра. По этому поводу информации практически не найти, поэтому рассмотрим, какие кусочки информации есть на форумах:
Каждый хеш длиной в 4 байта, с такой длиной куча коллизий — не сюрприз.
Запомним хеш нужного нам чита — 0xE958788A
На ум сразу приходит CRC32 (32=8*4 — от количества бит в хеше), вот только не понятно, какая его разновидность используется в игре.
Не будем ломать себе мозг и воспользуемся калькулятором.
Вводим OHDUDE, и. ничего похожего здесь нет:
На этом этапе я провёл достаточно много времени, обнаружил на форумах утверждение, что в игре используется CRC-32/JAMCRC. Также было упоминание о расчётах CRC-32 в исходных кодах инструмента для изменения игровых файлов, но результаты никак не сходились.
До тех пор, пока до меня не дошло, что гораздо удобнее хранить историю нажатых клавиш в перевёрнутом виде. Посмотрим:
Ха, вот оно как!
Значит, осталось перебрать все возможные последовательности нажатия кнопок W, A, S и D, хеш CRC-32/JAMCRC которых будет равен 0xE958788A.
Конечно, делать это мы будем не ручками, а при помощи небольшой программы.
В ней нет почти ничего интересного, суть сводится вот к чему:
— Получаем на вход ожидаемый чит код
— Считаем его хеш
— Перебираем все возможные сочетания WASD (длиной до 17 символов, но это можно изменить)
— Выплёвываем все совпадения, предварительно перевернув строку задом наперёд
Самые любопытные могут почитать исходный код. (Писалось под Linux/g++, заводилось на WSL)
Итак, после перебора 17 179 869 100 возможных сочетаний мы получаем следующий список:
1. DASD AWAA WSSW WAW
2. AWDD WAAD SAAA WASS S
3. SWSW SWAA AWWW ASWW S
4. SSWD AWSS ADWD SSDW A
5. SDAW WDWS DDWS WSAW A
(если проверять все возможные сочетания, список будет гораздо длиннее, но перебор 288 230 376 151 711 744 сочетаний займёт. скажем, достаточно продолжительное время)
5 коллизий, и это только 4 кнопки с макс. длиной 17 символов! Время проверить:
Источник статьи: http://pikabu.ru/story/pishem_chit_dlya_counterstrike_ili_kak_rabotat_s_pamyatyu_v_c_7053793
[Урок#1]Создаем первые читы за 30 мин. ! WALL HACK , TRIGGER BOT [AutoIt]
CSS создание читов гайды
Привет всем ! Всвязи в с прадзниками я освободился и по просьбам решил написать эту статью.
Собственно чем мы сегодня займёмся?
Сегодня мы создадим примерно за 30 минут :
P ixel T rigger B ot — Пиксельный триггер бот
W allHack — варфреймовое вх
________________________________________________
Чуть-чуть о TriggerBot’e :
TriggerBot как я уже написал будет пиксельным , в этом есть минусы и плюсы .
Минусы в том что такой триггер бот нужно будет тонко настроить чтобы он работал идеально.
А плюсы в том что он 100% не будет ловится античитами , так как он External(т.е без инжекта).
Что такое «пиксельный»? Ответ :
Это цвет ; любая модель или текстура состоит из пикселей , они имеют определенный цветовой адрес определяющий
оттенок и т.п Мы будем в определенной облости искать цвет который есть на модельке в CS:S
и если наш чит его найдет он автоматически будет стрелять(т.е Триггер бот).
________________________________________________
Что нам понадобится :
Сам язык AutoIt — Download/Скачать
NomadMemory Plugin(для того чтобы сделать WH) — Download/Скачать
Cheat Engine — Download/Скачать
И внимательное прочтение этой статьи .
_________________________________________________
Начнём с WallHack’a :
Установите всё что упомянуто выше.
Итак ! Запустим игру . После того как она загрузилась сверните её и
запустите Cheat Engine , нажмите на мигающий значок выбора процесса.
В списке найдите hl2.exe и выберите его.
Теперь разверните игру и введите туда :
sv_cheats 1;r_drawothermodel 333555
Сверните игру .
Откройте Cheat Engine и в поиск введите 333555 нажмите кнопку .Подождите .
Слева будет список найденых значений , лично у меня нашло одно , думаю у вас будет также .
Теперь посмотрите на ваше значение , слева написан адрес, а правее чему оно равно.
Откройте блокнот и в ручную перепишите туда адрес (у меня например получилось 1С307370)
Теперь Cheat Engine можно закрыть .
Нажмите правой кнопкой мышки на рабочий стол , там выберите создать->AutoIt V3 Script.
Назавите его например WH.au3 .
Откройте его блокнотом и впишите в него вот такой код :
В этом коде меняем » 62E642F0″ на свое , НО не удаляйте «0x».
Теперь нужно собрать этот скрипт в exe программу :
Нажимамем правой кнопкой по скрипту и видим «Compile Script» .
Получаем exe’шник.
Разворачиваем игру , ставим sv_cheats 0;r_drawothermodels 0 заходим в игру и запускаем exe.
У вас включается WH!
Для выключения и выхода из чита нажимаем F6.
_________________________________________________
Теперь Pixel Trigger Bot :
*Совет- лучше делать такой triggerbot с чамсами(цветными модельками)
Также как и выше создаем на рабочем столе скрипт AutoIt .
Открываем его блокнотом.
Вставляем туда :
Запускаем игру и сворачиваем её. Заходим в папку с AutoIt находим там Au3Info.exe и запускаем .
Там вы найдете Finder Tool в виде такого прицела . Разворачиваете игру , запускаете игру с ботами.
Пишите в консоль : sv_cheats 1;bot_stop 1, чтобы боты стояли . Подходите к ним
и октрываете чат мышкой переключаетесь на AutoIt зажимаете Finder Tool .Представьте вокруг вашего прицела квадрат .
Так вот Finder Tool нужно перенести на левый , верхний угол этого квадрата . Квадрат должен быть чуть больше прицела .
И отпустите Finder Tool ,переключитесь на окно програмы найдите там вкладку Mouse (снизу) .
Там буду координаты(Pisition) поставленной вами точки, а также её цвет .
В данном мной коде замените «956,546» на то что получилось у вас(Position) .
Теперь снова зажмите Finder Tool и теперь перенесите его на правый нижний угол воображаемого квадрата.
Теперь замените «965,552» на полученные данные .
И теперь последний раз зажмите Finder Tool и наведите его на модель противника .
Замените «0xCF3429» в моем коде на Color который выбрали вы (он тоже находится в вкладке Mouse
Finder Tools’a).
Скрипт готов !
Компилируем его как я написал выше .
Запускаем .
Теперь когда цвет который вы нашли попадет в ваш воображаемый квадрат , чит автоматически выстрелит .
Теперь какие могут быть проблемы .
1)На расстояниях пиксели теряют цвет , поэтому нужно вбить несолько цветов с разных расстояний ,
для этого просто расскопируйте весь код(кроме HotKeySet(«
2)Мы сделали триггер бот только для одной команды , поэтому можно сделать сразу для двух или сделать переключаемый вариант
(может быть скоро выложу исходники).
3)Может подлагивать если вы выбрали слишком большую область (уменьшите её).
Наверное я описал все не очень понятно , за это простите ,но постарайтесь вникнуть в написанное .
Для того чтобы было хоть чуть-чуть понятней , вот несколько видео :
Последний раз редактировалось winbotx; 10.03.2012 в 09:37 .
Источник статьи: http://pvpru.com/board/showthread.php?t=143959