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

Реверсинг.


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

Ох, как давно меня тут небыло) Всем здарово, кто меня помнит :)

В общем дело такое, занимаюсь в данный момент игрой, расширяю функционал клиентской и серверной части.

Столкнулся с некой проблемой:

Игра работает с ХП/МП/Стаминой с int32, как клиентская так и серверная часть. Но какого-то беса разрабы решили, в пакетах отправлять int16.

Исходников естесвенно нету, но есть ИДА и желание этим заниматся :))

Я нашел функцию в клиентской и серверной части. Переписал полностью клиентскую, и чуток изменил серверную.

Ниже по спойлером серверная функция. С которой возникли некоторые проблемы.

Спойлер

image.thumb.png.83a967e3eef20184430ab41ed7c0e088.png

Сервер прекрасно работает и отправляет мне пакет с int32 параметрами. Клиент так же на ура их принимает и всё работает. И на моей машине проблем нету. Так же держатель сервера тестил на своей локальной машине и так же не каких проблем.

А вот при запуске на сервере, при смене локации падает сервак.(после этого тестили ещё на 3-4 машинах под WIn10, на всех работает нормально, сервер под Win2012 Server) 

В общем что я сделал в данной функции. Я иньекчу кусочек кода __declsepc(naked) функцию в получение параметров

movzx eax, word ptr [ecx+1D8h]

Вот пример моей функции.

Спойлер

image.png.b2ffcbc1e52394161d0cdc62e2315c56.png

Увиличивая стэк, что бы влезла структура с х3 int32(12), оригинальная структура х3 int16(6), но компилятор вырвнял ее до 8)) sub esp, 4 достаточно

Далее вношу полные параметры и пушу параметр для new и соответственно прыгаю обратно на new

Таже делаю 2 патча небольших, а именно патчу размер структуры тут:

push 6               ; size
lea ecx, [esp+0Ch]   ; Load Effective Address
push ecx             ; tTD_UPDATE_SIMPLE_STATUS
mov ecx, eax         ; this
call ??0MCommandParameterSingleBlob@minet@@QAE@PBXG@Z

вместо 6 пушу 12, можно конечно и бинарник пропатчить, но я в любом случае иньекчусь в процесс, так что без разницы.

Ну и поменял пару смешений относительно стека далее по коду и очистку стека.

 

Как я и говорил выше, это прекрасно отработало на всех компах, которых мы тестили под управлением Windows10.

Самый интересный момент, сервер плюет exception по адресу, на котором он быть не должен, да и сам exception code странный, не смог его не нагуглить, не error lookup не чего не выдал:

40010006

Так же самая большая странность, если открыть на сервере Вижал студию и присоеденить её как отладчик до ексепшена или во время, то студия не выдаёт ошибок или чего-то еще, а просто продолжает процесс без каких либо проблем.

И сервер спокойно работает и проблема исчезает. Но как по мне странно запускать сервер и вешать на него студию в дебаг моде :DDD

Может у кого-то вылезал подобный ексепшн или кто-то сталкивался с такой дичью? :)

Всем спс :))

P.s. отлаживать постоянно сервак возможности нету.

p.s.s свой Exception handler писал, устанавливал и хукал SetUnhandledExceptionFilter что бы не переставили) Но почему-то результата это не дало. Он не отработал, хотя на Access Violation(специально подстроеный) плюнул мой обработчик.

Изменено пользователем temtriss
P.s.s добавил :)
Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, temtriss сказал:

Вот пример моей функции.

Ну вот такие хуки как раз довольно сложно отлаживать.
Переписал бы ты хук на detours 1.5, или же 3 версию. Там хотя бы точно не накосячишь со стеком и прочим.

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

13 минут назад, roma912 сказал:

накосячишь со стеком

Я и так не накосячил со стеком))) я проверял) 

Да и сложно ошибится, расширил стэк на 4  и почистил на 4 больше)) всё)

Темболее, что функция работает. Проблемы с стэком точно нет)

13 минут назад, roma912 сказал:

Ну вот такие хуки

Это не совсем хук, я просто внедряю кусок кода. Мне не нужно переписывать всю функцию. Мне нужен маленький кусочек.

13 минут назад, roma912 сказал:

detours 1.5, или же 3

Когда я переписываю полностью функцию, я так и делаю.

А так же какая разница? Я могу так же юзануть detours только вот нечего не поменяется... у меня нету конвенции вызова у функции т.к. она мне не нужна... мне нужно записать из есх(GAntityActor) + HP, MP, STA offset значение)) все... изобретать велосипед не хочется :) функция и так готовая) И ей абсолютно паралельно сколько байт отправлять(структура кладётся в SingleBlob, функция просто выделяет память и с помощью memcpy копирует то, что ей скормили с проверкой размера < 1024)

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

Всем спасибо, решение нашел сам. Если кому-то интересно:

Я расширял стэк в своей функции и по хз какой причине на Win 10 это работало нормально, а на win 2012 Server нет.

Я сделал патч на расширение стека в оригинальной функции 

вместо 

sub esp, 0c

пропатчил на 

sub esp, 10

А в своей функции соответсвенно убрал расширение стека. И всё заработало))) больше 2х недель мучался :DDD

В общем тему можно закрыть! Всем спс :)))

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

  • Xipho закрыл тема
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...

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

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