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

 eXeL@B —› Софт, инструменты —› Interactive Delphi Reconstructor (IDR). Миттельшпиль
<< 1 ... 27 . 28 . 29 . 30 . 31 . 32 . 33 . 34 . 35 . 36 . 37 ... 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

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

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

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

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



Ранг: 262.5 (наставник), 337thx
Активность: 0.340.25
Статус: Участник

Создано: 25 февраля 2014 19:24
· Личное сообщение · #2

Jonny
eXeL@B —› Софт, инструменты —› Interactive Delphi Reconstructor (IDR). Миттельшпиль



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

Создано: 25 февраля 2014 19:41
· Личное сообщение · #3

TryAga1n пишет:
Jonny
eXeL@B —› Софт, инструменты —› Interactive Delphi Reconstructor (IDR). Миттельшпиль


?
Наверно, нужно уточнить слегка, в Idr есть возможность экспортировать в иду через скрипт
IDR-> Tools ->IDC generator.




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

Создано: 25 февраля 2014 20:59
· Личное сообщение · #4

unknownproject пишет:
Кстати, crypto убрал вовсе пароль с архива kb2010.Это для тех, кто не в курсе или не пользовался ранее его софтом и не нуждался в данной базе знаний, так что не сочтите за боян.


2010 сам по себе жуткий боян. Со времен 2010 вышли: XE - XE5 целых пять версий. А разработчики Delphi делятся на два типа - те которые юзают Delphi 7 и те которые юзают самое последнее из купленного (как я). Потому имхо всякие 2007-2010 дельфи днем с огнем не сыскать на реальном софте.

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




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

Создано: 26 февраля 2014 09:23
· Личное сообщение · #5

TryAga1n
Если прототип выглядит как TSecurity.Create(?.?), значит он действительно не задан, по крайней мере, не задан тип аргументов, имена давать не обязательно, просто исходный код читаться будет лучше. Как менять прототип. Входим в нужный объект (чтобы он появился на экране ассемблерного кода) или выбираем его в списке элементов юнита (тот что снизу), правой клавишей вызываем меню и выбираем "Edit function". В появившемся диалоге нажимаем кнопку Edit и редактируем прототип. Если это элемент класса, лучше сразу чекнуть соответствующий бокс и выбрать в комбо-боксе нужный класс (при этом скрытно от пользователя первый аргумент поименуется Self, а его тип будет выбранным классом), потом отредактировать сам прототип, добавляя нужные или удаляя ненужные аргументы (промахи первых этапов анализа). Можно использовать ключевое слово var (даже нужно, чтобы код потом декомпилировался корректно, тут уже нужно чувствовать сам язык Дельфи), слово const не используется. Можно вводить тип массив или динамический массив. Прототип нужно ввести корректно, иначе могут быть глюки, поскольку правильность его написания не проверяется. Если редактируемый объект функция или процедура, нужно проверить соответствующий флажок (список слева) и изменить его, если это требуется. Объект может быть еще stdcall или embedded, тоже нужно выставить флажок. С embedded объектами нужно быть аккуратным, поскольку их в некоторых случаях трудно идентифицировать, IDR проверяет некоторые эвристики, которых в большинстве случаев достаточно, но могут быть промахи). Кстати, если в декомпилируемом объекте встречаются embedded объекты, IDR это учитывает и в декомпилированном тексте появятся декомпилированные embedded объекты, однако этот текст не отвечает синтаксису языка Дельфи, его нужно редактировать. Вообще, получившийся исходный код (пока не написан хороший постпроцессор) всегда нужно будет редактировать. Однако чаще всего это не так сложно, поскольку все логические конструкции будут разобраны, а пользователю нужно будет немного покорпеть над именами переменных.
Итак, после завершения редактирования нажимаем кнопку Ok и смотрим, что получилось. В приведенном примере вызова TSecurity.Create видим, что используется 4 аргумента: eax с типом TSecurity, edx (dl), который для конструкторов имеет значение False или True, ecx (cx) скорее всего типа WORD и стековый аргумент, который тоже скорее всего имеет тип Cardinal или Integer (или WORD), точнее скажет анализ самого конструктора.
Имена переменным пока задавать нельзя, это стоит в планах развития, но на него нет времени.

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

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

Создано: 26 февраля 2014 09:26 · Поправил: crypto
· Личное сообщение · #6

cxj98
Hotkey = Esc or Alt+F4.
Hint: press F11 on opened Form and you will see list of Form objects. After mouse right click pop-up menu appears for searching.
Better send me file please to analyze.



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

Создано: 26 февраля 2014 09:30
· Личное сообщение · #7

Если найдется энтузиаст, умеющий (и хочущий ) написать help для последней версии IDR (которая еще пока не выложена на сайте, но появится там в будущем...), пишите на crypto2011@gmail.com. Хотя мне лично кажется, что таких не найдется



Ранг: 262.5 (наставник), 337thx
Активность: 0.340.25
Статус: Участник

Создано: 26 февраля 2014 09:49
· Личное сообщение · #8

crypto пишет:
Hotkey = Esc or Alt+F4.
Hint: press F11 on opened Form and you will see list of Form objects. After mouse right click pop-up menu appears for searching.

Тоже сталкивался с такой проблемой. Хоткеи не работают, естественно первым делом тестил ESC и Alt+F4, видимо ты это исправил в последующих версиях, которые еще не выложены.

crypto пишет:
Если найдется энтузиаст, умеющий (и хочущий ) написать help для последней версии IDR

Кто сможет написать хелп лучше, чем сам автор?



Ранг: 123.0 (ветеран), 10thx
Активность: 0.060
Статус: Участник

Создано: 26 февраля 2014 10:25
· Личное сообщение · #9

crypto, Вам нужно тезисно изложить основные моменты в свободной форме, тогда думаю без труда найдется желающий, который это все структурирует и оформит в виде help.

-----
.[ rE! p0w4 ].




Ранг: 4.3 (гость)
Активность: 0.010
Статус: Участник

Создано: 26 февраля 2014 16:42
· Личное сообщение · #10

@crypto

you don't get my point, if ESC or Alt+F4 is can't close the window and the window is none move-able with full screend, then how to send it to back, and IDR send to front, like Keep IDR always on top. thanks.



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

Создано: 27 февраля 2014 09:02
· Личное сообщение · #11

cxj98
I need example, I have no such files to recover problem.




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

Создано: 27 мая 2014 22:24 · Поправил: gazlan
· Личное сообщение · #12

To crypto

Мелкий, но противный BUG в генераторе IDC-скриптов: не экранируются кавычки внутри строки.

Incorrect:
Code:
  1. MakeComm(0x5DAEE6, "'"%s" - неверная дата. Значение должно быть между "%s" и "%s"'");


Correct:
Code:
  1. MakeComm(0x5DAEE6, "\"%s\" - неверная дата. Значение должно быть между \"%s\" и \"%s\"");




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

Создано: 02 июня 2014 09:00
· Личное сообщение · #13

gazlan
Поскажи, как я должен исправить соответствующий код в программе:

Code:
  1. void __fastcall TIDCGen::MakeComment(int pos, String text)
  2. {
  3.     fprintf(idcF, "MakeComm(0x%lX, "%s");\n", CodeBase + pos, text.c_str());
  4. }





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

Создано: 02 июня 2014 09:13 · Поправил: reversecode
· Личное сообщение · #14

Code:
  1. \\"%s\\"


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

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

Создано: 02 июня 2014 11:57 · Поправил: crypto
· Личное сообщение · #15

reversecode
Может так:
Code:
  1. \"%s\"
?



Ранг: 158.4 (ветеран), 123thx
Активность: 0.140.49
Статус: Участник

Создано: 02 июня 2014 12:33
· Личное сообщение · #16

crypto пишет:
Может так:

оба варианта - не так. Нужно просканировать строку в text.c_str() и экранировать в ней кавычки (а заодно и спецсимволы, если есть).



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

Создано: 02 июня 2014 14:33
· Личное сообщение · #17

rmn
Это для меня очень сложно , оставим баг в покое.



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

Создано: 02 июня 2014 15:15 · Поправил: r_e
· Личное сообщение · #18

имхо, как-то так (если в лоб)
Code:
  1. class SafeResultCollector
  2. {
  3.          String::value_type        danger_;
  4.          String::value_type        protect_;
  5.          String            result_;
  6.  
  7. public:
  8.          SafeResultCollector(const String::value_type& DangerChar, const String::value_type& ProtectionChar)
  9.                  : value_(DangerChar)
  10.                  , protect_(ProtectionChar)
  11.          {}
  12.  
  13.          void operator ()(String::value_type& v)
  14.          {
  15.                  if (== value_)
  16.                         result_.push_back(protect_);
  17.                  result.push_back(v);
  18.          }
  19.  
  20.          String& getResult()
  21.          {
  22.                  return result_;
  23.          }
  24. }
  25.  
  26. void buildSafeQuoteString(String& dst, const String& src)
  27. {
  28.          SafeResultCollector lCollector('"', '\\');
  29.          std::for_each(src.begin(), src.end(), lCollector);
  30.          dst.swap(lCollector.getResult());
  31. }
  32.  
  33. void __fastcall TIDCGen::MakeComment(int pos, String text)
  34. {
  35.          String lSafeString;
  36.          buildSafeQuoteString(lSafeString, text);
  37.          fprintf(idcF, "MakeComm(0x%lX, "%s");\n", CodeBase + pos, lSafeString.c_str());
  38. }


-----
старый пень





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

Создано: 02 июня 2014 16:37 · Поправил: reversecode
· Личное сообщение · #19

совсем смеетесь?
если в лоб то там банальный for по одной строке и создание новой строк
с заменой
'' '\a' '\b' '\t' '\n' '\v' '\f' '\r' '"'
на доп \



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

Создано: 02 июня 2014 17:31
· Личное сообщение · #20

reversecode
Если ты вдруг не заметил, то там код и есть банальный for с созданием новой строки.
Code:
  1. void buildSafeQuoteString(String& dst, const String& src)
  2. {
  3.          String lResult;
  4.          for (String::const_iterator e = src.end(), i = src.begin(); i != e; ++i)
  5.          {
  6.                  if (*== '"')
  7.                         lResult.push_back('\\');
  8.                  lResult.push_back(*i);
  9.          }
  10.          dst.swap(lResult);
  11. }


-----
старый пень





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

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

я знаю контейнеры
но когда человек сказал что для него сложно это реализовывать
значит нужно подсунуть максимально простую реализацию
push_back явно в простую не входит, учитывая что там скорее всего билдер и stl нет
String намекает на это
поэтому c_str()[i] для перебора и res += chr; в результирующую строку
самое простое



Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 02 июня 2014 19:05 · Поправил: F_a_u_s_t
· Личное сообщение · #22

reversecode пишет:
push_back явно в простую не входит, учитывая что там скорее всего билдер и stl нет
String намекает на это


Написано на билдере, но он держит std 0x ( современные версии естественно ).
А точнее там реализация от dinkumware - http://ru.wikipedia.org/wiki/Dinkumware

Добавил:

Извиняюсь, не внимательно просмотрел пост Крипто, вы правы, там не stl строка, а стандартные строки реализованы через TObject, реализация в исходниках на делфи.
String паскаль строки string stl строки.



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

Создано: 02 июня 2014 19:19
· Личное сообщение · #23

reversecode
Судя по c_str String построен на базе стандартного std::string. Отсюда сразу же и вывод об итеративном проходе и наличии стандартного push_back. Впрочем, допускаю наличие .append или +=.
Ты лучше вместо того чтоб мне мозг выносить сразу бы код написал.

-----
старый пень




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

Создано: 03 июня 2014 09:00
· Личное сообщение · #24

Короче, нужная функция давно уже существует в программе. При клике на строку (в списке элементов юнита или в закладке Strings (F8) высвечивается уже преобразованная. Кое-что добавил для полноты, так что спасибо за обсуждение.



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

Создано: 04 июня 2014 20:13
· Личное сообщение · #25

Все-таки вопрос остался: как нужно вывести строку
"MakeComm(0x%lX, %s);\n", CodeBase + pos, XXX(text).c_str()); XXX - функция, экранирующая специальные символы, с кавычками вокруг %s или без них?




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

Создано: 04 июня 2014 21:08
· Личное сообщение · #26

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



Ранг: 158.4 (ветеран), 123thx
Активность: 0.140.49
Статус: Участник

Создано: 05 июня 2014 00:19 · Поправил: rmn
· Личное сообщение · #27

с
экранируются спецсимволы в строке text. Кавычки же в idc инструкции оставляешь без изменения:
Code:
  1. "MakeComm(0x%lX, \"%s\");\n",  CodeBase + pos, XXX(text).c_str());


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

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

Создано: 17 сентября 2014 13:24
· Личное сообщение · #28

kb2011.bin and kb2012.bin are temporaly free.
https://www.dropbox.com/s/j2ajf3q0ubenwjz/kb2011.7z?dl=0
https://www.dropbox.com/s/q5jxi1rppd85ihx/kb2012.7z?dl=0

| Сообщение посчитали полезным: CyberGod, Ultras, colorblind, r_e, dimka_new, m0bscene, AKAB, Maximus, 4kusNick, v00doo, mak, zNob, sendersu, Horna, gazlan, AliS S0fT, =TS=, Dart Raiden, MarcElBichon, Dazz


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

Создано: 17 сентября 2014 13:36
· Личное сообщение · #29

а декомпилер?



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

Создано: 25 сентября 2014 17:02
· Личное сообщение · #30

Хочу подключить обработку версии Delphi XE3. База знаний сгенерена. Для тестирования нужен исполняемый файл, созданный в данной версии. Буду премного благодарен.



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

Создано: 25 сентября 2014 23:39
· Личное сообщение · #31

crypto пишет:
Для тестирования нужен исполняемый файл, созданный в данной версии.


DXE3, консоль, дебаг + релиз прицепил
http://prntscr.com/4q8p1l
http://prntscr.com/4q9esf
http://prntscr.com/4q9f26

пока поживет пару дней XE3 если надо еще будет

13ac_25.09.2014_EXELAB.rU.tgz - xe3_test.rar

| Сообщение посчитали полезным: crypto
<< 1 ... 27 . 28 . 29 . 30 . 31 . 32 . 33 . 34 . 35 . 36 . 37 ... 47 . 48 . >>
 eXeL@B —› Софт, инструменты —› Interactive Delphi Reconstructor (IDR). Миттельшпиль
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати