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

 eXeL@B —› Софт, инструменты —› Interactive Delphi Reconstructor (IDR). Миттельшпиль
<< 1 ... 45 . 46 . 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

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

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

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

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



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

Создано: 29 января 2019 18:47
· Личное сообщение · #2

mazaxaker пишет:
Ида фигово распознает, а idc скрипт из idr ломает все в ida. Хочу подгружать имена функций из идр в иду.

попробуй обработать idc скрипт этим скриптом для Linqpad предварительно (удаляет все команды преобразования данных):
Code:
  1. <Query Kind="Statements" />
  2.  
  3. var lines = File.ReadAllLines(@"C:\temp\idr_output.idc");
  4.  
  5. foreach(var line in lines) {
  6.          var s = line.Trim();
  7.          if(s.StartsWith("MakeUnkn("))
  8.                  continue;
  9.          if(s.StartsWith("clear("))
  10.                  continue;
  11.          if(s.StartsWith("MakeDword("))
  12.                  continue;
  13.          if(s.StartsWith("MakeByte("))
  14.                  continue;
  15.          if(s.StartsWith("MakeWord("))
  16.                  continue;
  17.          if(s.StartsWith("MakeNameEx(") && s.EndsWith(""", 0);"))
  18.                  continue;
  19.          if(s.StartsWith("MakeFunction("))
  20.                  continue;
  21.          if(s.StartsWith("MakeCode("))
  22.                  continue;
  23.          if(s.StartsWith("MakeStr("))
  24.                  continue;
  25.          if(== "SetLongPrm(INF_STRTYPE, ASCSTR_PASCAL);")
  26.                  continue;
  27.          if(s.StartsWith("MakeQword("))
  28.                  continue;
  29.          if(s.StartsWith("MakeArray("))
  30.                  continue;
  31.  
  32.          Console.WriteLine(s);
  33.                  
  34. }


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

Ранг: 6.1 (гость), 3thx
Активность: 0.040
Статус: Участник

Создано: 29 января 2019 20:04 · Поправил: TerminatorX
· Личное сообщение · #3

crypto
Дублирование адресов в строке осталось. В MAP -> 0001:00015B50 Classes.sub_00416B50_00416B50, HIEW -> .00456388 Controls.TWinControl.sub_00456388_00456388 Проверь код внимательнее ... плиз.

Добавлено спустя 6 минут
Вкладка 'MAP (F11)' - хорошо, полезно!

Добавлено спустя 20 минут
Есть предложение добавить функциональность Hex редактора в дополнительную вкладку на основе бесплатного TMPHexEditorEx компонента от Markus Stephany. Была бы возможность сделать голосование на форуме. Что мыслишь ?
--> TMPHexEditor / TMPHexEditorEx components <--



Ранг: 6.1 (гость), 3thx
Активность: 0.040
Статус: Участник

Создано: 04 февраля 2019 20:35
· Личное сообщение · #4

crypto
Добавил функцию удаления цифровой подписи файла Tools -> Remove Certificate.
--> IDR 040219+Src <--



Ранг: 6.1 (гость), 3thx
Активность: 0.040
Статус: Участник

Создано: 09 февраля 2019 21:13 · Поправил: TerminatorX
· Личное сообщение · #5

Исправил дублирование адресов.
- MAP -
Code:
  1. void __fastcall TFMain_11011981::miMapGeneratorClick(TObject *Sender)
  2. {
  3.     int     _posMap;
  4.     String  procName;
  5.  
  6.     String  mapName = "";
  7.     String  SourceFileMap = "";
  8.     if (SourceFile != "") mapName = ChangeFileExt(SourceFile, ".map");
  9.     if (IDPFile != "") mapName = ChangeFileExt(IDPFile, ".map");
  10.  
  11.     SaveDlg->InitialDir = WrkDir;
  12.     SaveDlg->Filter = "MAP|*.map";
  13.     SaveDlg->FileName = mapName;
  14.  
  15.     if (!SaveDlg->Execute()) return;
  16.  
  17.     mapName = SaveDlg->FileName;
  18.     if (FileExists(mapName))
  19.     {
  20.         if (Application->MessageBox("File already exists. Overwrite?", "Warning", MB_YESNO) == IDNO) return;
  21.     }
  22.  
  23.     Screen->Cursor = crHourGlass;
  24.     FILE *fMap = fopen(mapName.c_str(), "wt+");
  25.     if (!fMap)
  26.     {
  27.         MessageDlg("Cannot open map file", mtWarning, TMsgDlgButtons() << mbOK, 0);
  28.         return;
  29.     }
  30.     SourceFileMap = SourceFile;
  31.     _posMap = SourceFileMap.LastDelimiter("");
  32.     if (_posMap) SourceFileMap = SourceFileMap.SubString(_posMap + 1, SourceFileMap.Length());
  33.  
  34.     fprintf(fMap, "\n Name: %s EP: %08X : Size: %08X\n", SourceFileMap, EP - CodeBase, CodeSize);
  35.     fprintf(fMap, "\n Start Length Name Class\n");
  36.     fprintf(fMap, " 0001:00000000 %09XH CODE CODE\n", CodeSize);
  37.     fprintf(fMap, "\n\n Address Publics by Value _ RVA+Base\n\n");
  38.  
  39.     for (int n = 0; n < CodeSize; n++)
  40.     {
  41.         if (IsFlagSet(cfProcStart, n) && !IsFlagSet(cfEmbedded, n))
  42.         {
  43.             int adr = Pos2Adr(n);
  44.             PInfoRec recN = GetInfoRec(adr);
  45.             if (recN)
  46.             {
  47.                 if (adr != EP)
  48.                 {
  49.                     PUnitRec recU = GetUnit(adr);
  50.                     if (recU)
  51.                     {
  52.                         String moduleName = GetUnitName(recU);
  53.                         if (adr == recU->iniadr)
  54.                             procName = "Initialization";
  55.                         else if (adr == recU->finadr)
  56.                             procName = "Finalization";
  57.                         else
  58.                             procName = recN->MakeMapName(adr);
  59.                         if (procName.Pos("sub_")) fprintf(fMap, " 0001:%08X %s.%s\n", n, moduleName.c_str(), procName.c_str());
  60.                         else
  61.                         fprintf(fMap, " 0001:%08X %s.%s_%08X\n", n, moduleName.c_str(), procName.c_str(), adr);
  62.                     }
  63.                     else
  64.                     {
  65.                         procName = recN->MakeMapName(adr);
  66.                         if (procName.Pos("sub_")) fprintf(fMap, " 0001:%08X %s\n", n, procName.c_str());
  67.                         else
  68.                         fprintf(fMap, " 0001:%08X %s_%08X\n", n, procName.c_str(), adr);
  69.                     }
  70.                 }
  71.                 else
  72.                 {
  73.                     fprintf(fMap, " 0001:%08X EntryPoint_%08X\n", n, adr);
  74.                 }
  75.             }
  76.         }
  77.     }
  78.  
  79.     fprintf(fMap, "\nProgram entry point at 0001:%08X\n", EP - CodeBase);
  80.     fclose(fMap);
  81.     Screen->Cursor = crDefault;
  82. }


- HIEW -
Code:
  1. void __fastcall TFMain_11011981::miHiewGeneratorClick(TObject *Sender)
  2. {
  3.     int     _posNamet;
  4.     String  procName;
  5.     String  nametName = "";
  6.     String  SourceFileNamet = "";
  7.     String moduleName = "";
  8.  
  9.     if (SourceFile != "") nametName = ChangeFileExt(SourceFile, ".namet");
  10.     if (IDPFile != "") nametName = ChangeFileExt(IDPFile, ".namet");
  11.  
  12.     SaveDlg->InitialDir = WrkDir;
  13.     SaveDlg->Filter = "NAMET|*.namet";
  14.     SaveDlg->FileName = nametName;
  15.  
  16.     if (!SaveDlg->Execute()) return;
  17.     nametName = SaveDlg->FileName;
  18.     if (FileExists(nametName))
  19.     {
  20.         if (Application->MessageBox("File already exists. Overwrite?", "Warning", MB_YESNO+MB_ICONWARNING) == IDNO) return;
  21.     }
  22.     Screen->Cursor = crHourGlass;
  23.     FILE *fNamet = fopen(nametName.c_str(), "wt+");
  24.     if (!fNamet)
  25.     {
  26.         MessageDlg("Cannot open namet file", mtWarning, TMsgDlgButtons() << mbOK, 0);
  27.         return;
  28.     }
  29.     SourceFileNamet = SourceFile;
  30.     _posNamet = SourceFileNamet.LastDelimiter("");
  31.     if (_posNamet) SourceFileNamet = SourceFileNamet.SubString(_posNamet + 1, SourceFileNamet.Length());
  32.     for (int n = 0; n < CodeSize; n++)
  33.     {
  34.         if (IsFlagSet(cfProcStart, n) && !IsFlagSet(cfEmbedded, n))
  35.         {
  36.             int adr = Pos2Adr(n);
  37.             PInfoRec recN = GetInfoRec(adr);
  38.             if (recN)
  39.             {
  40.                 if (adr == EP)
  41.                     fprintf(fNamet, ".%08X Entry Point_%08X\n", adr, adr);
  42.                 else
  43.                 {
  44.                     PUnitRec recU = GetUnit(adr);
  45.                     if (recU)
  46.                     {
  47.                         moduleName = GetUnitName(recU);
  48.                         if (adr == recU->iniadr)
  49.                             procName = "Initialization";
  50.                         else if (adr == recU->finadr)
  51.                             procName = "Finalization";
  52.                         else
  53.                             procName = recN->MakeMapName(adr);
  54.                     }
  55.                     else
  56.                     {
  57.                         moduleName = "";
  58.                         procName = recN->MakeMapName(adr);
  59.                     }
  60.                     if (moduleName != "")
  61.                      if (procName.Pos("sub_")) fprintf(fNamet, ".%08X %s.%s\n", adr, moduleName.c_str(), procName.c_str());
  62.                      else
  63.                         fprintf(fNamet, ".%08X %s.%s_%08X\n", adr, moduleName.c_str(), procName.c_str(), adr);
  64.                     else
  65.                      if (procName.Pos("sub_")) fprintf(fNamet, ".%08X %s\n", adr, procName.c_str());
  66.                      else
  67.                         fprintf(fNamet, ".%08X %s_%08X\n", adr, procName.c_str(), adr);
  68.                 }
  69.             }
  70.         }
  71.     }
  72.     fclose(fNamet);
  73.     Screen->Cursor = crDefault;
  74. }

--> IDR 090219 <--



Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 09 февраля 2019 22:17
· Личное сообщение · #6

TerminatorX aka MacTep, у тебя же есть(был?) репо на гитхабе, мог бы там фиксы делать



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

Создано: 11 февраля 2019 20:36
· Личное сообщение · #7

SReg
Он теперь моими руками фиксы пытается делать




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

Создано: 13 февраля 2019 14:18
· Личное сообщение · #8

вылеты по "list index out", проверял на нескольких версиях. вопрос - кто таки нормально допиливает idr по основному функционалу?

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




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

Создано: 17 февраля 2019 10:47
· Личное сообщение · #9

ajax
Никто



Ранг: 6.1 (гость), 3thx
Активность: 0.040
Статус: Участник

Создано: 18 февраля 2019 14:12
· Личное сообщение · #10

SReg
Я это Я aka TerminatorX.

crypto
Уважение собеседника часть успеха. Никого не заствлял делать что-то нехорошее.

ajax
Вылеты "List index out of Bounds (-1)" в какой вкладке ? При каком событии ? Подробнее опиши баг.




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

Создано: 21 февраля 2019 07:59
· Личное сообщение · #11

TerminatorX
все в личке уже дня 3

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




Ранг: 6.1 (гость), 3thx
Активность: 0.040
Статус: Участник

Создано: 22 февраля 2019 17:31
· Личное сообщение · #12

Отправил мессагу в личу, надеюсь горчишник поможет.



Ранг: 281.8 (наставник), 272thx
Активность: 0.250.01
Статус: Участник
Destroyer of protectors

Создано: 23 февраля 2019 20:07
· Личное сообщение · #13

ajax пишет:
вопрос - кто таки нормально допиливает idr по основному функционалу?

Да нах надо, нужно больше свистелок и перделок)



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

Создано: 24 февраля 2019 17:38
· Личное сообщение · #14

Модераторам
Тему закрываю, пусть дети резвятся где-нибудь в другом месте. С вопросами обращайтесь в личку или мыльте.

| Сообщение посчитали полезным: ClockMan, tihiy_grom
<< 1 ... 45 . 46 . 47 . 48 .
 eXeL@B —› Софт, инструменты —› Interactive Delphi Reconstructor (IDR). Миттельшпиль
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати