Наилучшая (но само собой ничего не гарантирующая) защита от реверс инженеринга - это обфускация кода, причем не (как вариант не
только) на уровне исходных кодов программы но ниже - на уровне компиляции.
Промежуточные передаваемые данные защищай шифрованием, т.е. буквально запрос нужно видоизменить до неузноваемости, а код который это делает должен быть защищен обфускацией и критпостойкими алгоритмами (т.е. простого xor будет недостаточно), отличным примером может быть использование ассиметричное шифрование, когда секретный ключ для шифрования запроса должен находиться не у клиента а у dll, а клиенту достаточно публичной части.
И повторюсь - взломать можно все, вопрос только в цене процесса и целесообразности. Обычно стоимость защиты сравнима со стоимостью взлома и чаще всего взлом (специалистом) будет немного проще. Как минимум не пользоваться типовыми решениями.