Ollydbg обратный инжиниринг IP-адреса

Я пытаюсь реконструировать старую игру, с которой я возился, и которая больше не поддерживается. В настоящее время я просто пытаюсь отредактировать IP-адрес подключения, чтобы подделать, что сервер находится в сети, но у меня возникли некоторые проблемы с отслеживанием IP-адреса в приложении. После выполнения теста wireshark IP-адрес, к которому программа пытается подключиться: 24.56.108.156, но сканирование для этого с помощью программы редактирования шестнадцатеричного кода (в частности, XVI32) в шестнадцатеричном формате или тексте не дает результата.

Итак, я продолжил возиться и загрузил ollydbg, который я не использовал вечно, и мои знания ассемблера, несомненно, резко упали. Во всяком случае, я сначала просмотрел строки, на которые ссылаются, и нашел там некоторый текст (кажется, комментарии к коду), который показывает, что функция «RemoteHostIP» возвращает IP-адрес удаленного хоста. Итак, я нашел сборку для вызова и сделал на ней точку останова, чтобы убедиться, что это правильная функция и она вызывается именно тогда, когда клиент пытается подключиться. Сборка для него такая:

MOV EAX, DWORD PTR DS:[C98FA8]
OR EAX, EAX
JE SHORT Eternal.0043629F //Jumps back to the MOV call.

Я посмотрел на значение EAX, и оно оказалось равным 75843918, а DS — 002B, но значение EAX (при обратном преобразовании в десятичное число или ascii) не равно IP-адресу, к которому клиент тоже пытается подключиться. Итак, я понятия не имею, что именно означает DS, кроме регистра сегмента данных, или как он влияет на разыменованный указатель, поэтому я перешел к выражению 00C98FA8 и получил то же значение 75843918, что не то, что я ищу.

У меня заканчиваются идеи, есть ли что-то конкретное, что я мог пропустить? Имеет ли этот DS какой-то эффект, о котором я не знаю? Любая помощь будет принята с благодарностью, и если я упустил некоторую информацию, которая может быть полезной, просто скажите мне.

--Недавно добавленная информация--
В ответ на type1232 и просто для получения дополнительной информации:

В адресе есть некоторый отступ между отдельными числами, он выглядел так: 32, Random Number Of 00s и прочий мусор и т. д., поэтому я не могу отследить его напрямую.


person Community    schedule 23.09.2013    source источник
comment
Вы уверены, что IP-адрес жестко закодирован, может быть, используется DNS?   -  person stdcall    schedule 24.09.2013
comment
Положительно, что он жестко запрограммирован, я смог найти его не так давно. Однако я совершенно забыл, как я его нашел.   -  person    schedule 24.09.2013
comment
В Windows все сегментные регистры равны 0, поэтому они не влияют на адрес (кроме FS, который используется для локального хранения потока). Если IP-адрес действительно жестко закодирован, вы сможете найти последовательность байтов 18 38 6c 9c или 9c 6c 38 18 (не уверен в порядке).   -  person typ1232    schedule 24.09.2013
comment
Если не ошибаюсь, у StackExchange есть еще один сайт, посвященный теме реверс-инжиниринга. Просто подумал, что вы могли бы получить лучший ответ, если бы вы задали свой вопрос там.   -  person shmuli    schedule 24.09.2013


Ответы (1)


В конце концов я нашел это с некоторыми предположениями, кажется, что каждая часть приложения разделяла вещи с 00 перед каждой частью ip, так что оказалось: 00 32 00 34 00 2E и т. д. и так далее.

person Community    schedule 24.09.2013
comment
Я ищу учебники по обратному инжинирингу с использованием OllyDBG, наткнулся на это и на ваш ответ. Формат 00XX00XX00XX говорит об использовании Unicode! Ваш IP-адрес указан в кодировке Unicode, в которой используется два байта на символ, поэтому перед символами ASCII добавляется 00, поскольку символы ASCII стоят первыми в таблице Unicode. Ву! - person 0xhughes; 12.01.2014
comment
unicode в Windows - это UTF-16 (16-битная / 2-байтовая фиксированная длина) - person dns; 09.04.2015