Сейчас на форуме: -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
Статус: Участник

Создано: 26 июня 2011 20:28 · Поправил: crypto
· Личное сообщение · #2

Kiev78
Зачем ссылку стер? Я не успел закачать.
ЗЫ
Пароль я тебе и так дам, пиши на crypto2011@gmail.com

VodoleY
Долго же Вы скачивали "последнюю" версию. Тут народ уже поимел от меня бетку самой наисполедней версии.
ЗЫ
А присылать файлы, на которых ИДР глючит, я уже давно просил. Только вот шлют мало почему-то.



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

Создано: 26 июня 2011 22:13 · Поправил: Kiev78
· Личное сообщение · #3

---



Ранг: 133.4 (ветеран), 57thx
Активность: 0.110
Статус: Участник

Создано: 30 июня 2011 21:15
· Личное сообщение · #4

Софт обновился

| Сообщение посчитали полезным: SReg, _ruzmaz_, DimitarSerg, Isaev, tihiy_grom, sendersu

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

Создано: 01 июля 2011 11:58
· Личное сообщение · #5

Нажимаю на "магическую кнопочку F10" ничего не происходит - пустое окно. Исходный файл скомпилен в delphi7 без каких либо доп компонентов.



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

Создано: 01 июля 2011 12:17 · Поправил: crypto
· Личное сообщение · #6

japan
F10 вовсе не "магическая кнопочка". Интересно, увидят ее?
For all
Декомпилятор в процессе разработки, о чем он будет часто сообщать



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 01 июля 2011 21:17
· Личное сообщение · #7

crypto пишет:
Интересно, увидят ее?


push me которая? Это первое, что бросается в глаза. Сыро, но приятно, что работа ведётся.



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

Создано: 04 июля 2011 11:19 · Поправил: crypto
· Личное сообщение · #8

Добавлена "история"
1. Загрузка файлов скомпилированных в runtime-mode
2. Сохранение Дельфи-проекта (тексты процедур на ассемблере) в поддиректорию Projects "домашней" директории IDR
3. Добавлен инструмент преобразования числа из бинарного вида в вещественный формат
4. Редактирование функций (изменение прототипа, аргументы представляются в виде [var] Name:Type:[Size], где Size - размер аргумента = количество байт стека, занимаемых аргументом, по умолчанию 4 (можно не указывать)). После изменения прототипа выполняются дополнительные этапы анализа, поэтому эта опция может быть весьма полезна.
5. Копирование текущего адреса в закладках "CodeViewer", "Strings", "UnitItems" в буфер обмена
6. Отображение иконок на компонентах формы вроде TTimer, TOpenDialog и др. (для этого используется дополнительный (необязательный) файл Icons.dll)
7. Поиск в дереве компонент формы
8. Существенно усовершенствовано дерево компонент формы
9. Частичная декомпиляция текущей процедуры (ЭТАП РАЗРАБОТКИ!, декомпилируются только линейные процедуры, конструкции try-finally обрабатываются, требуется задание прототипа текущей процедуры (типы обязательно!) и прототипов вызываемых процедур). Возвращаемое значение в функциях не поддерживается.
Результат отображается в закладке "Source Code" и файле $$$.$$$ (в директории анализируемого исполняемого файла). В случае ошибок появляется предупреждение или исключение.
10. Исправлены некоторые баги анализатора и сохранения IDC-скрипта.
11. Исправлены некоторые баги загрузчика файла.

| Сообщение посчитали полезным: Gideon Vi, obfuskator, SReg, DimitarSerg, Av0id, 4kusNick, HandMill


Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 06 июля 2011 03:46 · Поправил: reversecode
· Личное сообщение · #9

появилась программка, поигался с новой версией IDR
что то генерация IDC вообще плохо
первый баг это сгенерировался в idc строка
Code:
  1. MakeNameEx(0x5BFFC0, "RTTI_5BFFC0_Int64_", 0);

он ее не понял и скрипт не выполнился
закомментировал ее
дальше когда уже скрипт почти выполнился
все обратно сбилось
где то idc накосячил в определении функции и в итоге

Code:
  1. CODE:0040A828                 push    ebx
  2. CODE:0040A829                 add     esp, 0FFFFFFF4h
  3. CODE:0040A82C                 mov     ebx, eax
  4. CODE:0040A82E                 mov     edx, esp
  5. CODE:0040A830                 mov     eax, ebx
  6. CODE:0040A832                 call    TryStrToBool
  7. CODE:0040A832 _str2bool_sub_40A828 endp
  8. CODE:0040A832
  9. CODE:0040A832 ; ---------------------------------------------------------------------------
  10. CODE:0040A837                 db  84h ; &#196;
  11. CODE:0040A838                 db 0C0h ; L
  12. CODE:0040A839                 db  75h ; u
  13. CODE:0040A83A                 db  19h
  14. CODE:0040A83B                 db  89h ; &#201;
  15. CODE:0040A83C                 db  5Ch ; \


может анализ все таки остаивть за ida? а скрипт пусть только функции переименовывает и комментарии раставляет?
потому что ida в своем проходе не ошиблась
там нормальная функция была
накосячил idc скрипт когда переопределял функции

ps естественно отдал файл



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 06 июля 2011 12:15
· Личное сообщение · #10

reversecode
закиньте автору свой екземпляр екзешки, чем больше костылей на ранней фазе, тем лучше




Ранг: 241.9 (наставник), 107thx
Активность: 0.140.01
Статус: Участник

Создано: 06 июля 2011 12:53
· Личное сообщение · #11

Как узнать пароль на 2010? И будет лт поддержка XE?



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

Создано: 06 июля 2011 14:02
· Личное сообщение · #12

Nightshade
В истории апдейтов написано: обращайтесь по адресу crypto2011@gmail.com
Будет, как только более менее разгребусь с декомпилятором



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

Создано: 06 июля 2011 15:49
· Личное сообщение · #13

reversecode
Code:
  1. MakeNameEx(0x5BFFC0, "RTTI_5BFFC0_Int64_", 0);

- это баг нахождения RTTI, фиксанут
После этого IDC скрипт сгенерился без проблем и указанного косяка в определении функции не было. Был сгенерен код:
Code:
  1. MakeNameEx(0x40A828, "StrToBool", 0x20);
  2. MakeComm(0x40A828, "function StrToBool(S:AnsiString):Boolean;");
  3. MakeCode(0x40A828);
  4. MakeCode(0x40A854);
  5. MakeFunction(0x40A828, 0x40A85C);

Здесь собственно форсируется нажатие клавиши 'C' (Code) на адресах перехода, чтобы избавиться от некоторых косяков IDA (может их и нет уже, но в моей старенькой версии есть).
Ты предлагаешь убрать последнюю строку?




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 06 июля 2011 16:03 · Поправил: reversecode
· Личное сообщение · #14

MakeNameEx(0x5BFFC0, "RTTI_5BFFC0_Int64_\", 0);
там был лишний или не правильный \, который и ломал
а то форум \ не отобразил

касательно самого idc
незнаю поняли ли мы друг друга
но С(code) не решает проблемы

смотри
есть две функции к примеру в IDA которые идут последовательно
IDA распознала их как две отдельные sub_XXX
но после запуска скрипта
эти две функции превращаются в одну! и точка входа во второую функцию вревращается в метку!
и все ссылки с других xref ломаются именно вот таким кодом

Code:
  1. CODE:0040A828                 push    ebx
  2. CODE:0040A829                 add     esp, 0FFFFFFF4h
  3. CODE:0040A82C                 mov     ebx, eax
  4. CODE:0040A82E                 mov     edx, esp
  5. CODE:0040A830                 mov     eax, ebx
  6. CODE:0040A832                 call    TryStrToBool
  7. CODE:0040A832 _str2bool_sub_40A828 endp
  8. CODE:0040A832
  9. CODE:0040A832 ; ---------------------------------------------------------------------------
  10. CODE:0040A837                 db  84h ; &#196;
  11. CODE:0040A838                 db 0C0h ; L
  12. CODE:0040A839                 db  75h ; u
  13. CODE:0040A83A                 db  19h
  14. CODE:0040A83B                 db  89h ; &#201;
  15. CODE:0040A83C                 db  5Ch ; \

обрати внимание на
Code:
  1. CODE:0040A832 ; ---------------------------------------------------------------------------

этот разделитель логически ломает функцию
и так же рекурсивно ломает все остальные вверх

и таких недо функций которые превращаются из одной в две или из 30 штук в одну
и там куча меток - в то время как это не метки а отдельные sub_xxx

вообщем к чему я веду
не надо очищать и заново анализировать
сделай что бы idc скрипт только переименовывал, но не очищал предыдущий анализ IDA
и касательно комменатриев по русским строкам, добавишь в idc?
может конечно новые версии ida уже и видят русские строки, но все же ранние версии этого не умеют

ксательно еще IDR
я пытался через буффер обмена скопировать вручную некоторые русские строки
вообщем в IDA они как квадратики копируются
хз, видимо между буфферами обмена какую то кодировку можно ввести?




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 06 июля 2011 16:05
· Личное сообщение · #15

crypto пишет:
Ты предлагаешь убрать последнюю строку?

ну скажем так, - да
и я предлагаю не проводить очистку и переанализ в idc, который стоит в начале
посмотри как сделан idc в декомпиле VB, он там ничего не чистит
просто накладывает обнаруженые функции



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

Создано: 06 июля 2011 18:07
· Личное сообщение · #16

reversecode
Сумбурно как-то изложено. Давай сначала. Я уже написал, что у меня после запуска idc-скрипта по адресу 0040A828 получается глрмальный код без всяких брейков, заканчивается, как положено, ret-ом. Давай я тебе завтра вышлю фикс и посмотрим, что получится.
И я против накладывания - ты и так знаешь, что ИДА очень плоха разбирает Борландовские файлы




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 06 июля 2011 18:19 · Поправил: reversecode
· Личное сообщение · #17

ну давай
версия ida кстати у тебя какая?
но только я точно видел и гулял hexrays по функциям после анализа ida
а вот после того как скрипт все очистил и начал свои функции переанализировать, - попрос зачем?
(достаточно было просто функцию переименовать в нужное имя которое нашел IDR)
функции побились, и теперь даже hexrays ни на одной не запускается
даже на выправленой руками, - видимо еще и стек как то побился, но я уже не разбирался

crypto пишет:
что ИДА очень плоха разбирает Борландовские файлы

еще раз, причем здесь борлановские?
ida хорошо находит все функции и правильно выставляет их начало и конец включая стек
твой idc ломает все это
если бы он просто наклал нужные имена, и оставил комментарии под функциями, было бы более чем достаточно

в дальнейшем, если ida какуюто функцию плохо нашла, в скрипте который бы ничего не ре-анализировал
после применения еще раз, фукнция бы переименовалась в найденую в IDR, не поламал всего предыдущего

там кстати есть еще вопрос с некоторыми именами переменных
например найдено имя dword_000101 которое переименовывается в gvar_232323, а коммент рядом говорит что это TForm_Reg
почему сразу не переименовать к примеру в gTForm_Reg ? понимаю что в делфи наверное так переменные не обызвают, но для анализа в ida было бы достаточно наглядно

идем дальше
к примеру уже есть переименованая переменаня gvar_232323
дальше в .data есть ссылка на нее в виде dword_22200 dd offset gvar_232323
можешь сделать что бы и эти ссылки переименовывались в gTForm_Reg_ptr ?
gTForm_Reg_ptr dd offset gTForm_Reg
вот так бы выглядело

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

| Сообщение посчитали полезным: Jupiter

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

Создано: 06 июля 2011 20:41 · Поправил: crypto
· Личное сообщение · #18

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

и приводишь пример (я так понимаю из контекста сказанного) этих двух функций
Code:
  1.    1. CODE:0040A828                 push    ebx
  2.    2. CODE:0040A829                 add     esp, 0FFFFFFF4h
  3.    3. CODE:0040A82C                 mov     ebx, eax
  4.    4. CODE:0040A82E                 mov     edx, esp
  5.    5. CODE:0040A830                 mov     eax, ebx
  6.    6. CODE:0040A832                 call    TryStrToBool
  7.    7. CODE:0040A832 _str2bool_sub_40A828 endp
  8.    8. CODE:0040A832
  9.    9. CODE:0040A832 ; ---------------------------------------------------------------------------
  10.   10. CODE:0040A837                 db  84h ; &#196;
  11.   11. CODE:0040A838                 db 0C0h ; L
  12.   12. CODE:0040A839                 db  75h ; u
  13.   13. CODE:0040A83A                 db  19h
  14.   14. CODE:0040A83B                 db  89h ; &#201;
  15.   15. CODE:0040A83C                 db  5Ch ; \

Собственно, почему первая функция заканчивается адресом 0040A832, а вторая и вообще не функция, а именно окончание первой. Вопрос: это так? Или я что-то не прочитал? И продолжение: если так, то это ИДА так выпендрилась? Если да, то я плохо понимаю, как это могло получиться.
И вопрос к остальным: у кого-то тоже так хреново получается, если выполнять тотальную чистку?




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 06 июля 2011 21:08 · Поправил: reversecode
· Личное сообщение · #19

пример функции это средина поломаной рекурсии,
поламалась же она гараздо глубже в TryStrToBool, а в ней еще одна итд, там пятая или какая то уже не помню функция, обьеденилась с одну функцию вместе(там не одна а с тридцаток функций)
итого
как пример
две с разным стеком
sub_XXX1
retn
sub_XXX2
retn
превратились в одну фукнцию общим стеком, а вторая превратилась просто в label
sub_XXX1
retn
label_XXX2
retn

теперь к примеру все функции которые вызывали sub_XXX2
вызывают не функцию, а label_XXX2
и поскольку такого не может быть
ida ставит разделитель,
;----------------------------------
рекурсивно вверх по всему дереву вызова
считая что функция закончилась
и не хочет анализировать дальше

теперь что бы это исправить нужно бегать и рекурсивно в ручную ставить E(end function) на нужное место

почему ida ломает так функции после скрипта, это не ко мне вопрос

но думаю на проблему что бы меньше флудить, можно забить
я буду просто комментировать в начале idc скрипта очистику и реанализ ida
пусть idc скрипт просто расставляет имена функций

crypto пишет:
Собственно, почему первая функция заканчивается адресом 0040A832, а вторая и вообще не функция, а именно окончание первой. Вопрос: это так?

да это продолжение первой

crypto пишет:
? И продолжение: если так, то это ИДА так выпендрилась?

да ida, это после того как произошла очистка всей .text и реанализе, и выставление начала конца фукнций по новому
до этого все было гуд.

crypto пишет:
Если да, то я плохо понимаю, как это могло получиться.

я в этой логике тоже плохо понимаю
могу предположить, что попалась какая то функция не совсем хорошо попадающая под определение MakeFunction
она могла не создастся
но! зацепить стек функции выше нее, и выставить в своем окончании - то что это окончание функции выше
дальше это могло потянутся до десяток функций, тем семым обьденив с двадцаток функций в одну
ну а дальше рекурсивно ida посчитав что call label прыгает внуть других функций,
и начала ставить разделители ;-----------------------
закончив анализ

у меня был случай(в одной c++ программе) когда ida зациклилась при анализе
она пыталась несколько(c десяток функций) обьеденить в одну функцию
потом после минуты прохода, опять разбивала их по одной
а потом через минуту опять обьеденяла
и так по кругу в течении часа, пока я не заметил что то слишком долго анализируется маленькая программа




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 06 июля 2011 23:34
· Личное сообщение · #20

reversecode пишет:
да ida, это после того как произошла очистка всей .text и реанализе, и выставление начала конца фукнций по новомудо этого все было гуд.

такая ж фигня была. уже не помню на чем из прог. очень некрасивый листинг после наложения скрипта получился.

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




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

Создано: 07 июля 2011 18:02
· Личное сообщение · #21

reversecode
Никак у меня не получается повторить твои ошибки, листинг получается чистенький. Значит, предлагаю следующее:
1. Завтра будет выложен новый билд, скачай его и попробуй загрузить скрипт заново.
2. Обсуждение вести на уровне почты, поскольку другим это неинтересно.



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

Создано: 07 июля 2011 19:51
· Личное сообщение · #22

Спасибо большое мемберам (не подписавшимся, к сожалению). Постараюсь.

| Сообщение посчитали полезным: HandMill


Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 07 июля 2011 21:45
· Личное сообщение · #23

crypto, проблему reversecode решить довольно просто: сделать опциональным вывод MakeCode и/или MakeFunction

-----
EnJoy!




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

Создано: 08 июля 2011 10:45
· Личное сообщение · #24

Jupiter
Это конечно вариант, но надо же разобраться, почему такие косяки.



Ранг: 36.1 (посетитель), 11thx
Активность: 0.020
Статус: Участник

Создано: 08 июля 2011 10:57
· Личное сообщение · #25

по поводу наложения скрипта на ида. Можно сделать так:
1. открыть в иде анализируемый файл
2. в окне "Load New file" убрать галочку analysis [enabled]
3. жмем ок и загружаем скрипт IDR
4. и тока потом запускаем анализ в IDA




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 08 июля 2011 12:18
· Личное сообщение · #26

дело в том что IDA сама свои сгинерированые idc не корректно переносит
поэтому первый анализ ida самый правильный
а вот если его сдампить в idc. и этот idc перенести и применить в другой запущеной копии
то уже не получится такой красивый листинг



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

Создано: 08 июля 2011 12:26
· Личное сообщение · #27

Jonny
Собственно я так и предлагал делать (в одном из постов). Но я пробовал еще запускать скрипт поверх уже загруженной программы, скрипт работает дольше (чистка), но результат получился одинаковый. Поэтому пусть reversecode тестирует на новом билде (будет сегодня к вечеру на сайте).



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

Создано: 11 июля 2011 14:12
· Личное сообщение · #28

reversecode
Виновниками оказались импорты, они никак не отражались в скрипте. После добавления ситуация изменилась, но видимо эта проблема характерна для использования HR, а я на него не ориентировался.



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

Создано: 18 июля 2011 09:44
· Личное сообщение · #29

Нажимаю на "магическую кнопочку F10" ничего не происходит - пустое окно. Исходный файл скомпилен в delphi7 без каких либо доп компонентов.



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

Создано: 18 июля 2011 10:14 · Поправил: XQuader
· Личное сообщение · #30

jacalhu пишет:
Нажимаю на "магическую кнопочку F10" ничего не происходит - пустое окно. Исходный файл скомпилен в delphi7 без каких либо доп компонентов.

Попробуй перед этим нажать еле заметный квадратик справа от кнопки "->" в CodeViewer ;)




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 18 июля 2011 13:19
· Личное сообщение · #31

Пора XE/XE2 добавлять базы

-----
От многой мудрости много скорби, и умножающий знание умножает печаль



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