|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Апр 6, 2004 18:55:13 Знатоки теории компиляции, компиляторов и т.п. Ткните меня носом в какую-нибудь литературу или что-нибудь в этом духе. Мне надо восстановить исходный код (в компилируемом виде - идентичности, понятное дело, не добиться), имея на руках промежуточную форму, например, тройки, четверки и т.п. Это возможно теоретически? |
|
|
Дата: Апр 6, 2004 23:15:31 А что? Каждая тройка может быть вполне тривиально переведена на любой процедурный язык программирования. Даже компилироваться будет... :))) Также задача существенно зависит от того, прошел ли код через оптимизатор, который мог удалить индуктивные переменные и сделать прочие страшные вещи. Насколько я понимаю, у тебя уже есть "хороший учебник по компиляторам". Вот его и надо читать, особенно главу про оптимизацию, и уделив пристальное внимание такому понятию, как ДОМИНАТОР. По дереву доминаторов можно восстановить такие высокоуровневые структуры, как условные операторы, циклы и подпрограммы... Также в этой книге в конце каждой главы есть аннотированные в вольном стиле списки литературы, всякие CACM-ы, JACM-ы читать - не перечитать... :) Вообще, такими вещами наверное имеет смысл заниматься, поимев сначала опыт написания компиляторов. Есть таковой? Можно еще попробовать помучить Доктора Голову на предмет того как у них поставлены на поток разборки. У меня есть стойкое подозрение, что без подобного рода тулз ("для внутреннего употребления") они бы вряд ли достигали такой производительности в своем деле... |
|
|
Дата: Апр 6, 2004 23:49:37 Во-первых, спасибо, что ответил. Теперь поехали. Также задача существенно зависит от того, прошел ли код через оптимизатор Речь идет о восстановлении кода в компилированных перловских скриптах. И оптимизатор там присутствует, да. peephole optimizer, который может гупать в пределах двух смежных опкодов. Вот его и надо читать, особенно главу про оптимизацию, и уделив пристальное внимание такому понятию, как ДОМИНАТОР. Что это такое - я не знаю, но почитаю. Вообще, такими вещами наверное имеет смысл заниматься, поимев сначала опыт написания компиляторов. Есть таковой? И да, и нет. Да, потому что в состоянии написать что-то простое для YACC, втырить туда LEX и получить что-нибудь внятное. Книги есть и что читать тоже есть. Буду разбираться. Что до написания компилятора с нуля - не могу. Здоровья не хватит. Я не думаю, что у кого-нибудь здесь хватит здоровья на подобное деяние с нуля. Даже при обладании теорией. |
|
|
Дата: Апр 6, 2004 23:50:20 Вот копия моего поста на реверсинге: Попалась мне защита, основанная на скомпилированных перловских скриптах. Уже неделю усиленно разбираюсь во внутреннем строении перла - токенизатор, YACC, опкода на виртуальной машине и т.п. В общем, чего эти ребята сделали. Взяли перловский скрипт, взяли perlcc. Получили сишный файл. Внутри этого файла есть ф-ция perl_run, а есть функция, которая готовит список байт-кодов. В файле в этой подготовительной функции инструкции идут сплошняком - там нет ни jz, ни jnz и т.п. Есть только Perl API и запихивание опкодов по структурам. Далее perl_run начинает пробежку по этим структурам (если кому любопытно - файл run.c в дистрибутиве перла). Так вот, я могу получить сброшенный в лог список этих опкодов. Теперь вопросы. 1) Если кто знаком с теорией компиляции. Как можно из троек/четверок воссоздать исходный код, если это вообще возможно в принципе. Применительно к данному случаю. Если я располагаю полным знанием о структуре опкодов, скаляров, массивов и хешей (и т.п.), а также знаю как исполнялась программа, можно ли как-то восстановить исходный код? 2) Как это падчить? Если кому совсем любопытно, то перл можно заставить выдать последовательность опкодов, исполненных программой. Надо набрать perl -Dtr filename.pl. Для этого требуется perl, собранный с ключом -DDEBUGGING. Надо скачать сорцы с activestate.com, прочитать два файла (в случае виндузы) - README.w32 и makefile в директории win32. Собрать перл при помощи nmake (можно и не только ей, но у меня VS.NET) и проинсталлировать nmake install. Потом ручками пропишите PATH и соассоциируете pl-расширение с перловским интерпретатором. Так вот, последовательность опкодов известна, структура любого данного опкода известна, о данных тоже кое-что известно, как получить исходный код? Взять лог исполнения, написать перловскую программу, которая делает... что? |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.057 |