2015-01-18 2 views
-2

Я и мой друг создали Advanced C++ TCPClient, он создал клиента, и я создал сервер. Клиент имеет статический IP-адрес внутри кода, и мы потеряли код для клиента. В настоящее время я задаюсь вопросом, можно ли декомпилировать в IDA и изменить IP. я просматривал IDA, и я не нашел IP-адрес в любом месте. Кто-нибудь знает возможно ли это?Можно ли изменить массив байтов (4) в скомпилированном приложении

Его не так просто, как только воссоздавать клиента, это немного сложнее, чем просто размещение слушателя и клиента

+1

Что такое "IDA"? –

+2

Предполагая, что у вас есть разрешение на запись в исполняемый файл, ВОЗМОЖНО изменить исполняемый файл ограниченными способами (и изменение звука IP-адреса вполне выполнимо). Декомпиляция технически не требуется. Стоит ли это сравнивать с попыткой перекомпилировать/перепроектировать код [классический случай «хранить ваш код в системе управления версиями, с вашего основного компьютера»), и знаете ли вы, как определить правильный набор байтов (vs. инструкции и другие «случайные данные») - это, конечно, еще один вопрос. –

+0

@EdHeal Инструмент дизассемблера (и т. д.) – deviantfan

ответ

1

Если адрес фактически хранится в массиве из 4 байтов (независимо от того, как он объявлен), тогда вполне возможно измените его в исполняемом изображении.

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

Если вы найдете более одного экземпляра (в любом порядке), все становится намного сложнее.

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

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

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

+0

Я пробовал это в течение нескольких дней и не мог найти его. Я буду переписывать код из-за технического обслуживания. Поэтому я буду переписывать исходный код. –

2

Да, это, конечно, возможно, и, вероятно, не слишком трудно.

Предположим, что IP-адрес 10.11.12.13. Поиск через двоичный код для 0D 0C 0B 0A и 0A 0B 0C 0D ... IP-адрес может храниться в байтовом порядке сети (большой конец) или в порядке байтов хоста (немного endian), в зависимости от того, как он был написан и как он был оптимизирован. Обратите внимание, что это может быть сложнее, если вы находитесь на другой архитектуре. На некоторых архитектурах (не x86), если вы хотите загрузить 32-битную константу, такую ​​как IP-адрес, вы сделаете это, загрузив две 16-битные константы.

Декомпиляция может даже не понадобиться. Вам просто нужно убедиться, что новый IP-адрес добавлен с использованием того же порядка байтов.

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

(Разумеется, здесь урок состоит в том, что вы всегда должны использовать имена хостов вместо жестко кодированных IP-адресов в свой код, но в следующий раз вы сделаете лучше, верно? Если вы используете имя хоста, вы можете всегда меняйте записи DNS при перемещении вашего сервера или изменяйте /etc/hosts (C:\Windows\System32\Drivers\etc\hosts на Windows).)

+1

FYI, нет гарантии, что данные принадлежат IP-адресу. Он может принадлежать одному или нескольким инструкциям или другим данным Это то, что затрудняет декомпиляцию. –

+0

Конечно, даже если вы используете имя хоста, если вы решите изменить имя хоста, это действительно действительно облегчает поиск, не что иное, как что. И, конечно же, нет гарантии, что компилятор не указал адрес в нескольких местах. –

+0

@MatsPetersson: Это неверно ... если вы используете имя хоста, вы всегда можете изменить записи DNS или изменить '/ etc/hosts'/'C: \ Windows \ System32 \ Drivers \ etc \ hosts' –

Смежные вопросы