Обратный инженер C ++ DLL - PullRequest
       19

Обратный инженер C ++ DLL

8 голосов
/ 08 марта 2009

У меня есть небольшая утилита, которая была изначально написана в VS2005.

Мне нужно внести небольшое изменение, но исходный код для одной из библиотек где-то потерян.

Существует ли бесплатный или недорогой инструмент для обратного инжиниринга DLL обратно в код C ++.

Ответы [ 8 ]

12 голосов
/ 08 марта 2009

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

6 голосов
/ 08 марта 2009

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

Посетите домашнюю страницу OllyDbg здесь

PS: В прошлом взломщики использовали SoftICE из NuMega для отладки в исполняемый файл и получения снимка значений регистров. SoftICE был продвинутым отладчиком. Это был определенно любимый инструмент для взломщиков. Я не знаю о нынешнем статусе продукта. Сайт NuMega не имел информации об этом. Возможно, я упустил это, но не смог найти. Я рекомендую вам приобрести устаревшую версию (4.0x) SoftICE и применить исправление WindowsXP для SoftICE. Работа с SoftICE - это что-то вроде «опыта».

Подробнее: Реверс: Секреты обратного инжиниринга Эльдад Эйлам

3 голосов
/ 08 марта 2009

Я не знаю точную ситуацию, в которой вы находитесь, и сколько функций DLL реализует для вашего приложения. Но я бы сказал, что в большинстве случаев было бы лучше переписать отсутствующую DLL на основе известных функций.

Это особенно верно, если у вас есть некоторая документация для этого.

Попытка выполнить обратный инжиниринг двоичного кода в ассемблер, затем в C ++, а затем попытаться изменить его, чтобы обеспечить существующую функциональность, в большинстве случаев отнимает много времени, а может быть, даже невозможно.

1 голос
/ 08 марта 2009

Немного в зависимости от вашей ситуации, я бы оставил устаревшую / бинарную DLL как есть и написал бы DLL-оболочку, которая изменит и / или добавит любое дополнительное поведение.

Идея состоит в том, чтобы объединить старую функциональность в новую DLL, которая импортирует старую.

1 голос
/ 08 марта 2009

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

0 голосов
/ 05 октября 2009

Если это было сделано в .NET, то почему бы не использовать отражатель dotNet.

0 голосов
/ 08 марта 2009

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

0 голосов
/ 08 марта 2009

Вы не можете превратить мясо обратно в животное, и даже если бы вы могли, вы бы получили мертвое животное: P

...