Можно ли изменить байтовый массив (4) в скомпилированном приложении

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

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

-2

Решение

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

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

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

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

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

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

1

Другие решения

Да, это возможно, и, возможно, нет тоже жесткий.

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

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

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

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

2

По вопросам рекламы [email protected]