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

Desmos

Пользователи
  • Публикаций

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

  • Посещение

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

    4

Desmos стал победителем дня 20 июня

Desmos имел наиболее популярный контент!

Репутация

7 Lamer

Информация о Desmos

  • Звание
    Пользователь

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

646 просмотров профиля
  1. Да, извини, я что-то пожадничал) Это браузерная игра Gtanks или старые танки онлайн.
  2. Спасибо, заработало, чтобы тема не пропадала зря, выложу свой код. Думаю, это неплохой пример слияния (совмещения, объединения) двух скриптов в один. Первый скрипт (inject1) ищет сигнатуру, которая обращается к координатам персонажа. Секция newmem1 записывает координаты нашего персонажа в глобальную метку coords (координаты тип double). Второй скрипт (inject2) ищет сигнатуру, обращающуюся к координатам выпадающего дропа на карте. В итоге, второй скрипт в newmem2 записывает значения координат персонажа, которые добыл нам первый скрипт, в координаты дропа. В итоге, все выпадающие припасы телепортируются к персонажу, и он подбирает их. Вот код
  3. Почему этот код работает без вылетов А если в коде вместо alloc(coords, $1000) в 6-й строке поставить label(coords), то по какой причине игра вылетает? Как тогда в других скриптах достаточно для инициализации метки указать label(...) и объявить её через db? Вот собственно код, который не работает (игра вылетает). Как раз здесь заменена строка alloc(coords, $1000) на label(coords)
  4. Координаты нашел, молодец, я вообще не игрок в игры, но, например, можно сделать телепорт или, если выпадают припасы в игре, можно сделать "припасолов", когда припасы выпадающие телепортируешь к себе и берешь. Если твои коорды не контролируются сервером, то и коорды припасов могут не контроллироваться. Рядом с адресом координат так же могут быть скорости персонажа по осям. Поиск значений долгая работа, может и неделя потребоваться. Так же поковыряй инструкции, работающие с координатами других игроков, возможно, их можно телепортировать к себе и убивать. Смотря, что контролируется сервером...
  5. Вообще дальше нужно нажать find out what instructions accesses /write to this address найти сигнатуру, которая работает только с 1 адрессом и по ней писать трейнер или скрипт автоассемблера. Для написания скриптов нужно посмотреть cheat engine help, там описаны все инструкции ассемблера, которые поддерживает cheat engine. Так же есть видеоуроки Xipho на Youtube, по взлому игр от А до Я, там все очень подробно рассказывается. Но для этого надо знать хотя-бы один из языков программирования, я, например, когда начинал, знал основы c++, по этому мне по проще было вникнуть (я тоже по его урокам учился). Или понимать ооп хотя-бы надо, хотя все его понимают, изучая какой-то высокоуровневый язык
  6. Кликнув по одному адресу, далее, зажимая Shift кликни по другому; выделится n-ое количество адресов. Далее нажми на красную стрелочку. N адресов вынесется в таблицу. Нужно их заморозить. Если персонаж по какому-то направлению не двигается то отсей в таблице тот адрес, замораживая который, ты не двигаешься. Как найдешь его, измени его. Если телепортируешься, то ты нашел координату. 300 адресов это вроде не много перебирать. Правда не изменяй числа, которые слишком часто меняются, а то иногда из за этого у меня игра крашилась. Просто я так мучался когда искал координаты в одной мультиплеерной игре.
  7. Короче, проблема была при открытии контекста во время отлова события. А именно, присвоение поля contextflags: ctx.ContextFlags = CONTEXT_ALL; Когда так делаешь, происходит краш игры, если присваивать только на получение из контекста только отладочных и целочисленных регистров, вылет игры не происходит. Как думаете, почему так? Я присвоил так: ctx.ContextFlags = CONTEXT_DEBUG_REGISTERS | CONTEXT_INTEGER И все заработало. То есть ошибка была именно там. Видимо это надо разбираться в механизме получения контекста во время отладочного события. Я нашёл очень интересную книгу про это, если кому нибудь надо будет, я поделюсь: Книга Там хорошо расписано про флаги контекста, как нужно делать. ЗЫ это не реклама, просто если у кого будет такая же проблема, прочитайте фрагмент книги по ссылке.
  8. Хорошо, попробую, только что мне даст вывод состояний регистров. Получается, что значение какого-то регистра изменилось во время отладки на то, которое ссылается на недопустимую область памяти? Я логгирование сделаю, завтра отпишу, может и сам соображу, исправлю и отпишу. Надеюсь, что причина в изменении какого-то регистра.
  9. У меня всё заработало, только теперь на каждой итерации WaitForDebugEvent(...) возвращает Access violation. Причем не сразу а через секунду где-то. Вот C++ код функции main: Отлавливаю условием: if (DebugEv.u.Exception.ExceptionRecord.ExceptionCode == EXCEPTION_ACCESS_VIOLATION) {// ContinueDebugEvent(DebugEv.dwProcessId, DebugEv.dwThreadId, DBG_CONTROL_BREAK); break; } Класс ProcessManager работает идеально, его работа рассчитана на открытие процесса и поиск сигнатуры. Я вообще хочу сделать аналог функции Find out what adresses the instruction accesses в Cheat engine. То есть выводятся адреса, обращающиеся к инструкции, которую я искал. Причем смотрите, сначала начинает работать нормально, а потом сыпятся Access Violation. Почему возникает обращение к не выделенной или удалённой области памяти, я не знаю? Что нужно сделать? Это проблема не с игрой точно, так как Cheat Engine выводит всё через Find out what adresses the instruction accesses нормально. Помогите, пожалуйста, я не хочу останавливаться на пол пути!
  10. У меня что в коде не так, как там? Я просто ненужное убрал в цикле и оставил EXCEPTION_DEBUG_EVENT. Я может не написал. Я имею ввиду, про вставку точки останова int 3 в нужное мне место в памяти, где лежит инструкция, ничего в Google нет. Я понимаю, что нужно использовать WriteProcessMemory(). Но мне нужен именно пример кода вставки через него. И еще, только через WaitForDebugEvent(),так как мне надо отладчик сделать. Я попросил объяснить, почему WaitForDebugEvent() ничего не возвращает, подчеркиваю, ничего, а просто замораживает поток трейнера на бесконечное время и все. Хотя я написал кнопку в программе, которая выполняла инструкцию.
  11. Нужно сделать подобие отладчика на C++. Не могу понять почему WaitForDebugEvent(...) не отлавливает DEBUG_EVENT. Как я это обнаружил? Я выполняю пошаговую отладку в Visual Studio, когда попадаю в функцию WaitForDebugEvent(...), выполнение программы замораживается и всё. Стоит на этом WaitForDebugEvent(...) и дальше пошагово не могу идти по коду. Что я не так делаю? Делал через аппаратный брейкпоинт, по уроку Аппаратный перехват функций от канала Dmitry K. на YouTube. Хотелось бы через int 3 сделать, но когда я записываю 0xCC с нопами по адресу, где сидит найденная сигнатура, то программа вылетает. Отлаживаемая программа: Tutorial-i386.exe Step 2. Инструкция берётся, записывающая по адресу при нажатии кнопки Hit me. Вот мне нужно получить значение регистра ebx. В принципе понятно, что это надо делать через контекст, но помогите написать отладчик, пожалуйста! Мне нужно именно на C++. Вот код: В Google поискал, ничего нет. Xipho, ты вроде трейнер на c# делал. Не знаешь как на c++ значения регистров получить? Подскажи, пожалуйста, как брейкпоинт int 3 поставить на нужную инструкцию, чтобы WaitForDebugEvent его отлавливал как EXCEPTION_BREAKPOINT.
  12. Короче, у меня получилось сделать. Чит, который я сделал, собирает припасы по такому алгоритму: 1) Когда появляются припасы, выделяется память под каждый экземпляр припаса и сразу идёт обращение к сигнатуре. Соответственно, сигнатура находится через AOBScan, далее, чтобы отлавливать адреса, я сделал таймер, так как припасы могут появляться неограниченное количество раз. Этот таймер каждый раз включает debugger_setBreakpoint(). 2)Функция debugger_onBreakpoint() у меня циклична (рекурсивна), так как припасы могут появляться по несколько штук сразу, они будут "одновременно (если не учитывать аппарат прерывания)" обращаться к инструкции, поэтому, чтобы мне все их адреса получить, нужно несколько раз включить debugger_onBreakpoint (я поставил 15). Так я получу все адреса. Далее, когда рекукрсия закончится, вызывается debug_removeBreakpoint и включается таймер, который в найденные адреса пишет значение. -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Всё бы ничего, только когда припасы долгое время не падают (30 - 60 сек), а потом появляются, и как только включается debugger_onBreakpoint() происходит зависание игры. Я заметил, что когда они долго не падают, количество выполнений debugger_onBreakpoint() увеличивается и эта функция не выполняется, а потом, когда они появляются она срабатывает раз 45-60 (учитывая рекурсию) и всё. То есть пока припасы не падали функция не работала, а накапливала работу, а потом всё выполняла как положено. Это я заментил, что когда происходит зависание вылазит много сообщений, которые я написал в этой функции. Прочитал статью от MasterGH про снятие показаний регистров в lua, там был способ писать debug_removeBreakpoint() не в теле debugger_onBreakpoint(), но тогда у меня даже не заходит в debugger_onBreakpoint() и она не выполняется. Вот весь код на lua: Подскажите, в чём дело. Вы на другие функции особо не смотрите. С флагами у меня всё верно. Меня интересует лишь то, когда выполняется функция debugger_onBreakpoint() и почему она не выполняется, когда к инструкции никто не обращается. Как тогда это отловить и поставить на паузу?
  13. Это координата z выпадения припасов. Каждый припас создается через new (выделение динамической памяти). Вот поэтому и адреса разные. Мне нужно каждый раз получать адрес припаса, который появился и менять его координаты на свои, чтобы его взять. Характеристика то одна, только надо мне значение каждого менять. Просто все припасы выпали на одной высоте, так совпало) Как думаешь вот в этой теме MasterGH говорит, что можно определять адреса на прерывающихся инструкциях больше одного. Это подходит к моей проблеме? https://gamehacklab.ru/topic/530-отладка-в-lua-снятие-показаний-регистров/ Как думаешь?
  14. Тему можно закрывать MasterGH дал ответ. Спасибо ему большое!
  15. Привет. Я тут немного продвинулся, нашёл инструкцию, обращающуюся ко всем нужным адресам, подробнее, что мне нужно можете посмотреть на скринах 2 и 3, просто так удобнее. Скрин 1 Сама инструкция, которая обращается к адресам Скрин 2 Подтверждение того, что количество этих адресов растёт. Скрин 3 Там написано, что я не могу сделать. Вся информация, что мне надо сделать на скринах. Я только не пойму, ну я в edx+20 смогу через lua попасть, но это будет только 1 адресс. А как мне все получить, которые появляются? Причем я понимаю, что это можно через таймер сделать, но как мне именно сканировать каждый раз на обращение к новым адресам. Или в edx каждый раз разное значение будет? Не понятно. Помогите, пожалуйста, кодом или информацией, где можно прочитать.
×
×
  • Создать...

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

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