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

keng

Ветераны
  • Постов

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

  • Посещение

  • Победитель дней

    55

Весь контент keng

  1. Лёгкая модификация, по сути, это одно и то же, что и переделка логики и алгоритмов игры. Опять же, из второго пункта, "изменение параметров объектов" - это тоже лёгкая модификаци. Изменил параметр "скорость" объекта "игрок" - вот тебе и лёгкая модификация (супер скорость, ага). Сложновато тут на уровни делить.
  2. Готовых чисто по иде нету, тем более на русском. Есть с использованием иды, и они относятся не ко взлому игр. Я оттуда дизассемблер использую - очень уж удобный, но могу заодно и про отладчик рассказать, там тоже всё просто.
  3. Я планирую, но прямо сейчас со временем туговато.
  4. А-а-а... Я вроде даже объяснял, [вот тут].
  5. Тут самое сложное будет - отловить место, где создаётся ракета и функцию её движения. По сути, обычно строится просто линия, вдоль которой по циклу ракета меняет свои координаты. Изначально эта линия берётся из свойств камеры (от лица игрока), т.е. от неё вдаль, пока не упрёмся в край мира или пока ракета не умрёт через какое-то время самостоятельно. А нужно будет найти список отреспавнившихся врагов (живых на данынй момент) и в цикле направлять ракету от игрока к координатам врага, по такой же прямой. Сложно будет вычислить, есть ли этот враг в зоне прямой видимости, но алгоритм тоже есть.
  6. Эээ... Ты поподробней распиши. Мне, например, не сообразить, какие опции СЕ могут быть "вредными".
  7. Да пустяки - рад стараться! По коду тоже отыскать можно, но это бывает ещё дольше чем через отладчик, да и всегда в пределах одного исполняемого файла, т.е. если часть кода "генерации" указателя подгружается из внешней dll, то найти через код нифига не получится - только функцию, а-ля LoadDll(), возвращающую указатель на базовый адрес загруженной dll, только вот возвращать она будет только после исполнения, чего в дизассемблере не получишь.
  8. Привет! Поздравляю, что всё получилось - ты довольно долго мучался. Выложи заодно исходные скрипты трейнера (таблицу Cheat Engine), мы посмотрим и оценим - по скриншоту судить трудновато.
  9. Привет! Всё так же, как и в туториале к Cheat Engine - правой кнопкой на адресе - "Find what accesses this address", отладчик выдаст несколько инструкций, на каждой клик и кнопку "More information", там будет показан вероятный адрес указателя и в найденной функции - смещение ("[eax+12345]", eax - адрес, 12345 - смещение), делаешь новый поиск типа hex, вбиваешь там адрес указателя из окошка (без смещения) - он найдёт адреса. Это будут указатели 1-го уровня. Адрес чёрного цвета - значит динамический и надо искать ещё, зелёный - значит статический и меняться вряд ли будет. Добавляешь в таблицу эти адреса, ставя галочку "Pointer" и вбивая в правое окошко смещение из предыдущего этапа (чтобы было типа "Найденный адрес + 12345", дальше повторяешь эти шаги для добавленных указателей до тех пор, пока не найдёшь статический. Лучше этим пользоваться тогда, когда не работает автоматический поиск - ибо достаточно долго и муторно - напутать легко.
  10. Я расковыривал Crimsonland (там тоже есть оружие с самонаводащимися снарядами) и Serious Sam: The Second Encounter (там попроще - есть отладочная информация и названия функций). Надо будет отыскать код, выписывал куда-то.
  11. Если я - автор темы и сижу в ней, то в разметке уезжают какие-то менюшки: Последний гуглохром, Win7.
  12. подобной идеи, тут тоже, по сути, работа с координатами объекта.
  13. Большинство аим-ботов для FPS работают в 2D, а я говорю о 3D. :] И классический аимбот подразумевает смещение перекрестия прицела в сторону врага (построение изначального вектора идёт от камеры игрока к врагу по прямой), а я же говорю об изменении этого вектора в риалтайме, независимо от того куда игрок смотрит. Проще говоря, где-то в прямой видимости (без препятствий в виде стен\ящиков) есть враг, игрок стреляет куда-то, а пулька всё равно летит во врага. Аимбот в этом случае вклинивается в рендер опенжл, пересчитывает 3D-координаты врагов относительно 2D-плоскости камеры игрока и двигает туда прицел, а затем стреляет. Об облёте препятствий я не говорю, но это в принципе тоже можно реализовать. Понятна разница?
  14. 6 просмотров - и ни одной задумки? Груууустно...
  15. Итак, немножно экскурса! Попалалась мне когда-то на глаза такая игра, как Assassin's Creed. Там была одна консольная примочка, а именно - система наведения при броске метательных ножей. Зажимаем кнопку, выбираем врага, на нём появляется индикатор, кнопку отпускаем - voila - ножи летят в него. По сути, самонаведение. Задача состоит в следующем. В современных играх преобладает объектная ориентация. Суть - каждая горстка пикселей - это объект, со своей собственной структурой. Игрок, враги, ящики, снаряды, словом, всё. У каждого игрового объекта есть свои игровые координаты, чаще всего - по трём осям. Каждый объект, опять же, умеет "рождаться" и "умирать" в игровом мире. Алгоритм задачи простой. Берём любую игру, использующую объектную модель. Расковыриваем функцию стрельбы. Там будет нечто вроде: -Нажали кнопку "атаковать"? -Создали объект "снаряд" текущего оружия -Присвоили ему координаты игрока -Построили вектор относительно игрового мира от игрока к перекрестию прицела -Направили снаряд вдоль вектора, придали скорость\ускорение -Проиграли звук выстрела\анимацию Соответственно, у снаряда появляется свой ID, тип снаряда, вектор, скорость и координаты. Вклиниваемся в эту функцию и слегка модифицируем, а именно - считаем координаты ближайшего (любого видимого) врага и перенаправляем вектор выпущенного снаряда в него, а не в перекрестие прицела. Кто реализует - тому пирожок, само собой. У меня почти получилось на примере Serious Sam II и Crimsonland, да времени довести до ума нет. Кто-нибудь копал в этом направлении, или я один такой извращенец?
  16. Попробуй найти структуру игрока (через здоровье, например - нашёл его, посморел что рядом в памяти лежит - могут быть и патроны), попробуй искать просто по "изменилось\не изменилось" с типом "все". Опять же, игра может шифровать свой код - бывает и такое, проверь наличие защит\пакеров\крипторов.
  17. №26, можно трейнер олей расковырять - посмотреть, какие библиотеки цепляет и что он станет делать, если CE на компьютере не обнаружит. Займусь, кстати, самому интересно.
  18. Мой косяк, согласен. Допишу вторую часть, там покажу как библиотеки подгружать. При написании наивно верил в то, что большинство игр стандартные библиотеки и так цепляют, да и функции мы смотрели через Cheat Engine, а там только список уже подгруженных. Инъекция длл в чужой процесс - тема отдельной статьи, да и не одной.
  19. Date: 30.11.2011 Author: keng Tools needed: Cheat Engine 6.1, Microsoft Notepad Не знаю точно, куда запостить, если что - пните в нужную сторону. Итак, идея проста и избита, но по ней статьи я не нашёл. Задача: Вызвать API-фунцию из самой игры (или приложения). Как нам всем хорошо известно, API-функция - это: 1. Читаем статью на вики. Вдумчиво. 2. Понимаем, что это, говоря по-человечески, функция (а точнее, их набор), при помощи которой все Windows-приложения (и игры в том числе) контактируют между собой и взаимодействуют с системой. Простые примеры: 1. CreateFile. Создаёт файл. Удобно? Да. И из любой программы можно вызвать - создастся файл. 2. MessageBox. Показывает окошко с некоторой информацией и кнопками "Ok", "Cancel" и так далее, на выбор. Позволяет добиться какой-то реакции от пользователя. Тоже крутая штука. В общем, прелесть в том, что эти функции стандартизированы, вызываются одинаково и используются в 100% приложений и игр. Тэк-с, теорией немного пропитались, пойдём дальше. Тренироваться будем на всеми любимом Блокноте. Открываем блокнот (Пуск -> Выполнить -> notepad.exe): Открываем Cheat Engine (надеюсь, не нужно показывать, как она выглядит). Присоединяемся к процессу notepad.exe и начинаем думать. В программе есть меню. В меню "Файл" есть пункт "Сохранить как", который вызывает диалоговое окошко, позволяющее сохранить (!) текущий документ. В выполнение этой-то функции мы и внедрим свой замечательный код. Делаем поиск текстового значения, вот так: Находим один-единственный адрес, хранящий эту текстовую строку. Добавляем его в таблицу адресов, жмём правой кнопкой и выбираем опцию "Find out what accessess this address" (Найти, что обращается к этому адресу). Выскакивает окошко отладчика, возвращаемся в блокнот и пробуем сохранить наш документ. В отладчике видим примерно вот такую картину: Первая функция вызвалась обратилась к нашему адресу аж 8 раз, а вот остальные - по одному. Выбираем одну из них (на свой вкус, я взял вторую), жмём кнопку "Show disassembler" (Показать дизассемблер). Открывается окно дизассемблера, в нём ничего не трогаем и идём в меню Tools - Auto Assembler (Инструменты - Автоассемблер), или жмём Ctrl+A. В окне автоассемблера набиваем следующий код: Ага, как же. Ещё немного теории! В ассемблере API-функции вызываются вот таким вот образом: push arg2 push arg1 push arg0 call func Командами push мы запихиваем в стек аргументы функции (если нужны), так как это стек - запихиваем их с конца (справа налево), после чего командой call func вызываем функцию, где func - имя или адрес (в 16-й системе счисления, ибо компьютер - глуп и не понимает привычных нам арабских цифр). Попробуем вызвать функцию Beep. Кликом по названию идём в MSDN и читаем о ней статью, а кто не знает английского или не любит читать (), для тех поясняю - эта функция заставляет встроенный в компьютер динамик пищать, а в качестве аргументов принимает частоту и длительность сигнала. Итак, нам остаётся выяснить адрес функции, чтобы вызвать её из блокнота, так как все эти функции хранятся во внешних dll-библиотеках и адреса вызова для разных программ могут быть разные, ибо библиотеки эти подгружаются динамически. Идём в отладчик и выбираем меню View - Enumerate DLL's and Symbols (Вид - Пронумеровать ДЛЛ'ки и Символы). Получаем вот такое окно: Жмём правой кнопкой - Find (Найти) - вводим слово Beep и в выделенной строчке получаем адрес вызова: Возвращаемся в Авто ассемблер и нашему коду! В меню выбираем Template - Code Injection (Шаблон - Инъекция кода) и пишем вот так: alloc(newmem,2048) //2kb should be enough label(returnhere) label(originalcode) label(exit) newmem: //this is allocated memory, you have read,write,execute access //place your code here originalcode: mov eax,[esi+ecx*4-1C] mov [edi+ecx*4-1C],eax //наш код pushad push 10 push ff call 75A76DF3 popad exit: jmp returnhere "msvcrt.dll"+9CCA: jmp newmem nop nop nop returnhere: Разберу поподробней то, что мы написали. Вот этот кусочек: pushad push 10 push ff call 75A76DF3 popad Pushad - сохраняет текущие значения всех регистров, чтобы мы чего лишнего не поломали нашим хитрым кодом. push 10 и push ff - толкаем в стек длительность (16 мсек) и частоту (255 Гц) в качестве аргументов нашей функции. Напомню прототип функции: Beep(Frequency, Duration) где Frequency - это частота, а Duration - это длительность. Командой call мы вызваем, собственно, нашу пищалку-пищалочку, а затем popad-ом возвращаем значения регистров на свои места. Всё дописали, перепроверили, жмём Execute (Выполнить), пробуем сохранить файл - слышим пищание. Круто! ...но зачем это может быть нужно? Если почитать справку по WinAPI-функциям, можно найти немало полезных. Например, MessageBox, который можно вызывать при определённом событии. Скажем, убили нашего игрока - а нам показали значение какого-то адреса, сколько он прожил или ещё что-нибудь полезное. Такой импровизированный отладчик, ага. На этом всё. UP: Прилепил к шапке статью в виде PDF: WinApiInjection_by_keng.zip
  20. Это один из аргументов WinAPI-функции OpenProcess. Конкретно, PROCESS_ALL_ACCESS, устанавливает то, с какими правами один процесс получает доступ к другому. Компьютер всё равно не понимает букв (для него существуют только биты - байты - два байта - четыре байта), но вот человеку проще запомнить слова, чем цифры. Можно было записать и как: Openprocess(PROCESS_ALL_ACCESS, pHandle, pId) но перед этим объявить константу вида PROCESS_ALL_ACCESS=0x1F0FF. Подробнее про функцию - вот тут.
  21. За компьютером ~ с трёх лет. Первое воспоминание - отец показывал игру Aladdin. Первый ПК - старенький ноутбук 486DX с 16 мб оперативки на борту, под которым крутилась DOS и Windows 3.11. Часами сидел, изучал справку ОС и рисовал диаграммы в MS Excel. =) Время от времени это разбавлялось играми (Dangerous Dave I\II), DooM I\II (у матери на работе), там же был и выход в интернет. Да, ещё был Quick Basic, Visual Basic, Delphi, C и Logo. В этом самом интернете я наткнулся на MTC и Cheat-o-Matic, которые скачал, скачал всю, какую смог найти, документацию (а гугл я очень люблю и уважаю и по сей день), изучил всё от корки до корки. Тогда мне было около 10-12 лет, ходил на курсы С (писал там "танчики" и клон "марио"), попутно находил первые адреса. Примерно в то же время познакомился с ArtMoney, а затем всё это дело слегка забросил. ...до 10-го класса, где мне вдруг захотелось узнать, как пишут кейгены. В результате - SoftIce, IDA, Olly, ночи в отладчике. Тогда же наткнулся на сайт team-x, начитался статей, понял, что мне эта тема всё ещё интересна. После поступления всё опять немного заглохло, но где-то год назад я понял, что русскоязычных ресурсов, чтобы было всё просто, понятно, в видео и на тарелочке - нету. И решил исправить это положение, начав вести блог. Вот, как-то так. =)
  22. Если запускаешь игру D3D в оконном режиме - принудительно удерживает курсор в пределах этого окна. В StarCraft II есть такая же опция, встроенная - чтобы в пылу сражения курсор случайно на рабочий стол не улетел.
×
×
  • Создать...

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

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