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

Лидеры


Популярный контент

Показан контент с высокой репутацией за 03/19/19 во всех областях

  1. 4 балла
    Случилось мне столкнуться с ситуацией, что есть "лёгкий" способ сделать очень интересные изменения в процессе, просто подменив URL адрес запроса, или ответ, получив при этом совсем другой результат, так появилась эта программа 🖖. А вот и описание.. Программа URL drafter Основные функции: Отслеживание URL запросов программы: Позволяет отслеживать и логировать все передаваемые программой URL запросы. Это позволяет получить прямые ссылки на скачивание или просмотр файлов / информации которая запрашивается процессом. Например - htmp файл с параметрами, или 3ds модель, что угодно. Создание фильтров подмены: Позволяет создать фильтр, указав в нём полный запрос от программы, управлять его состоянием, сохранять файлы со списком фильтров, загружать эти файлы. Таким образом можно сделать много файлов для разных функций и загружать их когда нужно. Фильтр позволяет заменить URL запрос на свой, таким образом можно подменить файл, или что либо ещё необходимое процессу. Файл можно положить на свой локальный сервер (localhost), или туда куда удобно. Нужно учитывать что не все файлообменники отдадут файл по прямому запросу от не авторизованного пользователя (процесса). Побочные функции: Просмотр всех процессов в системе - их id и имени. Просмотр загруженных в процесс модулей. Команды программы можно посмотреть введя "help". Все команды могут принимать аргументы сразу, или по порядку. Например ввести "connect 3442" или сначала "connect" а потом "3442" это одно и тоже. Программа создаёт файлы в директории которой лежит, если не будет указан полный путь, потому лучше поместить файл в папку. Версия 32 бит: URLdrafter x32.exe Создание фильтра: *Удобнее создавать фильтры через файл Для создания фильтра нужно прописать "fcreate (название фильтра) (номер активности 1/0) (что найти) (на что заменить)" Название - может быть абсолютно любым. Номер активности - включён ли фильтр, позже можно изменить командой "fenable" Что найти - полная URL ссылка, без http, в таком виде как выводит программа. На что заменить - полная URL ссылка без http которой будет заменена найденная ссылка Пример: В файле фильтр выглядит вот так: ,1,WeaponModel,localhost/map.eax,abz/online.html, фильтры разделяются пробелом или переходом на новую строку, запятые обязательны в начале и в конце. *Фильтры работают только если включен перехват URl . Краткое руководство, если что то не понятно: Примеры использования фильтров на разных приложениях (НЕ будет пополняться): Небольшое видео работы: *Это консольное приложение написанное на C++. *Пока доступна только 32 битная версия, соответственно открывать 64 битные процессы ей не получится. 64 битная НЕ выйдет в ближайшее время. *Распространение разрешено с указанием данного форума как источника и авторства (хотя в программе всё указано).
  2. 3 балла
    Решил тут сделать кастомные пресеты для подсветки, но в софте производителя такой возможности не было, были стандартные, ограниченные. Как же я не люблю ограничения, ну что ж...приступим к исследованию. Для начала необходимо понять как софт общается с клавиатурой, для этого запускаем Wireshark. При изменении яркости, происходит отправка пакета по USB. Отлично, это уже что-то. Выполним еще пару действий, чтобы сделать шаблон для данных. //Стандартные настройки : 11 ff 0c 3a 00 01 ff 00 00 02 00 00 00 00 00 00 00 00 00 00 //Изменение яркости : 11 ff 0c 3a 00 01 f5 00 00 02 00 00 00 00 00 00 00 00 00 00 //Включение пресета : 11 ff 0c 3a 00 02 ff 00 00 10 40 00 64 00 00 00 00 00 00 00 //Изменение скорости пресета: 11 ff 0c 3a 00 02 ff 00 00 05 c7 00 64 00 00 00 00 00 00 00 Открываем 010 Editor и делаем шаблон. Шаблон: Шаблон можно будет использовать для программирования клавиатуры. Для программирования будем обращаться по имени HID устройства, чтобы с помощью CreateFile получить хендл и общаться с клавиатурой. Не самый лучший способ, но быстрый, хотя я бы выбрал хуки. Все есть файл. (ну почти) Посмотрим под отладчиком, что говорит софт логитека клавиатуре. Ставим бряк на WriteFile и бдыщ. Дальше остается использовать CreateFile, Read/WriteFile, чтобы сделать основу для собственных пресетов. Один из плюсов всего этого, это уменьшение размера программы с 200 мб до 10кб. Как раз вот-вот уже выходные, в планах привязать изменение подсветки клавиатуры в зависимости от готовности кофе в кофеварке. А до следующей статьи, можно будет разобрать как расширить функционал встроенных скриптов в клавиатуре и можно ли, туда прописать что-то действительно полезное, и что может пойти не так. И разобрать, за что отвечают последние 4 байта.
  3. 2 балла
    Обход функции, снятия скринов античитами. 23/05/2019 Undetected Поддержка: x32 / x64 Win7+ Запускать можно как до, так и после запуска игры Запустить файл Играть В зависимости от античита, скрины не будут сниматься или будут чистые ENJOY
  4. 2 балла

    Версия Steam

    12 раз скачали

    Использование: Запускаем сначала игру, а в главном меню игры (либо в уже начатой игре) запускаем трейнер. Переключение интерфейса трейнера, а (то есть языка) на правую клавишу мыши по панели трейнера.
  5. 2 балла

    Версия Steam: 1.3.140380

    12 раз скачали

    Использование: Запускаем сначала игру, а в главном меню игры (либо в уже начатой игре) запускаем трейнер. Функции: 1. > Бессмертие. 2. > Супер прыжок. 3. > Бесконечный полет во время прыжка (на пробел). 4. > Умножение очков на 10. 5. > Заморозить время.
  6. 2 балла

    Версия 1.0.0

    5 раз скачали

    После активации позволяет рассчитать силу выстрела которая нужна для попадания по точке указанной пользователем. Для активации просто запустить exe файл, навести мышку на свой танк, нажать F12, навести на танк врага, нажать левую кнопку мышки, в появившееся окно вписать угол поворота башни у танка, в следующее появившееся окно вписать ветер. Если ветра нету то вписать 0, если ветер дует против выстрела, то писать значение ветра с минусом, если по выстрелу, то с плюсом или просто значение. Работает оно везде, можно даже на рабочем столе рассчитать силу выстрела от одного ярлыка к другому. Для расчёта используются координаты курсора Выключить можно найдя иконку в меню активных значков, нажав по ней правой кнопкой мышки и выбрав "Exit" Файл это запакованный в exe скрипт ahk (AutoHotkey). Видео демонстрации работы:
  7. 2 балла

    Версия 1.012

    10 раз скачали

    Запускаем сначала игру.. потом трейнер. Клавиши в трейнере парные.. Зажимаем insert и жмем клавиши указанные на панели трейнера. Если игра лицензия, то заменяет dll в папке античита.. Описание функций на панели трейнера... Переключения языка.. правой клавишей мыши по панели трейнера.
  8. 2 балла
    о твоей мотивации программирования Тут все достаточно просто, раньше я играл в Counter-Strike: Source и меня достали читеры, вот решил сделать свой чит и тут понеслось. о твоем стаже программирования Стаж С++ на данный момент уже 7-й год, большая часть проектов это специфичные читы(в которых пробую что-то новое и полезное, без различных свистоперделок), пара проектов работы с сетями (прокси серверы), дампер, инжектор, RTTI парсер, нейронка для аимбота, и вот новый проект универсальный фаззер для восстановления SDK для любых игр. Python 2 года, но на нем я ничего сложного не делаю, так простой язык для автоматизации мелких действий, например работы с дизассемблерами и отладчиками, поднятии прокси серверов с возможностью парсинга и интерпретацией данных пакетов в структуры. Ну и по мелочи Java, Pascal, VB, Javascript, Php, Ruby, Go, HTML/CSS, Lua, Rust, Perl, C#, SQL. какие книги по программированию ты изучал По С++: WINAPI Рихтера, Бьерн Страуструп. Язык программирования С++ и еще можно почитать Полный справочник по C++ 4-е издание. Герберт Шилдт По Python: Gray Hat Python Justin Seitz и Gray Hat Hacking 3nd какие книги показались сложными, какие бесполезными От таких сразу избавляюсь, поэтому сходу вспомнить не могу. какие книги ты бы посоветовал изучать, и в каком порядке У меня есть своя библиотека, я даже где-то на форуме её скидывал, там собраны все необходимые книги, для того чтобы получить полное понимание устройства работы программ, которые можно изучать в любом порядке. какой язык программирования тебе нравится больше и почему Вообще не люблю программировать. Но если по языкам, то без сомнений это C++, приятный синтаксис и универсальный язык для любых задач. какой язык программирования для тебя самый сложный Эзотерические ЯП — реально сложно. отзыв об учреждении в котором обучался, об объеме и пользе знаний, которые там приобрел Пустая трата времени, объем и польза по нулям. Поэтому и в университет не пошел, во-первых университетов со специальностью связанной с информационной безопасностью можно на пальцах одной руки пересчитать, во-вторых не уверен в том, что мне могу дать какие-то новые знания, а сидеть 4-5 лет, чтобы мне рассасывали, те знания которые у меня есть это 1. Бесполезно. 2. Дорого. 3. Слишком много времени уйдет в пустую, даже относительно заочного обучения. Да и с появлением интернета, весь материал изучаемый в университетах есть в сети, а единственное, что мешает самообразованию это лень.
  9. 2 балла
    В общем начал разрабатывать игровой фазер, предназначенный для восстановления классов и смещений для не виртуальных функций. На данный момент я представляю это как отдельный проект, возможно написанный с нуля, но думаю использовать готовые дизассемблерные библиотеки, чтобы сэкономить время, который будет представлять из себя универсальный дампер SDK для любых игр. Хотя использовать x64dbg для подобного будет очень даже уместно т.к. функциональное ядро будет готово. На первом этапе вешаем бряк на инструкцию. Получаем стек вызовов и восстанавливаем путь от 1-й функции вызванной клиентом до последней в которой находимся мы. На втором этапе будет создаваться каркас из классов, функций и ответвлений, я думаю воспользоваться перекрестными ссылками. На третьем этапе начнется интерпретация и парсинг инструкций основного древа без ответвлений кода, чтобы восстановить используемые в коде смещения и типы данных, отслеживая поведение инструкций. На четвертом этапе будет проводиться тоже самое, но только для ответвлений имея на руках уже найденные адреса и значения, я думаю это эффективней работы с ответвлениями начиная с нуля. На пятом этапе представлять в графическом виде все древо. На шестом генерировать таблицу рекласса. Красным веделен четвертый этап, черным третий. Основная проблема в том, что мы не знаем точный размер структур. И пока я не представляю, как можно получить размер динамически выделяемой памяти. Как вариант, пятым этапом вешать бряки на функции освобождающие память, фильтруя по всем найденным начальным адресам структур и после убивать процесс, чтобы перехватить размер. А после обрезать структуры по размеру, но концепция "ищи, чтобы удалить" мне не очень нравится. Плюсы данного проекта в том, что ничего не надо делать самому(пфф, что-то там руками искать в 2019), а так же можно прилепить на один из этапов "рекурсивное" восстановление, т.е начинаешь с инструкции патрон и чем больше смещений восстановится, тем к большему числу классов получаешь доступ для восстановления и так будет продолжаться, пока файл не восстановится полностью. (нет это не нейронная сеть, хотя кто знает)
  10. 2 балла
    Выглядит достаточно ида-подобно, кроссплатформенный инструмент использующий Qt5 и конечно же опенсорсный. Можно оставить в закладках и следить за развитием. 2019 можно назвать годом интерактивных дизассемблеров и декомпиляторов, много новых игроков появляется, даже немного удивительно. https://redasm.io
  11. 2 балла
    Хех... А теперь посмотрим на цены. 1879 USD только за дизассемблер + x64,x86 декомпилятор (2629 *2 USD) = 7137 USD ( ~470.000 | 468529,78 рублей по курсу на 30.03.2019) И это лишь минимальный набор для реверса. Пожалуй я для себя выбрал инструмент для реверса.
  12. 2 балла
    The Hobbit Просмотр файла Использование: Запускаем сначала игру, а в главное меню игры (либо в уже начатой игре) запускаем трейнер. Функции: 1. > Бессмертие. 2. > Бесконечная энергия. 3. > Бесконечные деньги. 4. > Бесконечные камни. 5. > Бесконечное время способностей камней. 6. > Бесконечное время кольца. 7. > Быстрый взлом сундуков. 8. > Нет смерти от падения с большой высоты. 9. > Супер скорость. 10. > Супер прыжок. 11. > Мега прыжок. Если супер прыжка мало - работает в паре с супер прыжком. 12. > Бесконечная жизнь медведя. 13. > Заморозить врагов. 14. > Убийство с одного удара (включать не играя с союзниками). Ps: Функция убийство с одного удара, работает и на союзников... Так что в последней главе, функцию лучше не включать. Ну или в противном случаи, они помрут так же от одного удара врага. Добавил LIRW Добавлено 03/19/19 Категория Трейнеры для PC игр  
  13. 1 балл
    Рекомендую почитать "Полный справочник С++. 4-е издание." Герберта Шилдта. И вообще, данную книгу лучше иметь в качестве настольной, если собираешься кодить на плюсах )
  14. 1 балл
    Я изучаю с++ уже второй месяц, но написать такой программы как у тебя пока не могу. Даже и не имею представления о том как это сделать. Может это от того, что я решил сперва освоить самые основы. На данный момент мною прочитана книга Лафоре, и начата книга "с++ Primer" (~300 страниц из 1124). Книга Лафоре имеет замечательную постепенность преподавания материала, забегания вперед практически нет. Читается на одном дыхании. "с++ Primer" в этом плане не такова, но её материал более концентрирован, нет отклонений ни направо ни налево, все строго и без единого лишнего слова. "с++ Primer" нужно читать после Лафоре.
  15. 1 балл
    Про профили я знаю, мне было интересно поскольку при изменениях адреса он использует другие файлы
  16. 1 балл
    Думаю с получением бесплатной игры у многих могут зачесаться руки. Вот и набросал отключалку проверки целостности. Приятного взлома. Желательно запускать, после полной загрузки игры. ACU_bypass.7z
  17. 1 балл
    В любой блокировщик рекламы как кастомный фильтр. Удаляет мусор от яндекса в уточке. duckduckgo.com##.result.results_links_deep.highlight_d:-abp-contains(/(data-domain\=)|(.*yandex.*|.*ya\.ru)/)
  18. 1 балл
    Все для того, чтобы картинки не отваливались в случае чего.
  19. 1 балл
    Похожая статья уже была, но тут "новый" инструмент и не просто подмена рандомного значения. Что ж, для начала надо запихнуть исполняемый файл под дизассемблер, ищем что-нибудь связанное с лицензией, реверсим. Привели к читаемому виду, а теперь разбираемся что же тут происходит. Часть 1, проверка, чтобы имя пользователя было не длиннее, чем 20 символов. IVar1 = __picsymbolstub4::_objc_retain(param_3,param_2,(_NSZone *)param_3); lenth = __picsymbolstub4::_objc_msgSend(IVar1,"length"); if (lenth < 20) { bResult._0_1_ = 0; } Часть 2. Считываем введенное имя пользователя с 12 по 16 символ. uname = __picsymbolstub4::_objc_msgSend(inpurt_username,"substringWithRange:",12,16); user_name = __picsymbolstub4::AutoreleasedReturnValue(uname); Часть 3. Получение серийного номера устройства. SerialNumber = __picsymbolstub4::_objc_msgSend(&ATTweakClient,"getSerialNumber"); serial_number = __picsymbolstub4::AutoreleasedReturnValue(SerialNumber); Часть 4. Составление строки из соли, серийного номера и имени пользователя. _complite_string = __picsymbolstub4::_objc_msgSend (&_OBJC_CLASS_$_NSString,"stringWithFormat:",&cf_%@%@%@, & cf_kyf6jFJYT8aawe[we]D+F-s4JYI3jsaDp69jsdq123sDdflkDuF3sgvlkd3asfKLFDGhjalsddgasd ,serial_number,user_name); complite_string = __picsymbolstub4::AutoreleasedReturnValue(_complite_string); Часть 5. Хеширование полученной строки. hash = __picsymbolstub4::_objc_msgSend(&Utils,"sha1:",complite_string); IVar1 = __picsymbolstub4::AutoreleasedReturnValue(hash); Часть 6. Узнаем, что приходит от сервера. (Формат ключа) Начинаем писать кейген. #Импортируем модуль для работы с хеш-функциями from hashlib import sha1 #Задаем серийный номер аппарата serial = b"QTW6NR7XXP7M" #Задаем имя пользователя == 16 знакам name = b"partoftheworlD16" #Задаем соль salt = b"kyf6jFJYT8aawe[we]D+F-s4JYI3jsaDp69jsdq123sDdflkDuF3sgvlkd3asfKLFDGhjalsddgasd" def generate_license_file(): #Хешируем и переводим хеш в hex license_hash = sha1(salt + serial + name).hexdigest() #Формируем ключ key = license_hash[:12]+name.decode("utf-8")+license_hash[12:] #Формируем лицензионный файл print("{\"validated\":true,\"key\":\""+key+"\",\"create_time\":\"00:00:00 Apr 10, 2019 MSK\"}") generate_license_file() На выходе получаем. {"validated":true,"key":"2ebb4e00950epartoftheworlD16cff6343256a724d56eb6506173ec","create_time":"00:00:00 Apr 10, 2019 MSK"} Теперь необходимо этот ключ как-то скормить программе. 1. Способ, поместить ключ прямо в папку с программой 2. Скормить, через ответ с сервера. Я выбрал второй, просто потому, что мне лень по папкам лазить, чтобы создать файл. Пусть за меня это делает программа, я что её зря взламывал? Заходим в Burp Suite, вкладка Proxy, Options. Переходим в программу и запрашиваем лицензию. Ах да, я забыл снова включить прокси. Все, после запроса, срабатывает подмена ответа с сервера и в Burp Suite видим. А на экране телефона, успешно загруженную лицензию.
  20. 1 балл
    Данный материал приведен в ознакомительных целях и если вы будете ломать соседей, я тут вообще ни причем как и форум. А так же статья носит популистский характер, призывающий вас не останавливаться только на взломе игр и постоянно совершенствовать свои навыки в различных областях компьютерных наук. Сегодня мы поговорим о серьезных вещах, а именно безопасности, которую предлагают нам провайдеры, предлагая купить/взять в аренду их роутер. Проблема носит масштабный характер, и это серьезная проблема в нашем регионе, мой провайдер предлагает подобный роутер и люди не разбирающиеся в этом, покупают уязвимые устройства, у которых по дефолту(в 70% случаев) включен удаленный доступ, достаточно установить на телефон nmap + telnet и сеть пала. Только в своем дворе я нашел около 70 потенциально уязвимых устройств этой же модели в радиусе 30 метров. И это не нормально. Начнем с того, что этот роутер (ZXDSL931WII) у меня давно лежит под скальпелем, и давно хотелось поковырять какую-нибудь прошивку для железки. Ну что ж, возьмем прошивку с диска, проверим энтропию, чтобы быть уверенными, что прошивка ни чем не упакована. Это можно сделать с помощью утилиты binwalk, ей же будет и распаковывать все файлы прошивки. После распаковки, надо понять вектор атаки, например, проверка подлинности/авторизация и что-то в этом роде. Лучшим инструментом для поиска экспортируемых функций под Windows будет Total commander. *.so файлы представляют из себя подобие dll в Windows. В нашем случае libcms_cli.so Как видите на картинке ниже, никакой защиты памяти нет. Теперь переходим к реверсу. cmsCli_authenticate является функцией, которая считывает логин с паролем при подключении к роутеру через telnet(точно, остальные виды подключения не проверял). Приведем код к читаемому виду. Я думаю, что опытные программисты уже заметили в чем тут дело. Но, если кто не понял, то вот, тот участок из-за которого возможны проблемы(а они будут). // Считывание введенного пароля password = getpass("Password: "); if (password != (char *)0x0) { cmsUtl_strcpy(password_buffer,password); password_len = cmsUtl_strlen(password); memset(password,0,password_len); } Т.к. отладчик не поднять, методом "тыка" было выяснено, что пароль может быть больше 256 байт(!!!). А проблема возникает из-за метода getpass, который,возвращает пароль в функцию, которую нельзя называть, это одна из запрещенных функций, использование запрещенных функций, тоже самое, что купить билет в один конец до Азкабана из-за того, что strcpy не проверяет размер аргументов и это может вызывать переполнение. Чем мы сейчас и воспользуемся. addiu sp,sp,-0x238 //выделение памяти под кадр стека password_buffer = -0x110 //позиция буфера пароля ra = 0x0 //return address залогинились = 0x12c20 //участок кода, который сообщает роутеру об успешном выполнении проверки Это все что нам надо знать для написания эксплоита, его будем лепить с помощью pwntools. Достаточно лишь заполнить 276 байт мусором, а после прописать 0x12c20 как адрес возврата. Ну что, давайте украдем сладкий рулет!!! Пароль неверный, а доступ получили. Такие дела. Как видим, права у стека полные. 7f97b000-7f990000 rwxp 7f97b000 00:00 0 [stack] Функционал прошивки ограничен , но когда это кого-то останавливало? Можно придумать костыли всегда. Например, использовать dumpmem в цикле, чтобы задампить всю память в которой, находится интересная информация, например, логин и пароль от учетки для подключения к интернету, пароль от вайфая и т.д. (На самом деле, получив доступ к роутеру, можно просто вызывать команду, которая покажет всю информацию о роутере, настройках в том числе и паролях. Или создать скрытую точку доступа, установив на него свой пароль и пользоваться чужим интернетом, устроить dhcp спуфинг.(Это все конечно теоретически, на тестовых машинах, только ради исследовательского интереса, ничего противозаконного, лол) А теперь о том как защититься: В идеале обновить прошивку и следить за тем, что обновление исправляет. В реалиях придется просто отключить удаленный доступ к сервисам, которыми вы не пользуетесь, а ещё лучше и локальные, если вы неуверенны в людях, который присоединяются к вашему вайфаю.
  21. 1 балл
    Спасибо большое за помощь, вы мне очень помогли)
  22. 1 балл
    Либо так Либо так Но вообще-то вопросы эти давно рассмотрены в видео, статьях и топиках.
  23. 1 балл
  24. 1 балл
    Итак, для дампа будем использовать точку останова с условием, с выводом определенных типов для нужных нам регистров. Условие остановки: представляет из себя условие при котором будет срабатывать бряк, так как мы не знаем количество, функций которые имеет игра, то установим чуть меньше максимального количества функций в IDA. Текст журнала: Это то, что будет выводится в журнале во время остановки. Формат вывода такой {тип: регистр}. Весь список типов и пример использования: Условие добавление в журнал: Говорит само за себя. Текст команды: Это то, что будет выполняться после остановки бряка, на скрине указана команда go - тоже самое что нажать F9. Так же команд может быть несколько, каждая последующая добавляется со знаком точка с запятой. (go; StepOut) Условие для команды: Условие для выполнения команды. Счетчик остановок: Просто счетчик, к значению которого можно обратиться через $breakpointcounter Демо: Ссылка на док: https://x64dbg.readthedocs.io/en/latest/introduction/ConditionalBreakpoint.html
  25. 1 балл
    Всем привет. Сегодня я расскажу о том, как создавать нужный автомобиль с помощью CE в GTA Vice City. Как и говорил partoftheworlD, это очень просто, но раз возникают вопросы, я решил написать небольшой гайд. Собственно, выйти на функции создания автомобилей очень просто - в игре есть читы, которые позволяют "вызывать" себе танк, катафалк и другие автомобили. Поэтому выйдя на функцию обработки чита - мы найдем функции для создания автомобиля. Приступим. Для начала вспомним несколько читов для создания автомобилей. Я выбрал чит-код создания катафалка - THELASTRIDE , но так же можно использовать наш любимый чит создания танка - PANZER. Собственно ввод кодов - это операция по сохранению текущего введенного символа в строку и последующая проверка получившейся строки на соответствие. Каждый введенный символ записывается как в стек, поэтому в реальности эти читы выглядят как REZNAP и EDIRTSALEHT. Но если поискать данный текст, мы его не найдем. Как же так спросите вы? На самом деле функция обработки чит-кодов срабатывает на вводе последней буквы, поэтому проще всего просто искать часть введенного кода. Выйдем в меню игры, введем чит-код THELASTRIDE и попробуем поискать подстроку TSALEHT (не забываем переворачивать чит-код) в игре: Ура, мы нашли текст по адресу 00A0F94F. Не будем его запоминать, он нам не пригодится, а сразу посмотрим, что же творится в памяти. Нажмем на адрес правой кнопкой мыши и выбираем Browse this memory Region. В памяти сразу поднимемся на пару строк вверх, обычно строки длиннее чем мы искали: Ура, видим часть введенного нами кода. Так же могут присутствовать и другие куски текста, например на скришоте я немного побегал перед вводом чит-кода. Теперь мы видим, что в реальности строка ввода чит-кода больше чем мы ожидали, а её начало находится там, где присутсвуют первые символы DW DIRTSAL, т.е. по адресу 00A0F94A. Добавим этот адрес в табличку (размер строки вычислен эмпирическим путем - посчитал не нулевые байты): Теперь если в игре мы побегаем или введем другие чит-коды, увидим как они укладываются в памяти. Посмотрим же, что использует этот буфер - попросим CE найти всех, кто использует данный адрес при вводе чит-кода Сначала жмем ПКМ на адресе в главном окне CE и выбираем Find out what accesses this address: Теперь переключимся в игру и введем любое слово, например HELLOGHL. Этим мы отсеим инструкции, которые используют наш адрес при обычном вводе. В окне появились следующие инструкции, мы будем их игнорировать: Теперь введем чит-код на создание автомобиля - THELASTRIDE. Внимательно следим за окном с инструкциями, т.к. в процессе ввода у меня появились еще несколько инструкций, которые используют адрес, но не влияют на появление машины. После ввода последней буквы видим следующую картину: Уже можно заметить несколько функций, выполняющихся один раз. Для того, чтобы отсеять лишние инструкции, попробуем ввести другой чит-код, не относящийся к созданию автомобилей, например LEAVEMEALONE: Ура, из предыдущих инструкций у нас осталось одна - инструкция mov byte ptr [00A0F94A] по адресу 004AC84A. Давайте выделим её и нажмем Show disassembler, чтобы увидеть, где она выполняется: Собственно мы видим некое условие, после которого в наш буфер записывает 0x20, он же 32 он же пробел и вызывается некая функция gta-vc.exe+AE7C0 с аргументом AC. Заочно можно нас поздравить, потому что мы нашли нужную нам функцию, осталось только убедиться в этом. Попробуйте тем же способом найти чит-функцию для создания танка. Я её уже нашел, давайте посмотрим: Видно, что функция находится немного в другом месте, но отличие состоит только в том, какой аргумент передается в функцию - push записывает в стек A2 , вместо AC. В остальном код условия идентичен и я предлагаю попробовать просто вызывать функцию gta-vc.exe+AE7C0 с разными параметрами. Для вызова функции мы будем использовать AutoAssembe и функцию createthread. Зайдем в AutoAssembler (откроем Memory Viewer, меню Tools - AutoAssemble) и набросаем следующий скрипт: Добавим его в таблицу через File - Assign to current cheat table и можно закрывать окно Auto assemble. Скрипт выделяет в памяти игры 64 байта для себя, после чего записывает туда инструкции, которые мы скопировали из оригинальной игры и просит createthread выполнить их. Обратите внимание, что аргументы в данную функцию передаются как push AC. В оригинальной игре после call мы можем заметить инструкцию pop ecx. Это значит, что функция не трогает стек и мы сам должны двигать его за ним (т.е. откатить push AC). Поэтому после функции выполняется pop и мы обязательно должны его скопировать, иначе ret будет пытаться вернуть поток не куда-то по адресу 0xAA123456, а по адресу 0x000000AC. Почему pop использует ecx? В данном случае - потому что левая пятка компилятора так решила и это ни на что не влияет (ecx спокойно можно заменить на eax и другие регистры). Ура, скрипт в нашей таблице, давайте же активируем его! Смотрим на результат и...: Наш скрипт вызвал чит-функцию создания катафалка! Наверное вы уже догадались, что если мы заменим push AC на push A2 мы увидим заспаунившися танк? Получается, что AC - это катафалк, а A2 - танк. Поискав GTA Vice City Vehicle IDs, мы найдем, что действительно, A2 = 162 - это Vehicle ID танка, а AC = 172 - катафалк. Попробуем указать свой ID, один из списка, например 168 (такси). Передача аргумента превратится в push #168: Можно сказать, что наш скрипт работает! Осталось вынести ID модели как переменную: Я удалил из скрипта функцию вызова потока, чтобы переместить её в отдельный скрипт: Теперь можно добавить в таблицу адрес our_vehicle_id, в который после записи скрипта будет записано число 206 (ID наикрутейшего Sabre Turbo). Это число отвечает за то, что мы передаем в чит-функцию и меня его мы будем менять ID заспаунившегося автомобиля: Результат: И о проблемах Скрипт фактически вызывает чит-код, поэтому мы начинаем слыть читерами, рейтинг в игре уменьшается и т.д. Это довольно легко обходится, т.к. если мы провалимся в функцию gta-vc.exe+AE7C0, перед самым ret есть две инструкции - add [gta-vc.exe+5B4F94],000003E8 и mov byte ptr [gta-vc.exe+60FB37],01 . Первая накидывает очки читерства (они хранятся отдельно) и устанавливает флаг - "этот парень использовал коды". Если их занопить - игра никогда не узнает о ваших проделках. И вновь, потому что мы просто вызываем функцию чит-кода, она спаунит машины только на дорогу. Она находит ближайшую RoadPoint, прибавляет по оси Z несколько метров и спаунит авто. Поэтому создать авто прямо перед игроком так просто не получится. Ну и основная проблема - это то, что в данной функции использует конструктор только для автомобилей. Он так же используется для вертолетов, но вот байки и лодки с ним заспаунить не получится (заспаунится, но крешится при посадке и выглядит, кхм...): О том, как обойти эти проблемы и вызывать уже конструкторы классов мы узнаем в следующем уроке С видеоформатом гайдов мне сложно работать (довольно тяжело как смотреть, так и записывать их), поэтому уроки в текстовом формате.
×

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

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