Обратный инженер C ++ DLL
-
05-07-2019 - |
Вопрос
У меня есть небольшая утилита, которая была изначально написана в VS2005.
Мне нужно сделать небольшое изменение, но исходный код для одной из библиотек был где-то потерян.
Существует ли бесплатный или недорогой инструмент для обратного инжиниринга DLL обратно в код C ++.
Решение
Декомпилятор Hex-Rays - отличный инструмент, но код будет довольно сложным читать, и вам придется потратить много времени, чтобы перепроектировать всю DLL.
Другие советы
Возможно, вы также захотите взглянуть на OllyDbg , представляющий собой 32-разрядный анализатор уровня отладки на ассемблере. Он используется для анализа двоичного кода в сценариях, где у вас нет исходного кода. Это легкий отладчик. OllyDbg является условно-бесплатным программным обеспечением, поэтому вы можете загрузить & amp; используйте это бесплатно .. !!
Посетите домашнюю страницу OllyDbg здесь
PS . В свое время взломщики использовали SoftICE из NuMega для отладки в исполняемый файл & amp; захватить снимок на значениях регистров. SoftICE был продвинутым отладчиком. Это был определенно любимый инструмент для взломщиков. Я не знаю о нынешнем статусе продукта. Сайт NuMega не имел информации об этом. Возможно, я упустил это, но не смог найти. Я рекомендую вам приобрести устаревшую версию (4.0x) SoftICE & amp; примените исправление WindowsXP для SoftICE. Работа с SoftICE - это что-то вроде «опыта». Р>
Подробнее: Реверсирование: секреты обратного инжиниринга от Эльдад Эйлам
Я не знаю точную ситуацию, в которой вы находитесь, и какова функциональность DLL для вашего приложения. Но я бы сказал, что в большинстве случаев было бы лучше переписать отсутствующую DLL на основе известных функций. Р>
Это особенно верно, если у вас есть некоторая документация для этого. Р>
Попытка выполнить обратный инжиниринг двоичного кода в ассемблер, затем в C ++, а затем попытаться изменить его, чтобы обеспечить существующую функциональность, в большинстве случаев отнимает много времени, а может быть, даже невозможно.
Если ваше небольшое изменение состоит в том, чтобы отредактировать некоторый текст или пропустить некоторые подпрограммы, вы можете использовать шестнадцатеричный редактор или дизассемблер, но вы не сможете увидеть исходный код C ++, и даже если вы найдете инструмент, который превращает DLL обратно в код, все имена переменных исчезнут, и это будет большой беспорядок.
Немного в зависимости от вашей ситуации, я бы оставил устаревшую / бинарную DLL как есть и написал бы DLL-оболочку, которая изменит и / или добавит любое дополнительное поведение. Р>
Идея состоит в том, чтобы объединить старую функциональность в новую DLL, которая импортирует старую.
Вы должны сделать это так же, как взломщики игр и приложений: используйте дизассемблер и взломайте код ассемблера.
Вы не можете превратить мясо обратно в животное, и даже если бы вы могли, у вас было бы мертвое животное: P
Если это было сделано в .NET, то почему бы не использовать dotNet Reflector.