kiwipapayamongoose

Помогаторы
  • Публикации

    1 774
  • Зарегистрирован

  • Посещение

  • Days Won

    91

kiwipapayamongoose last won the day on December 19 2017

kiwipapayamongoose had the most liked content!

Репутация

531 True Gamehacker

12 подписчиков

О kiwipapayamongoose

  • Звание
    — О, ты же шаришь в компах... — Нет, только не это!

Посетители профиля

7 620 просмотров профиля
  1. Статья написана просто потому, что в русскоязычном сегменте интернета такой статьи не видел, есть только англоязычная версия и запутанная с множеством пробелов. Расскажу о glow hack, фитча ещё со времен L4D или Portal, которая делается даже проще Bhop'a и прочих читов, если конечно есть навык в реверсе. Для начала заходим в кс запускаем любую демку в которой сможем включать и выключать xray(glow). Запускаем CE, если xray включен, то ищем 1 или 0 тип байт, останется 9-10 адресов Как находим ставим бряк на доступ включаем/выключаем xray и видим список инструкций Открываем дизассемблер и видим, что в eax у нас лежит глобальная переменная указывающая на GlowMatrix Теперь надо узнать индекс предметов, т.к у каждого предмета будет уникальный индекс отличный от ID игрока. Я использую IDA, но это можно и в CE сделать. Красным выделена наша инструкция, зеленым откуда берется индекс Нас интересует ebx+0xA320, чтобы сильно не растягивать статью, сразу скажу, что в ebx у нас хранится адрес на клиентскую структуру т.е DT_CSPlayer, это значит, что мы можем использовать EntityList для получения уникального GlowIndex т.е вообще ничего делать не надо. Это будет выглядеть примерно так: int CSPlayer::GetGlowIndex(int index) { return memory->Read<int>(Client_dll + EntityList + index * 0x10 + 0xA320); } Теперь открываем Reclass подключаем к кс указывая глобальную переменную которую нашли выше, по смещению 0x0 ставим тип указатель раскрываем и восстанавливаем структуру. Вот в принципе и все, теперь эту структуру можно портировать в чит жахнуть цикл индексов игроков, предметов да всего чего угодно и подсвечивать их. Если все правильно нашли, то все будет работать как в онлайне, так и в офлайне, да и вообще такой способ должен подойти для всех новых игры в которых стало популярно использовать Glow. В видео я использовал нулевое смещение в структуре GlowMatrix, хотя по правильному надо было использовать 0x10. Пример на сервере, после всех поисков
  2. Немного сигнатур и начнем. Патч отключающий консоль счетчик использования чит-кодов и флаг читера, чит-коды включать только через глобальные переменные или вызов внутри игровых функций: \x74\x25\x8D\x44\x24\x14\x50\x8D\x44\x24\x24\x50\x8B\x46\x08\x50\x8B\x06\x53\x50\x8B\x45\x10\x50\x57\x51\xFF\xD2\x83\xC4\x20\x84\xC0\x0F\x85\x00\x00\x00\x00\x5F\x5E\x32\xC0\x5B xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx????xxxxx Сигнатура бессмертия и бесконечной стамины в ближайшем вызове будет глобальная переменная(выключатель): \x84\xC0\x0F\x94\xC0\x0F\xB6\xC8\x51\xE8\x00\x00\x00\x00\x83\xC4\x04\xE8\x00\x00\x00\x00\x84\xC0\xB8\x00\x00\x00\x00\x75\x05\xB8\x00\x00\x00\x00\x8B\x15\x00\x00\x00\x00\x50\x68\x00\x00\x00\x00\x52\xE8\x00\x00\x00\x00\x83\xC4\x0C\xB0\x01\xC3 xxxxxxxxxx????xxxx????xxx????xxx????xx????xx????xx????xxxxxx Чит-коды переводятся в HEX и вызываются 3-м аргументом по процедуре, которая находится \xE8\x00\x00\x00\x00\x84\xC0\x74\x1C\x8B\x6C\x24\x28\x03\x5C\x24\x14\x89\x5C\x24\x18\x3B\x5F\x1C\x0F\x82\x00\x00\x00\x00\xEB\x0A\x89\x5F\x1C\xEB\x07\xC6\x44\x24\x00\x00\x33\xDB x????xxxxxxxxxxxxxxxxxxxxx????xxxxxxxxxx??xx По символьное считывание введенной строки: \x8B\x09\x66\x8B\x14\x41\x66\x89\x56\x08\x89\x46\x04\x8B\x4E\x14\x85\xC9\x7C\x76\x8B\x56\x10\x3B\x4A\x04\x73\x6E\x8B\x12\x8D\x0C\x49\x3B\x04\x8A\x53\x8D\x1C\x8A\x73\x2C\x8B\x3E\x85\xFF\x74\x1A\x83\x07\xFF\x75\x15\x8B\xCF\xE8\x00\x00\x00\x00\x8B\x0D\x00\x00\x00\x00\x8B\x01\x8B\x50\x30\x57\xFF\xD2\x5B\x5F\xC7\x06\x00\x00\x00\x00\x8B\xC6\x5E\xC3\x8B\x43\x08\x85\xC0\x74\x02\xFF\x00\x8B\x3E\x85\xFF\x74\x1A\x83\x07\xFF\x75\x15 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx????xx????xxxxxxxxxxxx????xxxxxxxxxxxxxxxxxxxxxxxx Процедура которой передается строка по символьно, для проверки на валидность, если все нормально возвращает 0, если нет 1,2,3,4,5,6 \x53\x56\x8B\x74\x24\x10\x33\xDB\x83\xFE\xFF\x74\x34\x33\xD2\x57\x85\xF6\x7E\x25\x8B\x7C\x24\x10\xEB\x06\x8D\x9B\x00\x00\x00\x00\x0F\xB7\x04\x57\x66\x85\xC0\x74\x10\x0F\xB7\xC0\x50\xE8\x00\x00\x00\x00\x42\x03\xD8\x3B\xD6\x7C\xE7\x5F\x5E\x8B\xC3\x5B\xC2\x08\x00\x8B\x54\x24\x0C\x0F\xB7\x02\x33\xC9\x66\x85\xC0\x74\x65\x0F\xB7\xC0\x0F\xB7\xC0\x83\xF8\x7F\x77\x07\xB8\x00\x00\x00\x00\xEB\x47\x3D\x00\x00\x00\x00\x77\x07\xB8\x00\x00\x00\x00\xEB\x39\x3D\x00\x00\x00\x00\x77\x07\xB8\x00\x00\x00\x00\xEB\x2B\x3D\x00\x00\x00\x00\x77\x07\xB8\x00\x00\x00\x00\xEB\x1D\x3D\x00\x00\x00\x00\x77\x07\xB8\x00\x00\x00\x00\xEB\x0F\xBE\x00\x00\x00\x00\x3B\xF0\x1B\xC0\x83\xE0\xFA\x83\xC0\x06\x41\x03\xD8\x0F\xB7\x04\x4A\x66\x85\xC0\x75\x9E\x5E\x8B\xC3\x5B\xC2\x08\x00 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx????xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx????xxx????xxx????xxx????xxx????xxx????xxx????xxx????xxx????xxx????xxxxxxxxxxxxxxxxxxxxxxxxxxxxx Процедура, переводящая строку в hex: \x8B\x44\x24\x0C\x56\x83\xF8\x7F\x77\x13\x8B\x4C\x24\x0C\x8B\x11\x8B\x74\x24\x08\x88\x04\x16\xFF\x01\x5E\xC2\x0C\x00\x57\x3D\x00\x00\x00\x00\x77\x27\x8B\x4C\x24\x10\x8B\x39\x8B\x74\x24\x0C\x8B\xD0\xC1\xEA\x06\x80\xCA\xC0\x88\x14\x3E\xFF\x01\x8B\x11\x24\x3F\x0C\x80\x88\x04\x32\xFF\x01\x5F\x5E\xC2\x0C\x00\x3D\x00\x00\x00\x00\x77\x1A\x8B\x4C\x24\x10\x8B\x39\x8B\x74\x24\x0C\x8B\xD0\xC1\xEA\x0C\x80\xCA\xE0\x88\x14\x3E\xE9\x00\x00\x00\x00 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx????xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx????xxxxxxxxxxxxxxxxxxxxxxxx???? Теперь точно все, осталось допилить трейнер. В общем опишу как работает ввод команд, для начала после ввода строка кладется в стек, дальше по символьно проверяется, чтобы все символы подходили под кодировку, не было мусора или лишних символов, которые могли бы все поломать, если такие символы есть, то процедура возвращается 1,2,3,4,5,6 и 0 если все хорошо. Вот так: Дальше, после этой проверки символы попадают в процедуру, которая переводит их в HEX(или шифрует). Примерно так: На выходе получаем следующее: tgm — 0x13C бессмертие и стамина psb — 0x14D заклинания tcl — 0x113 noclip tmm 1 — 0x11F6 открывает все маркеры на карте мира (с возможностью перемещения) tmm 0 — 0x11F6 скрывает все маркеры на карте мира inv — 0x19E показать содержимое инвентаря (список) выбранного объекта. setownership — 0x1117 получить права собственности на указанный предм unlock — 0x1073 открыть замок указанного объекта. Даже если какой-либо команды нет, эта процедура всегда будет переводить/шифровать строку, все это после проходит кучу кода и передается 3-м. if ( !Execute_CVAR(v9, a2, HEX_CVAR, v13, &v17, v18, &v22, v19, 0, 0) ) В ней уже есть проверка, если переведенное значение выходит за пределы условия получаем ошибку, которая сообщает нам о том, что нет такой консольной команды и игра не можем её выполнить. Окей, прошли все проверки выполняем код который получает адрес структуры и положение команды в ней по переведенному значению в которой находятся все консольные команды с их описанием. Делается это примерно так(для примера взял команду tgm которая равна 0x13C): result = 0; if ( (0x13C - 0x100) > 0x139 ) { if ( (0x13C - 0x1000) <= 0x2DD ) result = 8 * (5 * 0x13C - 0x5000) + 0x124E880; } else { result = 8 * (5 * 0x13C - 0x500) + 0x124B748; } return result; Ах, да эти адреса которые прибавляются к значению после умножения это начало сегментов, не знаю как это работает, но работает. И после всего этого выполняется процедура которая изменяет 2 байта и делает гг бессмертным изменяя значение глобальной переменной с 0 на 256.
  3. Важно игра должна использовать RTTI, иначе данный способ не будет работать. Раз теперь взломом не занимаюсь, то начал разбираться в некоторых тонкостях, которые мне были непонятны, т.к. ни уроков, ни статей по этому вопросу нет, то приходится разбираться самому. Сегодня расскажу о том, как использовать RTTI, получая не просто какие-то значения уже из готовых функций, а целые структуры класса. Смысл этого способа ускорить нахождение выбранной структуры и отличается он от обычного поиска значений, во-первых, он быстрый, а как все знаю время очень ценное, во-вторых нам Cheat Engine понадобится, чтобы найти указатель на структуру класса, никаких подключений отладчика не будет, что, хорошо учитывая защиту многих игр. Из минусов данного способа он может быть сложен для новичков в понимании как это работает. Подопытным у нас выступает Left 4 Dead 2. Откроем IDA закинем файл и дождемся окончания анализа, найдем адрес начала модуля client.dll и переместим сегменты в IDA по адресу начала client.dll указав в настройках image base , запустим плагин Class Informer и готово. Теперь в окне Class Informer выбираем необходимый класс, например m_Local подкласс C_BasePlayer, если у вашего класса не одна копия выбирайте ту у которой больше методов. Копируем адрес начала класса, переходим в Cheat Engine и ищем этот адрес, в найденных результатах выбираем самый первый адрес, это у нас будет указатель на структуру класса. Теперь найденный адрес открываем в ReClass или в любой другой программе, которая работает со структурами, я её восстановил чтобы было видно, что это именно тот класс. Вот и все, очень быстро относительно поиска значений. По видео можно понять на сколько это быстрее, чем поиск. На примере поиска всеми любимых LocalPlayer и EntityBase, которые так сложно найти и легко потерять.
  4. Лучше бы написал сообщений по делу, вместо этого бесполезного текста, так быстрее бы помогли..
  5. Да, пишешь свой загрузчик, который снимает защиту и запускает приложение, а после уже можно будет инжектить.чит хм, вроде бы с мануал мапингом не должно возникать проблем.
  6. Жизнь без читов - возможна ли?

    странный у вас город, у нас полно видеокарт.
  7. Euro Truck Simulator 2

    That looks stupid, if there were explosions and destruction, screaming it would look fun.
  8. Euro Truck Simulator 2

    У него похоже собственный чит по видео если судить.
  9. Ищи с помощью GameCIH и прочими инструментами, сервер CE весьма не стабилен был когда им последний раз пользовался
  10. читаешь адрес получаешь указатель на значение, пишешь в этот указатель и значение меняется. ReadProcessMemory(handle, (LPVOID)0x001B4E84, &ptrBiffer, sizeof(ptrBiffer), 0); WriteProcessMemory(handle, (LPVOID)ptrBiffer, &newValue, sizeof(newValue), 0);
  11. Найди другой указатель, который бы не отваливался.
  12. Нашли мы значит значение шаров в игре ballz используя game player, а дальше все как в CE ставим бряк и получаем нужные нам инструкции. Переходим в IDA, пишем адрес в Hex View и по адресу видим такую картину. ну, а дальше вешаем бряк на запись по этому значению и подбираем бонус. Чтобы повесить бряк тыкаем во вкладку Debugger -> Tracing -> Add write trace После срабатывания бряка видим подписанную функцию, которая говорит нам, что она добавляет шары. Для патчей используйте этот плагин, это удобней, но я про него забыл. http://www.keystone-engine.org/download/ (Python module for Windows - Binaries) + http://www.keystone-engine.org/keypatch/ Добавим к примеру 250 шаров за бонус, вместо одного.(плохая идея) И тадааам Стек трейс прекрасен