Сейчас на форуме: -Sanchez-, Alf, Adler, Rio (+5 невидимых)

 eXeL@B —› Софт, инструменты —› Interactive Delphi Reconstructor (IDR). Миттельшпиль
<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . 17 . 18 . 19 ... 47 . 48 . >>
Посл.ответ Сообщение

Ранг: 188.1 (ветеран), 419thx
Активность: 0.140
Статус: Участник

Создано: 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.


Официальный сайт:
kpnc.org/idr32
[Note] Недоступен после трагической гибели Криса (RIP)

Гитхаб
Github sources

Скачать:
Страница загрузки

Dropbox автора
https://www.dropbox.com/sh/9ran313nidqtagb/AADl_m_9GVYSiXUviZtDQWQHa?dl=0

Актуальная версия программы:

Исполняемый файл
Внимание! Требует наличия вспомогательных файлов и баз знаний!!!

Базы данных качать по
ссылке.

Для работы необходимо скачать базу знаний + последнюю версию программы



Ранг: 188.1 (ветеран), 419thx
Активность: 0.140
Статус: Участник

Создано: 14 сентября 2010 11:33 · Поправил: crypto
· Личное сообщение · #2

requte
Падала при попытке просмотра, но, как выяснилось, на ерунде. Кусок там здоровенный - где-то (на память) с адреса порядка 800000h по 1000000h. Он интерпретируется как нераспознанные данные. Просто интересно стало, можно ли с ним что-то сделать в рамках IDR.




Ранг: 170.1 (ветеран), 96thx
Активность: 0.090.01
Статус: Участник

Создано: 28 сентября 2010 07:03 · Поправил: gazlan
· Личное сообщение · #3

Выбрал время посмотреть.

IDR выполняет статический анализ

В подавляющем большинстве случаев дизассемблер используется в связке с отладчиком. И чем больше информации он может разделить с ним (или другими инструментами), тем продуктивнее работа.

1. Вкладки "Units", "RTTI", "Forms" - не хватает выгрузки в текстовый файл списков по правому клику.
2. Вкладка "ClassViewer". Дерево классов это замечательно, но нет не только выгрузки в текстовый файл, но даже и просто копирования хотя бы названий.
3. Вкладка "Strings". Ну, вы уже догадались.
4. Меню "Tools | Map generator". В отличие от DeDe, нет поясняющих маркеров '->', '<-', '*'. Весьма не помешали бы.
5. В сгенерированной карте не указан виртуальный адрес первого сегмента (CODE). Между тем, он не всегда дефолтный (особенно, для DLL). Это затрудняет автоматическую обработку карты каким-либо скриптом.
6. В той же карте, имена функций указаны БЕЗ прототипов - why??
Весь интерес в загрузке этой карты в IDA или SI, и прототипы функций будут очень нелишними.
7. DeDe умеет аттачиться к уже запущенному процессу. Не помешало бы. Резоны понятны.



Ранг: 188.1 (ветеран), 419thx
Активность: 0.140
Статус: Участник

Создано: 28 сентября 2010 20:01
· Личное сообщение · #4

gazlan
Сделать выгрузку в файл совсем не сложно, но я как-то не задумывался о необходимости таких списков. Ну, скажем, список юнитов я планировал использовать, чтобы сгенерировать базу знаний конкретно для изучаемой программы (в нее можно было бы включить специфические юниты, которые в существующие базы не входят).
А что за поясняющие маркеры? Я, видишь ли, редко пользуюсь отладчиками с использованием карты.
С DLL еще есть недоработки (пока не используется информация об экпортируемых функциях), про адрес - это я учту.
Про прототипы уже говорили - добавить не проблема.
Аттачиться - быть может будет плагин, который кто-нибудь сваяет.
ЗЫ
Ну а положительное (кроме дерева классов) в программе что-нибудь есть?




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 28 сентября 2010 20:05
· Личное сообщение · #5

сути маркеров я так и не пойму, ида тоже не делает их, и ничего, удобно... gazlan проаргументируй их необходимость, кроме как то, что деде так делает...

-----
Лучше быть одиноким, но свободным © $me




Ранг: 5.4 (гость), 4thx
Активность: 0=0
Статус: Участник

Создано: 28 сентября 2010 20:18
· Личное сообщение · #6

IDR штука классная, уже не раз помогала.
crypto если не сложно добавь ассоциацию файлов .idp

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




Ранг: 170.1 (ветеран), 96thx
Активность: 0.090.01
Статус: Участник

Создано: 28 сентября 2010 21:04 · Поправил: gazlan
· Личное сообщение · #7

crypto пишет:
Ну а положительное (кроме дерева классов) в программе что-нибудь есть?

Чтобы ответить полноценно, нужно бы поработать. Я только на пробу декомпилировал простенькую программу - что попалось под руку. Понравилось, что есть сохранение и повторная загрузка проекта, визуальный просмотр форм - не надо рыскать по DFM и скриптам. Прочее (кроме уже сказанного) интересовало мало, тк основной дизассемблер для меня - IDA и все что требуется от остальных - это дать список адресов обработчиков. Т..е. на дизасм я даже не смотрел.

А что за поясняющие маркеры?

Например, так:
Code:
  1. 0001:0009EAB7       ->System.@HandleFinally;
  2. 0001:0009EAE4       <-TForm1@actConvJPGExecute
  3. 0001:0009EAE7       *TForm1.cbConvertInJPG:TCheckBox


Code:
  1. ->  - CALL или JMP - вызов процедуры / функции
  2. // CODE:0049FAB7                 jmp     unknown_libname_55 ; [ref] System.@HandleFinally;
  3.  
  4. <-  - Собственно тело процедуры / функции
  5. // CODE:0049FAE4 TForm1@actConvJPGExecute proc near      ; DATA XREF: CODE:0049E43B
  6.  
  7. *    - Распознанная ссылка на член класса
  8. // CODE:0049FAE7                 mov     eax, [ebx+338h] ; [ctrl] TForm1.cbConvertInJPG : TCheckBox


Таким образом, без заглядывания в дизассемблерный листинг, по карте можно сразу найти интересующие вызовы. Особенно полезны при этом ссылки на члены класса, так как вызовы функций и так будут удовлетворительно распознаны Идой.

Пример (импортировано из списка ссылок, созданного DeDe):

Code:
  1. CODE:0049E998                 mov     eax, [ebx+354h] ; [ctrl] TForm1.cbDOS : TCheckBox
  2. CODE:0049E99E                 cmp     byte ptr [eax+212h], 1 ; [fld] TCheckBox.State : TCheckBoxState
  3. CODE:0049E9A5                 mov     eax, ds:off_4A1F9C
  4. CODE:0049E9AA                 setz    byte ptr [eax]
  5. CODE:0049E9AD                 mov     eax, [ebx+308h] ; [ctrl] TForm1.cbConvertInWord : TCheckBox


В эташе пример, взятый из DeIDA package (старый, еще до того, как в DeDe появились маркеры).

e1a9_28.09.2010_CRACKLAB.rU.tgz - example.rar



Ранг: 188.1 (ветеран), 419thx
Активность: 0.140
Статус: Участник

Создано: 28 сентября 2010 21:23
· Личное сообщение · #8

gazlan
Зря ты на дизасм не посмотрел... А если бы посмотрел, то, например, увидел бы, что маркер * в IDR по сути не нужен - у распознанного члена класса есть комментарий. Еще бы ты увидел список распознанных членов класса, для которых есть списки ссылок, по которым можно переходить в нужное место кода (кстати, в новом билде в списке ссылок будут маркеры, по которым можно будет узнать места кода, в которых происходит присваивание этихсамых членов) - я что-то не припомню, в каких программах эта фича есть. А еще бы ты увидел распознанные косвенные вызовы виртуальных методов классов, динамических методов (через вызов CallDynaInst), имел бы возможность посмотреть прототип любой функции из базы знаний, информацию о типе (в том числе поля рекордов и коассов).
ЗЫ
А в новом билде появятся две новых фичи, связанных с просмотром форм:
1. Список всех событий всех контролов формы (и самой формы в том числе) (нажатие правой клавиши мыши с нажатым Alt)
2. Про вторую не скажу пока, только намекну, что она позволит значительно улучшить "просматриваемость" форм (я с ее помощью могу теперь смотреть формы, для которых прежний визуализатор показывал пустую форму)
И м.б.
3. Возможность выбора "недоступных" закладок в контролах вроде TNotebook, TPageControl




Ранг: 170.1 (ветеран), 96thx
Активность: 0.090.01
Статус: Участник

Создано: 28 сентября 2010 21:31 · Поправил: gazlan
· Личное сообщение · #9

crypto пишет:
то, например, увидел бы

Все это очень хорошо. И если будет еще добавлена возможность экспорта этой информации в текстовый файл станет еще лучше. Потому что при всех удобствах вьверов и визуализаторов, старый добрый grep по проекту все еще остается самым простым и быстрым способом отыскания "болевой точки".

Повторюсь, чтобы не быть понятым неправильно.

Эстеты, наверняка, обойдутся "голым" Hex-редактором и "дизассемблированием в уме". Остальным время дорого.

Если есть инструмент, решающий специфическую проблему лучше других - он будет использован. Такм образом, даже при анализе одних только Delphi-файлов, во многих случаях, будет задействован не только IDR, например, а набор инструментов (отладчик, редактор ресурсов итд). И если этот "набор" можно превратить в "связку", так что выход одного используется другим, то удобство и скорость работы возрастают. Как пример: карту от DeDe (или exe2dpr) "скармливаем" IDA, исправляем и переименовываем как необходимо, карта уже от IDA конвертируется в формат, пригодный для SI - и, вуаля, работаем в отладчике уже с нашими символьными именами.

Пока нет экспорта в совместимый формат (лучше всего в plain text, обладающий, как $ уникальной конвертируемостью во все остальное), утилита (сколь угодно хорошая) остается "вещью в себе". Экспорт и импорт делают ее частью универсума.



Ранг: 188.1 (ветеран), 419thx
Активность: 0.140
Статус: Участник

Создано: 28 сентября 2010 22:42
· Личное сообщение · #10

gazlan
Повторюсь, чтобы не быть понятым неправильно.

Спасибо, это я все понимаю, постараюсь учесть твои замечания.



Ранг: 18.8 (новичок), 21thx
Активность: 0.030
Статус: Участник

Создано: 29 сентября 2010 00:27
· Личное сообщение · #11

crypto, есть предложение сделать интерфейс проги в виде объекта, тобиш Вы создадите класс и/или объект, описание как с ним работать, а энтузиасты, не забывая про Вас, смогут сделать добротный интерфейс)) Как такой вариант?)) Разумеется, что коды открывать не нужно, нужны лишь DCU модули



Ранг: 188.1 (ветеран), 419thx
Активность: 0.140
Статус: Участник

Создано: 29 сентября 2010 18:14
· Личное сообщение · #12

Error13Tracer
А где такие энтузиасты? Их нет у меня.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 06 октября 2010 09:29
· Личное сообщение · #13

Слил потестил на реальных проектах (на простеньких, где и Ольки/ИДЫ хватит всё работает).

Не работает на программах, скомпиленых в рантайм режиме. Говорит что не Delphi приложение.
Не работает с программами с покореженными секциями, например, если все секции слиты в одну.

Ни одну из 7 опробованных программ не открыл. DeDe открыл все (пусть не все корректно, но нужное я от него получил).

При проблеме с секциями выводит, что EP неверный, при вводе адреса EP падает с ошибкой доступа к памяти. Кстати не указано что вводить RVA или VA (вводил и так и так), не проверяется принадлежность адреса загружаемому образу.

Итог: К сожалению для реальных проектов софт пока не подходит, надеюсь в скором времени это исправится.

Пожелание: При невозможности корректно вскрыть файл, вытащить из него хоть что то. Хотябы названия юнитов и формы. Даже ресторатор (не предназначеный для таких целей) показывает юниты, а софт под это заточенный вообще не показывает ничего.

-----
Yann Tiersen best and do not fuck





Ранг: 631.1 (!), 62thx
Активность: 0.370.01
Статус: Участник
Автор VB Decompiler

Создано: 06 октября 2010 13:36
· Личное сообщение · #14

PE_Kill пишет:
Ни одну из 7 опробованных программ не открыл. DeDe открыл все (пусть не все корректно, но нужное я от него получил).

На моем декомпиле не проверял свои файлы? Интересен результат в Lite версии.

-----
Никогда не делай то, что возможно. Стремись сделать то что невозможно впринципе!





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 06 октября 2010 14:04
· Личное сообщение · #15

GPcH а где его взять? www.de-decompiler.com/ в дауне, у тебя на сайте о нем вообще ни слова.

-----
Yann Tiersen best and do not fuck





Ранг: 631.1 (!), 62thx
Активность: 0.370.01
Статус: Участник
Автор VB Decompiler

Создано: 06 октября 2010 14:24
· Личное сообщение · #16

PE_Kill

Ушло в личку

-----
Никогда не делай то, что возможно. Стремись сделать то что невозможно впринципе!





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 06 октября 2010 14:44
· Личное сообщение · #17

Проверил. Сильно удивлен. Мало того, что он открыл все файлы, так еще и выдрал с них то, что DeDe в упор не видел. Ему пофиг на объединение секций и на рантайм мод. Рантайм правда открывает с ошибками вида:

Code:
  1. Invalid procedure call or argument
  2.  
  3. = 100
  4.  
  5. = 217
  6.  
  7. Class = TfrReport
  8.  
  9. sName = ReportForm
  10.  
  11. sProperty = {
  12.  
  13.        190000


Code:
  1. ---------------------------
  2. Error
  3. ---------------------------
  4. Property with index 97 not found
  5. ---------------------------
  6. ОК   
  7. ---------------------------


Но всё таки открывает и декомпилит.

-----
Yann Tiersen best and do not fuck




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 06 октября 2010 14:53
· Личное сообщение · #18

PE_Kill
Прошу прощения за оффтоп, но могу сказать, что GPcH мне показывал результаты не Lite версии - это шедевр) - восстанавливает исходный код. Т.е. не ассемблер, а нормальный код на делфи. Поэтому я смотрю на crypto и как долго он пишет свой инструмент, и пока только остаются слабые надежды на более сильные результаты. И GUI пока не так удобен, как хотелось бы.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 06 октября 2010 15:07
· Личное сообщение · #19

int насчет GUI даже не обсуждается, у GPcH гуи удобнее и подсветка человеческая. Жалко что проект закрыл, я бы даже лицензию купил.

-----
Yann Tiersen best and do not fuck





Ранг: 631.1 (!), 62thx
Активность: 0.370.01
Статус: Участник
Автор VB Decompiler

Создано: 06 октября 2010 15:24
· Личное сообщение · #20

PE_Kill

Скажу честно - я верю в crypto и верю что у него получится отличный проект. Кстати совсем недавно он поделился со мной наработками для разбора dcu новых версий дельфей, но я банально уже два месяца не могу найти время чтобы их портировать.

PE_Kill пишет:
Проверил. Сильно удивлен.


Самое смешное, что это билд 2007 года и оно работает Приятно чесслово. Спасибо за тест. Больше не оффтоплю.

-----
Никогда не делай то, что возможно. Стремись сделать то что невозможно впринципе!




Ранг: 188.1 (ветеран), 419thx
Активность: 0.140
Статус: Участник

Создано: 06 октября 2010 18:15 · Поправил: crypto
· Личное сообщение · #21

PE_Kill
Итог: К сожалению для реальных проектов софт пока не подходит
А на них (на реальных проектах) не пробовал потестировать? Например, можно взять theBat, Skype, Qip, Protector (by GPcH), Advertisizer (by PE_Kill - название мог и перепутать), ну и другие достойные программы.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 06 октября 2010 19:53
· Личное сообщение · #22

crypto ты извини, если обидел. Когда я говорил про реальные проекты, я имел ввиду те, с которыми я имею дело каждый день. Они либо запакованы и после анпака их IDR не открывает, либо скомпилены в райнтайм режиме и их тоже не открывает. А те, что ты перечислил не требуют ежедневного копания в них, да и если упакованы, то не извратно.

Т.е. вот например реальная задача. Программа запакована морфокриптодерьмопатчером. Дампим ее, пусть даже восстанавливаем до рабочего состояния (хотя и не обязательно). Дальше нужно узнать какой компонент/юнит использовался для шифрования. Запускаем IDR - он говорит это не Delphi. Запускаем DeDe, декомпиль от гпч, да даже ресторатор, и находим нужные нам данные.

Именно поэтому я и предложил:
PE_Kill пишет:
Пожелание: При невозможности корректно вскрыть файл, вытащить из него хоть что то. Хотябы названия юнитов и формы. Даже ресторатор (не предназначеный для таких целей) показывает юниты, а софт под это заточенный вообще не показывает ничего.


-----
Yann Tiersen best and do not fuck




Ранг: 188.1 (ветеран), 419thx
Активность: 0.140
Статус: Участник

Создано: 06 октября 2010 20:04
· Личное сообщение · #23

PE_Kill
А я как раз занимаюсь исключительно нормальными программами, распаковщики у меня за бортом. Если ты подскажешь, как правильно анализировать структуру сегментов таких "кривых" программ, буду весьма признателен. Пиши свои соображения мне в личку.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 06 октября 2010 20:24
· Личное сообщение · #24

Договорились

-----
Yann Tiersen best and do not fuck





Ранг: 631.1 (!), 62thx
Активность: 0.370.01
Статус: Участник
Автор VB Decompiler

Создано: 06 октября 2010 20:26
· Личное сообщение · #25

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

-----
Никогда не делай то, что возможно. Стремись сделать то что невозможно впринципе!




Ранг: 87.8 (постоянный), 10thx
Активность: 0.070
Статус: Участник

Создано: 08 октября 2010 21:18 · Поправил: gena-m
· Личное сообщение · #26

Например, можно взять theBat
Так и сделал взял "мышу", старая версия IDR обрабатывала мин 5 затем ошибка и довольно странная --> здесь ее скрин <--
Скачал поновее IDR вообще пишет файл не дельфовый --> скрин <--.

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

Автору большое спасибо за его труд.

-----
Надежда - есть худшее из зол, ибо она продлевает наши страдания.© Ф. Ницше





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 08 октября 2010 21:41 · Поправил: Isaev
· Личное сообщение · #27

int пишет:
GPcH мне показывал результаты не Lite версии - это шедевр) - восстанавливает исходный код. Т.е. не ассемблер, а нормальный код на делфи. Поэтому я смотрю на crypto и как долго он пишет свой инструмент, и пока только остаются слабые надежды на более сильные результаты.

Я бы учёл, что GPcH работал за мани, а crypto спасибо даже не каждый сказал
такие вещи пишутся не по срокам, а на досуге и для души, и предъявлять ещё претензии, мягко говоря, не красиво!

gena-m я может ошибаюсь, но мышь была всегда накрыта каким-то протом, если после распаковки не берёт, то это нормально

crypto Как всё-таки скопировать адрес из текста? Или так и не прикрутил?

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 188.1 (ветеран), 419thx
Активность: 0.140
Статус: Участник

Создано: 08 октября 2010 21:56 · Поправил: crypto
· Личное сообщение · #28

Isaev
Не прикрутил, однако, в ближайшее время сделаю - увлекся маленько..., может понравятся новые фичи, а может нет, поведение населения форума непредсказуемо... theBat у меня в последней версии стала вылетать по assert, встретилась ситуация, которую я еще не обработал, так что "мышь" пока оставьте в покое.
ЗЫ
Кстати, по-поводу "спасибо": на многих иностранных форумах есть возможность сказать автору топика "спасибо", почему бы здесь такое не сделать?




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 08 октября 2010 22:18 · Поправил: 4kusNick
· Личное сообщение · #29

Прога очень хорошая, к тому же, она развивается, и автор отзывчиво фиксит баги, за что ему большое спасибо. Мне довелось юзать прогу на нескольких оригинальных дельфовых проектах (не после анпака), и я остался доволен результатами, хоть и были маленькие неудобства и неприятности, которые, кстати, уже похоже учтены в готовящемся билде...

Так что, crypto, спасибо за достойный публичный инструмент, развивайте его дальше.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 188.1 (ветеран), 419thx
Активность: 0.140
Статус: Участник

Создано: 08 октября 2010 22:28
· Личное сообщение · #30

4kusNick
Доброе слово и коту приятно




Ранг: 631.1 (!), 62thx
Активность: 0.370.01
Статус: Участник
Автор VB Decompiler

Создано: 09 октября 2010 00:03
· Личное сообщение · #31

Isaev пишет:
Я бы учёл, что GPcH работал за мани, а crypto спасибо даже не каждый сказал


А я писал на дядю за мани, угу. И мне платили зарплату за декомпиль Особенно за Lite версию, о которой речь и которую тут сравнивают

PS: C остальным соглашусь, crypto молодец.

-----
Никогда не делай то, что возможно. Стремись сделать то что невозможно впринципе!



<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . 17 . 18 . 19 ... 47 . 48 . >>
 eXeL@B —› Софт, инструменты —› Interactive Delphi Reconstructor (IDR). Миттельшпиль
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати