У меня есть исполняемый файл (написанный, вероятно, на С++), который подключается к серверному программному обеспечению с использованием сокетов TCP и Windows (win sock api).
Затем отправляет пакет с заголовком (например, заголовок — это два байта 0x0064), логином и паролем. А затем начинается его взаимодействие с сервером.
Я хочу изменить заголовок логин-пакета, например, с 0x0064 на 0x0065.
Конечно, я всегда могу изменить его на своем ПК с помощью сниффера, такого как WPE (редактор пакетов winsock), или я могу написать dll с помощью Microsoft Detours с оболочкой функции отправки сокета и внедрить ее перед запуском программы, но мне придется проверять каждый пакет, который будет отправлен, чтобы знать, что он имеет заголовок 0x0064 и это именно тот пакет, который я хочу изменить.
Итак, мой вопрос: есть ли какой-нибудь простой способ найти переменную с этим заголовком пакета (я полагаю, они просто жестко закодировали ее при сборке пакета, как в sprintf), и просто изменить один байт в HEX-редакторе, не изучая ассемблер? Может быть, есть хороший пример учебника/crackme с решением, которое объяснит, как это сделать?
Любой совет будет полезен. Спасибо!
0x64 0x00
(архитектура x86/x86-64 имеет обратный порядок байтов). Тогда вы просто замените этот конкретный0x64
на0x65
. Иногда модифицировать исполняемые файлы так просто, но обычно нет, и тогда вам действительно нужно использовать отладчик и/или дизассемблер, а использование любого из них требует хотя бы некоторого базового понимания рассматриваемого языка ассемблера (в данном случае x86 или x86- 64). - person nrz   schedule 23.02.2013