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

[Guild Wars(Первая часть)]Поиск Hex кода с помощью CE


Rybik

Рекомендуемые сообщения

Всем привет. Я скачал утилиту, которая отслеживает какие пакеты отправляет MMORPG. Название игры Guild Wars(Первая часть).

Спойлер

FePreab.png

Собственно вот что она мне выдает. Соответственно вопрос, как этот HeX код найти в CE?

Ссылка на комментарий
Поделиться на другие сайты

38 минут назад, Rybik сказал:

Соответственно вопрос, как этот HeX код найти в CE?

Никак, это значения из перезаписываемого буфера для конкретного дескриптора идентифицирующего сокета который работает с send/sendto.

Ссылка на комментарий
Поделиться на другие сайты

11 минут назад, kiwipapayamongoose сказал:

Никак, это значения из перезаписываемого буфера который работает с send/sendto.

Я хочу отследить таймер, который появляется во время запуска пвп сражения. Для этого у меня есть 60 секунд, чтобы отследить всю цепочку оффсетов. После того как таймер исчезает, все адреса меняются приходится начинать сначала. Для чего тогда писалась эта утилита? Во всем хекс коде значения не меняются, кроме последний 4х: "B8 0B 00 00" - это значение меняется в зависимости от того, какое время приходит от сервера.

Изменено пользователем Rybik
Ссылка на комментарий
Поделиться на другие сайты

10 минут назад, Rybik сказал:

Я хочу отследить таймер

 

Ну есть способы с помощью которых можно найти инструкцию работающую с таймером не на прямую, а например какой-нибудь флаг начала боя(значение которое будет постоянно в памяти), а уже от него выйти на таймер.

 

10 минут назад, Rybik сказал:

Для чего тогда писалась эта утилита?

 

Чаще всего такие утилиты полезны в исследовании игры и восстановлении структуры пакетов, к примеру можно посмотреть что происходит во время транзакций или ещё чего, в том числе и отправки данных на сервер получив дескриптор сокета.

Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, kiwipapayamongoose сказал:

 

Ну есть способы с помощью которых можно найти инструкцию работающую с таймером не на прямую, а например какой-нибудь флаг начала боя, а уже от него выйти на таймер.

 

 

Чаще всего такие утилиты полезны в исследовании игры и восстановлении структуры пакетов, к примеру можно посмотреть что происходит во время транзакций или ещё чего, в том числе и отправки данных на сервер получив дескриптор сокета.

0x100 Integer => 3000. Означает что от сервера пришла команда, бой начнется через 3 секунды. Соответственно я ищу значение 3000  в CE. Нахожу адрес, и смотрю что к нему обращается. Куда дальше посоветуете следовать?

Cos4dab.png

Ссылка на комментарий
Поделиться на другие сайты

Как вариант - попытаться обмануть игру встроенным в СЕ спидхаком, чтобы времени побольше было. Еще вариант - найти что-то "рядом" с этим таймером - например, какую-то надпись. Типа, когда появляется на экране такая-то надпись, то этот таймер стартует. Дальше - в дизассемблер и изучать код. СЕ тут не спасет вот так запросто, я думаю.

Ссылка на комментарий
Поделиться на другие сайты

В общем то у меня уже есть готовый offset, который был найден не мной, тот человек не хочет объяснять как он был найден, поэтому я пишу вам.  Offset =  [0, 0x18, 0x44, 0x9C, 0].

Спойлер

di-0V5B.png

Оффсет возвращает значение от 0 до 30000 после нажатия на кнопку "Вступить в бой", затем приходит пакет от сервера, пакет присылает оставшееся время до начала миссии. Все работает. Теперь остается выяснить каким образом был найден данный оффсет.
1. Нажимаю кнопку вступить в бой.
2. Вижу на таймере 28 секунд, значит в строке поиска Cheat Engine ввожу значение 28000. Появилось несколько адресов.

Спойлер

di-DJ3S.png

3. Снова нажимаю на кнопку "Вступить в бой" на этот раз пришло время до начала мисси было 15 секунд, соответственно равно 15000. Видим что по адресу 11E6F010 значение изменилось на 15000. Это то что нужно, перепроверил несколько раз, значение меняется относительно таймера.

Спойлер

di-PM7T.png

4. Двойным нажатием ЛКМ добавляю адрес 11E6F010 в нижнее окно.

Спойлер

di-9XGT.png

5. ПКМ по 11E6F010 ---> Find out what writes to this address. Затем опять нажимаю на кнопку "вступить в бой" и в окне The Following opcodes write to 11E6F010 появляется инструкция. ПКМ по инструкции ---> More info. Открывается новое окно Extra Info. Cheat Engine говорит что возможно значение можно найти по адресу 11E6F010.

Спойлер

di-XQ43.png

6. Далее пытаюсь найти значение по адресу, но без результатно. Как можно найти куда передвигается mov [esi], dl?

Спойлер

di-ALGE.png

7. Если разобраться, то значение таймера приходит на 11E6F010, а готовый offset получает значение от 1A16E7E8 (последнее смещение). То есть последнее смещение выглядит следующим образом 1A16E7E8+0 = 1A16E7E8. Предпоследнее смещение выглядит так: [1A16E74C+9С] = 1A16E7E8(См. 1 картинка).

Как происходит перемещение от 1A16E7E8 до 11E6F010?

Изменено пользователем Xipho
Не забываем убирать картинки под спойлер.
Ссылка на комментарий
Поделиться на другие сайты

4 минуты назад, kiwipapayamongoose сказал:

[1A16E7E8+0] указатель на 11E6F010

Offset =  [0, 0x18, 0x44, 0x9C, 0] - этот уже найдено. Давайте представим, что оффес не найден и найдем его заново. То есть вы написали, что указатель на [1A16E7E8+0] , но  это взято из уже найденного оффсета (См. первую картинку).

Исходя из второй картинки и далее, как найти смещение? Меня интересует 6 пункт.

1 час назад, Rybik сказал:

6. Далее пытаюсь найти значение по адресу, но без результатно. Как можно найти куда передвигается mov [esi], dl?

 

Ссылка на комментарий
Поделиться на другие сайты

31 минуту назад, Rybik сказал:

Как можно найти куда передвигается mov [esi], dl?

Не  понятно, что подразумевается под "передвигается", это же не шкаф на колесиках какой-нибудь.

Если у тебя есть инструкция работающая с таймером и ты хочешь найти смещения, то воспользуйся ручным поиском указателя, это быстрее, чем автоматический. И желательно воспользоваться инструкцией которая работает только с таймером, иначе можно найти не то что нужно.

 

 

Либо же останавливать процесс во время автоматического поиска указателей.

Ещё можно пойти от обратного, не искать таймер, а найти где используется статический адрес от которого вычисляется адрес таймера.

В общем вариантов куча.

Ссылка на комментарий
Поделиться на другие сайты

Спойлер

 

FOX6fab.png

Mr9ubab.png

 

В ‎04‎.‎03‎.‎2018 в 15:49, kiwipapayamongoose сказал:

Либо же останавливать процесс во время автоматического поиска указателей.

Ещё можно пойти от обратного, не искать таймер, а найти где используется статический адрес от которого вычисляется адрес таймера.

В общем вариантов куча.

Следую инструкции как показано на видео, я нахожу 3-4 смещения. Потом получается так что брекпоинты в ollydbg перестают срабатывать.

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, Rybik сказал:

Потом получается так что брекпоинты в ollydbg перестают срабатывать.

Значит все нашел) а вообще лучше использовать x64dbg, вместо ольки

Ссылка на комментарий
Поделиться на другие сайты

33 минуты назад, kiwipapayamongoose сказал:

Значит все нашел) а вообще лучше использовать x64dbg, вместо ольки

Как нашел если самый первый адрес не статический? :D

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

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

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