eXeL@B —› Софт, инструменты —› Interactive Delphi Reconstructor (IDR). Миттельшпиль |
<< 1 ... 18 . 19 . 20 . 21 . 22 . 23 . 24 . 25 . 26 . 27 . 28 ... 47 . 48 . >> |
Посл.ответ | Сообщение |
|
Создано: 06 декабря 2009 17:29 · Поправил: crypto · Личное сообщение · #1 IDR (Interactive Delphi Reconstructor) – декомпилятор исполняемых файлов (EXE) и динамических библиотек (DLL), написанных на языке Delphi и выполняемых в среде 32х-разрядных операционных систем Windows. Программа, прежде всего, предназначена для компаний, занимающихся разработкой антивирусного программного обеспечения. Она также может в значительной мере помочь программистам в восстановлении утраченных исходных текстов программ. Текущей версией программы могут обрабатываться файлы (как GUI, так и консольных приложений), скомпилированные компиляторами версий Delphi2 – Delphi2010. Ведется работа по поддержке Дельфи 2011. Конечной целью проекта является разработка программы, способной восстановить большую часть исходных Delphi-текстов из скомпилированного файла, но пока IDR, как и другие Delphi-декомпиляторы, сделать этого не может. Тем не менее, IDR может значительно облегчить такой процесс. По сравнению с другими декомпиляторами анализ, выполненный IDR, отличается наибольшей полнотой и достоверностью. Кроме того, высокая интерактивность делает работу с программой комфортной и (не побоимся этого слова) приятной. IDR выполняет статический анализ (анализируемый файл не запускается на выполнение), что позволяет безопасно изучать вирусы, трояны и прочие приложения, запуск которых опасен или нежелателен. Программа не требует установки и не делает никаких записей в реестр Windows. Официальный сайт: [Note] Недоступен после трагической Гитхаб Скачать: Dropbox автора https://www.dropbox.com/sh/9ran313nidqtagb/AADl_m_9GVYSiXUviZtDQWQHa?dl=0 Актуальная версия программы: Внимание! Требует наличия вспомогательных файлов и баз знаний!!! Базы данных качать по Для работы необходимо скачать базу знаний + последнюю версию программы |
|
Создано: 18 августа 2011 22:31 · Личное сообщение · #2 |
|
Создано: 19 августа 2011 09:26 · Личное сообщение · #3 Поясни принцип написания. Выковыривать паттерны в базу или работа с массивами от дизасма? Интерфейс какой то есть для доступа к дизассемблированному коду, или самому в отладчике ковырять? Формат делать не хочется в смысле что вообще делать не хочешь или надо помочь? В общем распиши подробнее, а то так непонятно что требуется вообще. ----- Yann Tiersen best and do not fuck |
|
Создано: 19 августа 2011 11:08 · Личное сообщение · #4 PE_Kill Декомпилятор выводит исходный текст с мусором, который "на лету" достаточно сложно обрабатывать, поэтому хочется, чтобы некий обработчик (постпроцессор) преобразовал его в нормальный текст. Вот пример: полученный текст Code:
После постпроцессора должно быть так: Code:
То есть нужно удалить мусор (промежуточные присваивания), заменить некоторые значения регистров или локальных переменных, заменить вызовы вроде Font.SetColor на присваивания (SetColor - процедура, сопоставленная свойству Color). Это в общих чертах, пока у меня нет полного описания формата, потому что еще не все конструкции реализованы, но задача уже может быть поставлена. Формат я опишу, речь шла о самом постпроцессоре, это я так коротко выразился. |
|
Создано: 19 августа 2011 11:36 · Личное сообщение · #5 crypto, ты предлагаешь постпроцессор для текстового представления, я все правильно понял? Это же потребуется парсинг и еще ряд нелепых действий. Если адекватно организовать внутреннее представление кода, то можно избежать "проксирования" через текст. Хотя, в свое время именно этим (долгим) путем действовал с DCU обработкой по наработкам Хмельнова. PS. Мне жаль, что снова не могу толком помочь, отвергаю билдер всеми фибрами. Каждый раз притягивает к проекту и отдаю отчет, что ты в адеквате, но руки опускаются. |
|
Создано: 19 августа 2011 12:37 · Поправил: crypto · Личное сообщение · #6 NaumLeNet Привет! Давненько не пересекались. Ты правильно понял, именно для текстового представления. Наверное можно сочинить промежуточные пикоды, но на это времени нет. Жаль, что ты так категоричен по отношению к Билдеру, но переписать под Дельфи я не в силах. ЗЫ Могу предложить вариант - отдаю тебе исходники и забываю о проекте. А ты делаешь с ними, что хочешь |
|
Создано: 19 августа 2011 12:45 · Личное сообщение · #7 |
|
Создано: 19 августа 2011 16:26 · Личное сообщение · #8 |
|
Создано: 19 августа 2011 16:38 · Поправил: reversecode · Личное сообщение · #9 |
|
Создано: 19 августа 2011 17:03 · Личное сообщение · #10 |
|
Создано: 19 августа 2011 17:05 · Личное сообщение · #11 |
|
Создано: 19 августа 2011 21:47 · Личное сообщение · #12 Очередное обновление exe Исправлен баг импорта имен из idp-файла. Добавлено сообщение о несоответствии файлов; Добавлен просмотр содержимого ресурсной строки при двойном клике на перечне элементов юнита (<ResString>); Исправлена эвристика анализатора (некоторые процедуры ошибочно классифицировались функциями); В CodeViewer синим цветом выделены начальные адреса циклических конструкций; Исправлен баг импортера имен; Unicode String отображаются корректно. |
|
Создано: 19 августа 2011 22:08 · Поправил: Kiev78 · Личное сообщение · #13 |
|
Создано: 20 августа 2011 12:00 · Поправил: Kiev78 · Личное сообщение · #14 |
|
Создано: 20 августа 2011 12:28 · Личное сообщение · #15 |
|
Создано: 20 августа 2011 12:40 · Личное сообщение · #16 crypto пишет: Декомпилятор выводит исходный текст с мусором, который "на лету" достаточно сложно обрабатывать, поэтому хочется, чтобы некий обработчик (постпроцессор) преобразовал его в нормальный текст. Декомпилятор на основе чего выводит такой код? Он строит code flow graph(CFG)? Строит data flow graph(DFG)? Умеет ли декомпилер пользоваться инфой о сигнатуре(тип передаваемых параметров и возвр. результата) библиотечных функций? |
|
Создано: 22 августа 2011 15:50 · Личное сообщение · #17 Kiev78 Хм, спасибо, что откликнулся. Но тут проблемы возникают - формата еще нет. Опять же с заменой вызовов вроде Font.SetColor на присваивания SetColor - это еще нужно выяснить (в базе знаний), что SetColor устанавливает значение свойства Color в классе TFont. Можно конечно задать эвристику: если процедура начинается на Set (Get), то это и есть присваивание или взятие значения свойства, но можно промахнуться (если в свойствах прописано "нестандартное" имя). В любом случае спасибо, буду иметь в виду, что в принципе ты не возражаешь поучаствовать Jonny Декомпилировать кое-что может. Пользоваться прототипами умеет и даже требует, чтобы прототипы были в наличии (ну а для библиотечных функций, естественно, прототипы уже есть, могут быть только проблемы с системными вызовами, которые начинаются на '@' - здесь еще много пропусков). |
|
Создано: 22 августа 2011 18:20 · Поправил: Kiev78 · Личное сообщение · #18 |
|
Создано: 22 августа 2011 20:40 · Поправил: Kiev78 · Личное сообщение · #19 |
|
Создано: 22 августа 2011 20:48 · Личное сообщение · #20 |
|
Создано: 22 августа 2011 21:00 · Поправил: Kiev78 · Личное сообщение · #21 |
|
Создано: 22 августа 2011 22:43 · Личное сообщение · #22 Kiev78 пишет: что-нибудь лучше и проще в реализации, будет интересно выслушать Во первых нужно использовать изначально бинарные данные а не текстовые, но это к автору. Во вторых, сканирующие функции для строк будут работать в несколько раз быстрее чем регулярки. В данной задаче действительно регулярки лучше, но если разбирать вот такие небольшие сорсы, если нужно обрабатывать несколько (десятков, сотен) тысяч строк сорсов, нужны сканирующие функции. Но это лишь теория, у меня не было желания обсерать твою реализацию. Я лишь оспорил высказывание "Как говорится, регулярные выражения рулят!". Ну и высказал свое мнение об оптимизации. Но, т.к. кроме твоего алго на данный момент нет вообще никакого, то и оптимизировать, да и собственно обсуждать то нечего. ----- Yann Tiersen best and do not fuck | Сообщение посчитали полезным: NaumLeNet |
|
Создано: 22 августа 2011 22:51 · Личное сообщение · #23 |
|
Создано: 23 августа 2011 00:17 · Поправил: Kiev78 · Личное сообщение · #24 |
|
Создано: 23 августа 2011 03:47 · Личное сообщение · #25 Kiev78 Да не доказывай ты ничего Ты хотябы что-то сделал, и оно даже работает. Когда будут реализации от кого-то еще и также бесплатно - тогда имеет смысл спорить и что-то доказывать. Я свой вариант решения задачи предложил crypto. Решение за ним. Но на мой взгляд такое разделение задач бессмысленно. Нужно постпроцессор своего кода всегда писать самому, дабы иметь возможность в будущем его дорабатывать и подстраивать под новые элементы декомпилятора. Есть еще вариант (крайний случай так сказать) - нанимать того, кто напишет и отдаст в сорцах на нужном языке. Все остальные варианты ведут в тупик ибо свой проект нужен только себе самому (ну и пользователям), никто не будет тратить свое время на чужой проект (а если и будет то временно а потом эту DLL, плагин или что либо еще не переписать ни доработать ибо сорцы у автора, а автор давно забил на проект). ----- Никогда не делай то, что возможно. Стремись сделать то что невозможно впринципе! |
|
Создано: 23 августа 2011 10:00 · Личное сообщение · #26 |
|
Создано: 23 августа 2011 11:03 · Личное сообщение · #27 Kiev78 Подкину тебе фрагмент побольше и посложнее, но позже. Посмотрим, что из этого выйдет, сейчас сложно сказать, слишком мало информации для размышления. На времени обработки не заморачивайся - все-равно полную декомпиляцию никто махом делать не будет, нужно основательно поработать над проектом, чтобы потом одним нажатием кнопки превратить его в исходники, скорее всего будут декомпилироваться отдельные процедуры, а здесь уже скорость обработки не очень важна - секунды или десятки секунд. |
|
Создано: 26 августа 2011 12:37 · Поправил: crypto · Личное сообщение · #28 Что-то никак не могу догадаться, может быть спецы по Дельфи помогут? Есть фрагмент кода: Code:
Ясно, что это простой цикл, а вот каким должен быть тип переменной gvar_005EEAF0 и каким образом в приведенном фрагменте появилась инструкция add ebx,4 мне не очень понятно. Я так думаю, что это массив структур вроде PlayerIPAddress:String; PlayerName:String; Так ли это? Меня смущает add ebx,4, как-то оно не на месте (обычно проверка счетчика цикла в Дельфи сразу следует за инкрементом или декрементом переменной цикла). |
|
Создано: 26 августа 2011 12:49 · Поправил: Av0id · Личное сообщение · #29 |
|
Создано: 26 августа 2011 13:49 · Личное сообщение · #30 |
|
Создано: 26 августа 2011 14:04 · Поправил: PE_Kill · Личное сообщение · #31 crypto Code:
----- Yann Tiersen best and do not fuck | Сообщение посчитали полезным: crypto |
<< 1 ... 18 . 19 . 20 . 21 . 22 . 23 . 24 . 25 . 26 . 27 . 28 ... 47 . 48 . >> |
eXeL@B —› Софт, инструменты —› Interactive Delphi Reconstructor (IDR). Миттельшпиль |
Эта тема закрыта. Ответы больше не принимаются. |