Joker_vD писал(а):
b099ard писал(а):
з.ы.Есть такая программа IDA Pro.
Есть. Сам ей пользуюсь. Но это полуавтоматический дизассемблер. К тому же она не может
восстановить исходник, поскольку при компиляции очень много информации об исходнике теряется безвозвратно (например, имена всех объектов), к тому же существует много исходников, компилирующихся в одинаковую программу. Так что идеал — это получение одного из возможных исходников.
На самом деле IDA Pro очень мощный инструмент, даже в своем демо-варианте. Исходник он восстановить может, только на уровне ассемблера. Есть попытки восстановления бинарного кода на уровне Си (плагин hexrays.plw IDA Pro), специалистам даже эти ограниченные возможности очень сильно помогают, тем более что по американским законам, авторское право на дизассемблерный код, восстановленный на уровне Си уже принадлежит тому, кто это проделал, а не автору бинарника. Хороший пример
Проект ReactOS. Ребята дизассемблировали частично Windows NT (похоже, Win2000) до уровня создания Live-CD, что, откровенно говоря, очень впечатляет. Такие проекты нужно, по-моему, тайно спонсировать на государственном уровне
. Для личных практических целей вполне достаточно восстановления бинарного кода на уровне ассемблера. Примеры можете посмотреть в
проекте Erfaren. Если знаете ассемблер, то тогда мифы о «безвозвратной потере информации при компиляции бинарного кода» уйдут в прошлое. Достаточно узнать о технологии Flirt Ida Pro.
Joker_vD писал(а):
Кстати, если тут кто-то хорошо в таком разбирается, как насчет итерационного процесса? По программе как-то набрасываем исходник, компилируем его, сравниваем, по различиям дорабатываем исходник, снова компилируем, сравниваем, дорабатываем и т.д.
Проще восстановить исходный бинарный код на уровне ассемблера, который уже можно модифицировать на любом уровне
. Это легко осуществить (специалисту!) за пару недель даже для мегабайтного экзешника или длл-ки.