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

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

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

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

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




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

Создано: 10 ноября 2018 14:23
· Личное сообщение · #2

mak пишет:
рефакторинга в своем настоящем понимании не будет


Ага, только по факту пришлось рефакторить ))
И он это говорил больше для того, чтобы не было завышенных ожиданий.

На счёт IDR:
Актуальное на данный момент по моему мнению - это возможность компиляции не только в Borland C++ Builder 6. И я не имею в виду другую версию Borland C++ Builder, я имею в виду полноценную сборку любым современным компилятором, как это работает с другими проектами, написанными на сях [с плюсами или без].
До этого момента написание кода IDR подразумевает работу в навязанной среде, а это явно не способствует популярности проекта.

-----
EnJoy!




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

Создано: 30 ноября 2018 17:29
· Личное сообщение · #3

Проект жив ? Будет 64 битная версия IDR ?
Нашел ссылку в интернете на клон IDR ? --> Link <-- Хорошо было бы найти бизнес ангела полезному софту.



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

Создано: 03 декабря 2018 07:41
· Личное сообщение · #4

TerminatorX
Перед Новым Годом выложу на git исходники, работает только анализ (да и то с многочисленными дырами). Декомпайлером некогда заниматься.

| Сообщение посчитали полезным: Jupiter, mak, HandMill, Xlab0s, SReg, sendersu, v00doo, DICI BF

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

Создано: 03 декабря 2018 22:45
· Личное сообщение · #5

crypto

только просьба лицензию вписать, чтоб всякие субчики не борзели



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

Создано: 09 декабря 2018 09:59
· Личное сообщение · #6

MacTep
IDR v 2.6.3.17 создаёт map-файл,к-рый не хавают ни OD2-ExPlug,ни Mapimp.

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

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

Создано: 09 декабря 2018 13:52
· Личное сообщение · #7

Ну так а зачем ты качаешь всякий хлам
P.S. зато копирайты в него свои вставить не забыл

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

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

Создано: 27 декабря 2018 20:42 · Поправил: TerminatorX
· Личное сообщение · #8

crypto
Добавьте в проект код поддержки списка функций для HIEW (*.namet). Проверено на версии Hiew`a 8.63 Все гут. "HIEW Generator"--- СПАСИБО ! Авансом.
Code:
  1. void __fastcall TFMain_11011981::mniHiewGeneratorClick(TObject *Sender)
  2. {
  3.  int     _posNamet;
  4.  String  procName;
  5.  String  nametName = "";
  6.  String  SourceFileNamet = "";
  7.  if (SourceFile != "") nametName = ChangeFileExt(SourceFile, ".namet");
  8.  if (IDPFile != "") nametName = ChangeFileExt(IDPFile, ".namet");
  9.  
  10.  SaveDlg->InitialDir = WrkDir;
  11.  SaveDlg->Filter = "NAMET|*.namet";
  12.  SaveDlg->FileName = nametName;
  13.  
  14.  if (!SaveDlg->Execute()) return;
  15.  nametName = SaveDlg->FileName;
  16.  if (FileExists(nametName))
  17.  {
  18.  if (Application->MessageBox("File already exists. Overwrite?", "Warning", MB_YESNO+MB_ICONWARNING) == IDNO) return;
  19.  }
  20.  Screen->Cursor = crHourGlass;
  21.  FILE *fNamet = fopen(nametName.c_str(), "wt+");
  22.  if (!fNamet)
  23.  {
  24.  MessageDlg("Cannot open namet file", mtWarning, TMsgDlgButtons() << mbOK, 0);
  25.  return;
  26.  }
  27.  SourceFileNamet = SourceFile;
  28.  _posNamet = SourceFileNamet.LastDelimiter("");
  29.  if (_posNamet) SourceFileNamet = SourceFileNamet.SubString(_posNamet + 1, SourceFileNamet.Length());
  30.     for (int n = 0; n < CodeSize; n++)
  31.     {
  32.     if (IsFlagSet(cfProcStart, n) && !IsFlagSet(cfEmbedded, n))
  33.      {
  34.      int adr = Pos2Adr(n);
  35.      PInfoRec recN = GetInfoRec(adr);
  36.       if (recN)
  37.       {
  38.       if (adr != EP)
  39.        {
  40.        PUnitRec recU = GetUnit(adr);
  41.        if (recU)
  42.         {
  43.         String moduleName = GetUnitName(recU);
  44.         if (adr == recU->iniadr) procName = "Initialization";
  45.         else if (adr == recU->finadr) procName = "Finalization";
  46.         else
  47.         procName = recN->MakeMapName(adr);
  48.         fprintf(fNamet, ".%08X %s.%s_%08X\n", adr, moduleName.c_str(), procName.c_str(), adr);
  49.         }
  50.         else
  51.         {
  52.         procName = recN->MakeMapName(adr);
  53.         fprintf(fNamet, ".%08X %s_%08X\n", adr, procName.c_str(), adr);
  54.         }
  55.        }
  56.        else
  57.        {
  58.        fprintf(fNamet, ".%08X Entry Point_%08X\n", adr, adr);
  59.        }
  60.       }
  61.      }
  62.     }
  63.     fclose(fNamet);
  64.     Screen->Cursor = crDefault;
  65. }
  66. //---------------------------------------------------------------------------


Добавлено спустя 7 минут
Да еще вопрос, новый x64 bit IDR на какой RAD Studio пишете ? Желательно точная версия.

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

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

Создано: 28 декабря 2018 08:00
· Личное сообщение · #9

TerminatorX
Новогодний подарок! Спасибо. Включу в проект.
на какой RAD Studio пишете ?
Да все на том же Билдере 6.0. Выложу, как и обещал, перед Новым Годом.



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

Создано: 28 декабря 2018 21:14
· Личное сообщение · #10

crypto
BCB 6 жив однако.
Добавил в шаблон 'MAP Generator' а RVA+Base адрес. Пример.: Было 0001:000001FC system.kernel32.CreateFileA -> стало 0001:000001FC system.kernel32.CreateFileA_004011FC, плюс информационная строка в заголовок списка функций -> 'Name: ASBox.exe EP: 0008C744 : Size: 00094000'.
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.     fprintf(fMap, "\n Name: %s EP: %08X : Size: %08X\n", SourceFileMap, EP - CodeBase, CodeSize);
  34.     fprintf(fMap, "\n Start Length Name Class\n");
  35.     fprintf(fMap, " 0001:00000000 %09XH CODE CODE\n", CodeSize);
  36.     fprintf(fMap, "\n\n Address Publics by Value _ RVA+Base\n\n");
  37.  
  38.     for (int n = 0; n < CodeSize; n++)
  39.     {
  40.         if (IsFlagSet(cfProcStart, n) && !IsFlagSet(cfEmbedded, n))
  41.         {
  42.             int adr = Pos2Adr(n);
  43.             PInfoRec recN = GetInfoRec(adr);
  44.             if (recN)
  45.             {
  46.                 if (adr != EP)
  47.                 {
  48.                     PUnitRec recU = GetUnit(adr);
  49.                     if (recU)
  50.                     {
  51.                         String moduleName = GetUnitName(recU);
  52.                         if (adr == recU->iniadr)
  53.                             procName = "Initialization";
  54.                         else if (adr == recU->finadr)
  55.                             procName = "Finalization";
  56.                         else
  57.                             procName = recN->MakeMapName(adr);
  58.  
  59.                         fprintf(fMap, " 0001:%08X %s.%s_%08X\n", n, moduleName.c_str(), procName.c_str(), adr);
  60.                     }
  61.                     else
  62.                     {
  63.                         procName = recN->MakeMapName(adr);
  64.                         fprintf(fMap, " 0001:%08X %s_%08X\n", n, procName.c_str(), adr);
  65.                     }
  66.                     //if (!IsFlagSet(cfImport, n))
  67.                     //{
  68.                     //    fprintf(fMap, "%lX %s\n", adr, recN->MakePrototype(adr, true, true, false, true, false).c_str());
  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. }

Инструкция по созданию новых баз есть в 'природе' ? Как это правильно сделать (по шагам) ?



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

Создано: 30 декабря 2018 19:27
· Личное сообщение · #11

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

Создание баз знаний:
В директорию, где лежат *.dcu, копируем файл dcu32int.exe (утилита Хмельнова изменена под эту задачу). Запускаем dcu32int с параметрами "-K* -U", в результате здесь же будет создана база знаний kb.bin (потом ее переименовываем). Собственно все.

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

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

Создано: 31 декабря 2018 13:20
· Личное сообщение · #12

С новым почином ! Хорошее дело начато.

Добавлено спустя 4 часа 44 минуты
crypto
Внесите в IDR добавление пункта меню в проводнике Windows по клику мышки. Program - Settings - Shell Integration

Code:
  1. #include <Registry.hpp>
  2. ...
  3. void __fastcall TFMain_11011981::FormShow(TObject *Sender)
  4. {
  5. ...
  6.     // Проверка записей реестра *.exe / *.dll 
  7.   bool exefile1, dllfile1;
  8.   TRegistry *reg = new TRegistry(KEY_EXECUTE);
  9.   reg->RootKey = HKEY_CLASSES_ROOT;
  10.   reg->OpenKey("\exefile\shell\Open with IDR\command\", false);
  11.   if (reg->ValueExists("")) exefile1 = true;
  12.   else
  13.     exefile1 = false;
  14.     reg->CloseKey();
  15.     
  16.   reg->OpenKey("\dllfile\shell\Open with IDR\command\", false);
  17.   if (reg->ValueExists("")) dllfile1 = true;
  18.   else
  19.    dllfile1 = false;
  20.    reg->CloseKey();
  21.    delete reg;
  22.   if ((exefile1 == true) && (dllfile1 == true)) mniShellIntegration1->Checked = true;
  23.   else
  24.     mniShellIntegration1->Checked = false;
  25. }
  26. ...
  27.  
  28. void __fastcall TFMain_11011981::mniShellIntegration1Click(TObject *Sender)
  29. {
  30. if (!mniShellIntegration1->Checked)
  31.  {
  32.  TRegistry *reg=new TRegistry(KEY_ALL_ACCESS);
  33.   reg->RootKey=HKEY_CLASSES_ROOT;
  34.   reg->OpenKey("\exefile\shell\Open with IDR\command", true);
  35.   reg->WriteString("",(ExtractFilePath(Application->ExeName)+"Idr.exe %1"));
  36.   reg->CloseKey();
  37.  
  38.   reg->OpenKey("\dllfile\shell\Open with IDR\command", true);
  39.   reg->WriteString("",(ExtractFilePath(Application->ExeName)+"Idr.exe %1"));
  40.   reg->CloseKey();
  41.   delete reg;
  42.   mniShellIntegration1->Checked = true;
  43.  }
  44.  else
  45.  {
  46.   TRegistry *reg=new TRegistry(KEY_ALL_ACCESS);
  47.   reg->RootKey=HKEY_CLASSES_ROOT;
  48.   reg->DeleteKey("\exefile\shell\Open with IDR");
  49.   reg->DeleteKey("\dllfile\shell\Open with IDR");
  50.   delete reg;
  51.   mniShellIntegration1->Checked = false;
  52.  }
  53. }


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

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

Создано: 02 января 2019 17:01
· Личное сообщение · #13

При возникновении ошибок при внесении / удалении записей в реестре Windows из гуи интерфейса ИДР, а также при открытии исследуемых файлов из системных директорий ОС, нужно собрать файл IDR с дополненым файлом манифеста (права Администратора).
Code:
  1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  2. <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  3.  <assemblyIdentity
  4.     name="IDR"
  5.     processorArchitecture="*"
  6.     version="2.6.0.0"
  7.     type="win32"/>
  8.  <dependency>
  9.   <dependentAssembly>
  10.    <assemblyIdentity
  11.         type="win32"
  12.         name="Microsoft.Windows.Common-Controls"
  13.         version="6.0.0.0"
  14.         processorArchitecture="*"
  15.         publicKeyToken="6595b64144ccf1df"
  16.         language="*"/>
  17.   </dependentAssembly>
  18.  </dependency>
  19.   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
  20.       <security>
  21.       <requestedPrivileges>
  22.         <requestedExecutionLevel
  23.           level="requireAdministrator"
  24.           uiAccess="false"/>
  25.       </requestedPrivileges>
  26.     </security>
  27.    </trustInfo>
  28.  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
  29.   <application>
  30.    <!-- Windows Vista -->
  31.    <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
  32.    <!-- Windows 7 --> 
  33.    <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
  34.    <!-- Windows 8 -->
  35.    <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
  36.    <!-- Windows 8.1 -->
  37.    <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
  38.    <!-- Windows 10 -->
  39.    <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
  40.   </application>
  41.  </compatibility>
  42.  <application xmlns="urn:schemas-microsoft-com:asm.v3">
  43.   <windowsSettings>
  44.    <dpiAware  xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
  45.   </windowsSettings>
  46.  </application>
  47. </assembly>





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

Создано: 02 января 2019 17:22
· Личное сообщение · #14

crypto
В --> releases <-- выложи, плз, текущую бинарную сборку.

TerminatorX пишет:
права Администратора

Требовать права Администратора через requireAdministrator - это значит исключить возможность запуска без прав админа. Кому надо, тот явным образом запустит через админа.

-----
EnJoy!




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

Создано: 02 января 2019 18:37
· Личное сообщение · #15

Два варианта иконок 32 / 64 бит.

d925_02.01.2019_EXELAB.rU.tgz - Icon_IDR.rar



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

Создано: 02 января 2019 18:42
· Личное сообщение · #16

TerminatorX
Добавил твой код (Shell Integration), насчет манифеста - по-моему верховный прав.
Jupiter
Выложил...

Добавлено спустя 8 минут
TerminatorX
Красные цифры на синем фоне не очень здорово смотрятся. ИМХО, нужно заниматься развитием функционала, а иконки могут и подождать. Я вот, к примеру, хотел добавить в окно просмотра ассемблерного кода функцию поиска и выделять регистры как бы по маске (то есть, при клике на eax должны выделиться не только все точные совпадения, но и ax, al, ah).

| Сообщение посчитали полезным: DimitarSerg, v00doo, Jupiter, DICI BF, sendersu

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

Создано: 03 января 2019 12:34
· Личное сообщение · #17

Jupiter
Частично согласен, но простым начинающим юзерам админ-версия, всем остальным стандартная. Каждый выберет свой вариант.
crypto
Не нужно так не нужно. Консерватизм не поможет расти проекту. На текущее время не наблюдаю очередь из страждущих улучшить код. Разговоров много а дел мало. Всегда нужны новые люди и их идеи, что является основной ценностью ? Код <> нет. Человек (команда) = Да.
В стадии разработки дополнительная вкладка 'MAP' со списком функций.



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

Создано: 03 января 2019 13:16 · Поправил: v00doo
· Личное сообщение · #18

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




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

Создано: 03 января 2019 14:44
· Личное сообщение · #19

crypto пишет:
64-битную версию IDR тоже выложил, но она пока без декомпилятора

какой смысл этого разделения?

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




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

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

Добавил вкладку "Map (F11)" , "Tabs - Map", в "Strings" пункт "Copy Lines", копирование выделенных строки / строк. При двойном клике (ЛКМ) на строке списка функций переходите по адресу в "Code Viewer".

--> IDR 3.1.19+Src <--




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

Создано: 03 января 2019 19:26
· Личное сообщение · #21

TerminatorX а не проще создать на гитхабе аккаунт и пулить изменения в основную репу ?



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

Создано: 05 января 2019 10:45
· Личное сообщение · #22

TerminatorX
Посмотрел твой код.
1. Мне кажется, Map лучше переименовать, как в ИДА, в Functions
2. В списке каждая запись по сути дублирована, при двойном клике попадаем на один адрес. Лучше оставить одну запись, и выводить не полный прототип, а как у Ильфака - только типы аргументов, если тип неизвестен - "?"). Список большой - нужно сокращать.
3. В связи с появлением твоего списка возникает вопрос: а нужен ли в данном контексте список UnitItems? Может создать еще вкладку Types, куда заносить все типы из всех юнитов, а мою вкладку Types и UnitItems убрать?



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

Создано: 05 января 2019 16:07
· Личное сообщение · #23

reversecode
Мои новогодние каникулы заканчиваются в Вс, а в Пн арбайтен. Частых постов не будет.

crypto
1 Переименовал. 2 Код сырой и недоработан.
3 :
a) Оптимально спросить мнение форумчан.
b) С "Types" хорошая задумка.

Дополнил поддержку пары ключей ( -c, -e ) командной строки. Примеры: idr.exe BuildKb.exe -c 421348 переход по адресу в "CodeViewer", idr.exe BuildKb.exe -e 421348 переход по адресу в "Explorer". Файл бантика прилагается.
--> IDR 5.1.19+Src <--



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

Создано: 05 января 2019 19:28
· Личное сообщение · #24

TerminatorX
Бантики... тут уже кое-кто ими активно занимался А нужны именно такие бантики? Без обид.
ЗЫ
Я сам продумаю, как лучше сделать, форумчане обычно дают весьма противоречивые советы. Без обид.



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

Создано: 06 января 2019 21:17
· Личное сообщение · #25

crypto
Поддержка командной строки нужна программе, для быстрого перехода из одной программы в другую по текущему адресу (автоматизация рутинных действий). Изначально затачивалась под IDA to IDR, скрипты есть в топике форума. Файл бантика нужно спокойно убрать из сборки, он прилагался с примерами строк как один из вариантов реализации. У каждого реверсера есть базовый набор инструментов : Olly, IDA, IDR ...
Если есть возражения ? То аргументы в студию плиз.




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

Создано: 07 января 2019 04:37 · Поправил: ajax
· Личное сообщение · #26

crypto TerminatorX
поддержку иды нормальную надо в скрипте. получается хрень после применения, и re-analyze не помогает
Code:
  1. 0040E258 @_llmul:
  2. 0040E258                 push    edx
  3. 0040E259                 push    eax
  4. 0040E25A                 mov     eax, [esp-198h+arg_1A4]
  5. 0040E25E                 mul     [esp-198h+arg_194]
  6. 0040E261                 mov     ecx, eax
  7. 0040E263                 mov     eax, [esp-198h+arg_198]
  8. 0040E267                 mul     [esp-198h+arg_1A0]
  9. 0040E26B                 add     ecx, eax
  10. 0040E26D                 mov     eax, [esp-198h+arg_194]
  11. 0040E270                 mul     [esp-198h+arg_1A0]
  12. 0040E274                 add     edx, ecx
  13. 0040E276                 pop     ecx
  14. 0040E277                 pop     ecx
  15. 0040E278                 retn    8


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




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

Создано: 07 января 2019 09:08
· Личное сообщение · #27

ajax
Так выложите скрипт, из которого этот код получился.



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

Создано: 14 января 2019 01:13 · Поправил: TerminatorX
· Личное сообщение · #28

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


Добавлено спустя 14 минут
Программа с нотами. --> IDR 140119+Src <--

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

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

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

crypto
Установил RAD Studio XE5 на Windows 7 32 bit, путь 'C:\Program Files\Embarcadero\RAD Studio\12.0\lib\win32\release' и при создании базы знаний выдает ошибку "Out of memory", утилита dcu32int.exe закрывается ОС. В итоге файл kb.bin (размер 252 МБ) создается (в файле $$$.int сообщение !!!EOutOfMemory: "Out of memory"), как его проверить на корректность данных ? В чем засада ?
--> KB XE5 <--



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

Создано: 25 января 2019 18:50
· Личное сообщение · #30

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



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

Создано: 26 января 2019 17:14 · Поправил: crypto
· Личное сообщение · #31

TerminatorX
Наверное слишком много файлов обрабатываете... Вся инфа (а ее много из каждого файла) хранится в памяти. Можно конечно что-то игнорировать (все равно не вся сейчас используется), но это нужно править исходник билдера. Лучше скопировать в отдельную директорию только необходимые файлы, а затем создать в ней юзерскую версию под своим именем. IDR при анализе спрашивает, какую версию грузить, стандартную или нет. Только удалять ее после анализа не надо, при работе она будет необходима

По-поводу твоих доработок: может сначала лучше все проверить, а потом выкладывать? Вещи простые, я их вынужден проверять. Короче, я подправил, что считал нужным.


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