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

 eXeL@B —› Софт, инструменты —› Interactive Delphi Reconstructor (IDR). Миттельшпиль
<< 1 ... 36 . 37 . 38 . 39 . 40 . 41 . 42 . 43 . 44 . 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

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

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

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

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




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

Создано: 28 декабря 2016 10:20 · Поправил: ajax
· Личное сообщение · #2

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

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




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

Создано: 28 декабря 2016 12:08
· Личное сообщение · #3

cryptX
У меня пока процесс-дампер не работает. Поэтому остановимся на первом варианте.

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

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

Создано: 29 декабря 2016 11:17 · Поправил: crypto
· Личное сообщение · #4

Бросил пока сюда --> Link <--, потестите, потом на сайт выложу.

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

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

Создано: 30 декабря 2016 02:50
· Личное сообщение · #5

crypto пишет:
потестите, потом на сайт выложу.


Заменил файл для старой версии - ошибка в программе.
Проверил скачав последние версии и заменив файл - дампер работает.



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

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

lsdmax
Если честно, ничего не понял.

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


Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 27 января 2017 04:45
· Личное сообщение · #7

Заметил, что как-то криво стали генерироваться MAP файлы - mapimp олькин их не понимает.
Code:
  1.   Address         Publics by Value
  2.  0001:000002F0       system.kernel32.CloseHandle
  3. 4012F0 function kernel32.CloseHandle:Integer; stdcall;
  4.  0001:000002F8       system.kernel32.GetFileType
  5. 4012F8 function kernel32.GetFileType:DWORD; stdcall;
  6.  0001:00000300       system.kernel32.GetFileSize
  7. 401300 function kernel32.GetFileSize(x:Integer):Integer; stdcall;
  8.  0001:00000308       system.kernel32.GetStdHandle
  9. 401308 function kernel32.GetStdHandle:Integer; stdcall;


И вот так весь файл. Если убрать строки начинающиеся с виртуальных адресов, импортируется нормально.

И небольшое пожелание - возможность разбивать генерируемые IDC скрипты на несколько частей. Пару раз пытался запустить файлы по 400-500 метров весом. Ида надолго вешается и в результате плюётся ошибками при компиляции скрипта. Вручную их разбивать нудно.

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

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

Создано: 27 января 2017 11:16
· Личное сообщение · #8

-=AkaBOSS=-
А в чем дело с этим типом? Подскажите, тогда исправлю.
Насчет разбиения - сделаю. Все равно, в каком месте прерывать? Если да, то могу генерить куски заданного объема. Опять же, какого лучше.




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 28 января 2017 03:04 · Поправил: -=AkaBOSS=-
· Личное сообщение · #9

crypto пишет:
А в чем дело с этим типом? Подскажите, тогда исправлю.


Как я уже писал - если убрать строки начинающиеся с виртуальных адресов (с прототипами функций), импортируется нормально.
Для примера, тот же кусок мапа от Иды:
Code:
  1. 0001:000002F0       kernel32_CloseHandle
  2. 0001:000002F8       kernel32_GetFileType
  3. 0001:00000300       kernel32_GetFileSize
  4. 0001:00000308       kernel32_GetStdHandle

Этот импортируется без проблем.

crypto пишет:
Если да, то могу генерить куски заданного объема. Опять же, какого лучше.

Ну можно давать юзеру выбор. У меня пару миллионов строк Ида переваривает, а у когото памяти и на это может не хватить.


Небольшой гуёвый баг - статусная строка ползает при прокрутке списка



И еще одна.. особенность.
Если в функции встречается мусорный кусок (после прыжка в вм, например), ИДР паникует "Assertion failed: Idx >= 0 && Idx < 32, file C:\PAPA\IDR\Misc.cpp, line 826" после чего выдаёт "Abnormal program termination" и закрывается.
Хотелось бы, чтобы она это как-то помягче обрабатывала.



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

Создано: 04 февраля 2017 17:34 · Поправил: crypto
· Личное сообщение · #10

-=AkaBOSS=-
Я туплю: вот эта хрень
#include <idc.idc>
static clear(from){
auto ea;
ea = from;
while (1){
ea = NextFunction(ea);
if (ea == -1) break;
DelFunction(ea);
MakeNameEx(ea, "", 0);}
ea = from;
while (1){
ea = FindExplored(ea, SEARCH_DOWN | SEARCH_NEXT);
if (ea == -1) break;
MakeUnkn(ea, 1);}
}
должна быть в начале каждого куска или только в самом начале?




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

Создано: 05 февраля 2017 02:38
· Личное сообщение · #11

crypto пишет:
должна быть в начале каждого куска или только в самом начале?


Я ее вообще выбрасываю, чтобы не портила уже проанализированный код.

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


Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 05 февраля 2017 04:16
· Личное сообщение · #12

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



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

Создано: 05 февраля 2017 09:14 · Поправил: crypto
· Личное сообщение · #13

Похоже этот скрипт чистит все, что уже сделано. Наверное его нужно оставить только в первом скрипте?



Ранг: 12.0 (новичок), 17thx
Активность: 0.060
Статус: Участник

Создано: 05 февраля 2017 09:31
· Личное сообщение · #14

crypto пишет: должна быть в начале каждого куска или только в самом начале?

только в начале, но я бы и туда его не ставил.
не нужно забывать, что delphi это не только pure object pascal, но и прилинкованные obj файлы писанные на православной сишке, здесь ваш декомпиль обломается, и анализ IDA убьете.

Добавлено спустя 10 минут
просмотрел исходники вашего декомпиля, может пока отложить добавление фич и сделать рефакторинг?
например избавиться от разношерстных типов, все свалено в кучу, типы билдера, системные, stl, в итоге каша которую сложно разгребать если не девелопил проект с самого начала.
у некоторых функций нет имен, стоят стандартные имена которые дает IDA.
перевести проект на unicode или жестко указывать AnsiString, не все же девелопят на древних версиях, а на новых не каждый полезет в реестр убирать юникод который по умолчанию и править самому то еще удовольствие, учитывая кашу из типов с отсутствием вменяемых инсрументов для рефакторинга у билдера.



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

Создано: 05 февраля 2017 13:41 · Поправил: crypto
· Личное сообщение · #15

-=AkaBOSS=-
Выложил все изменения (в том числе исполняемый файл) на github
https://github.com/crypto2011/IDR/blob/master/Idr.exe

Не знаю, какой версией ты пользовался, но строки, начинающиеся с виртуальных адресов, у меня уже давно идут без прототипов в idc. Или я что-то не так понимаю? Объясни.

neshta
Лишние фичи не помешают. Кому надо, тот разберется



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

Создано: 05 февраля 2017 19:21 · Поправил: SReg
· Личное сообщение · #16

crypto
Он про то, что .map файл генерится кривой для Olly

хороший файл, созданный в ранних версиях ИДР
--> Link <--

не годный файл, который генерят последние несколько билдов ИДР(включая этот)
--> Link <--

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

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

Создано: 06 февраля 2017 09:33 · Поправил: crypto
· Личное сообщение · #17

SReg
Семен Семеныч!
Поправил, выложил туда же (теперь все обновления ищите на github). Остальные замечания позже.



Ранг: 134.1 (ветеран), 246thx
Активность: 0.220.1
Статус: Участник
realist

Создано: 06 февраля 2017 14:41 · Поправил: Jaa
· Личное сообщение · #18

crypto
Не совсем исправленный вариант вы выложили. Сначало немного нормальных строк, а потом тоже самое

Code:
  1.  0001:00003C4C       System.advapi32.RegOpenKeyExW
  2.  0001:00003C54       System.advapi32.RegQueryValueExW
  3.  0001:00003C5C       System.kernel32.GetVersion
  4.  0001:00003C64       System.kernel32.GetSystemInfo
  5.  0001:00003C6C       System.kernel32.GetTickCount
  6.  0001:00003C74       System.kernel32.QueryPerformanceCounter
  7.  0001:00003C7C       System.kernel32.VirtualQuery
  8.  0001:00003C84       System.oleaut32.SysAllocStringLen
  9.  0001:00003C8C       System.oleaut32.SysReAllocStringLen
  10.  0001:00003C94       System.oleaut32.SysFreeString
  11.  0001:00003C9C       System.kernel32.lstrlenW
  12.  0001:00003CA4       System.kernel32.dll
  13. 404CA4 procedure kernel32.dll;
  14.  0001:00003CB4       System.$thunk_GetLogicalProcessorInformation
  15. 404CB4 procedure $thunk_GetLogicalProcessorInformation;
  16.  0001:00003CC4       System.GetLogicalProcessorInformation
  17. 404CC4 function GetLogicalProcessorInformation(Buffer:PSYSTEM_LOGICAL_PROCESSOR_INFORMATION; var ReturnedLength:Cardinal):LongBool; stdcall;
  18.  0001:00003CCC       System.GetCmdShow
  19. 404CCC function GetCmdShow:Integer;
  20.  0001:00003CF8       System.kernel32.VirtualAlloc
  21.  0001:00003D00       System.kernel32.VirtualFree
  22.  0001:00003D08       System.kernel32.Sleep
  23.  0001:00003DF0       System.LockCmpxchg
  24. 404DF0 function LockCmpxchg(CompareVal:Byte; NewVal:Byte; AAddress:PByte):Byte; inADC
  25.  0001:00003DF8       System.Move12
  26. 404DF8 procedure Move12(const ASource:void ; var ADest:void ; ACount:NativeInt); inADC
  27.  0001:00003E0C       System.Move20
  28. 404E0C procedure Move20(const ASource:void ; var ADest:void ; ACount:NativeInt); inADC
  29.  0001:00003E2C       System.Move28
  30. 404E2C procedure Move28(const ASource:void ; var ADest:void ; ACount:NativeInt); inADC
  31.  0001:00003E58       System.Move36
  32. 404E58 procedure Move36(const ASource:void ; var ADest:void ; ACount:NativeInt); inADC
  33.  0001:00003E78       System.Move44
  34. 404E78 procedure Move44(const ASource:void ; var ADest:void ; ACount:NativeInt); inADC
  35.  0001:00003E9C       System.Move52
  36. 404E9C procedure Move52(const ASource:void ; var ADest:void ; ACount:NativeInt); inADC
  37.  0001:00003EC8       System.Move60
  38. 404EC8 procedure Move60(const ASource:void ; var ADest:void ; ACount:NativeInt); inADC
  39.  0001:00003EF8       System.Move68
  40. 404EF8 procedure Move68(const ASource:void ; var ADest:void ; ACount:NativeInt); inADC
  41.  0001:00003F30       System.MoveX16LP
  42. 404F30 procedure MoveX16LP(const ASource:void ; var ADest:void ; ACount:NativeInt); inADC
  43.  0001:00003F60       System.MoveX8LP
  44. 404F60 procedure MoveX8LP(const ASource:void ; var ADest:void ; ACount:NativeInt); inADC
  45.  0001:00003F7C       System.RemoveMediumFreeBlock
  46. 404F7C procedure RemoveMediumFreeBlock(APMediumFreeBlock:PMediumFreeBlock); inA
  47.  0001:00003FBC       System.InsertMediumBlockIntoBin
  48. 404FBC procedure InsertMediumBlockIntoBin(APMediumFreeBlock:PMediumFreeBlock; AMediumBlockSize:Cardinal); inAD
  49.  0001:0000401C       System.BinMediumSequentialFeedRemainder
  50. 40501C procedure BinMediumSequentialFeedRemainder;
  51.  0001:00004088       System.AllocNewSequentialFeedMediumPool
  52. 405088 function AllocNewSequentialFeedMediumPool(AFirstBlockSize:Cardinal):Pointer; inA
  53.  0001:00004100       System.LockLargeBlocks
  54. 405100 procedure LockLargeBlocks;
  55.  0001:00004148       System.AllocateLargeBlock


--> map file <--



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

Создано: 06 февраля 2017 17:00 · Поправил: crypto
· Личное сообщение · #19

Jaa
Тут какая-то "левая" процедура procedure kernel32.dll. Файл исходный выложите плиз
И я все-таки не совсем понимаю, каков признак процедур, для которых не нужны прототипы. А может вообще прототипы не выводить? От них только вред



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

Создано: 06 февраля 2017 21:56
· Личное сообщение · #20

crypto
так на любом файле такая беда. вначале нормально а потом уже нет.
файл в аттаче как пример...

crypto пишет:
А может вообще прототипы не выводить? От них только вред

может и не выводить, просто сделать .map для Olly как в прежних версиях и всё.



e9ef_06.02.2017_EXELAB.rU.tgz - dcu32int.exe




Ранг: 253.5 (наставник), 684thx
Активность: 0.260.25
Статус: Участник
radical

Создано: 06 февраля 2017 23:36
· Личное сообщение · #21

crypto
в принципе можно было и не править (я например, в 2 клика в AkelPad, можно и в другом нажимаю сортировку строк по имени, сохраняю, получается правильные строки мап-файла идут в начале, такой файл успешно применится mapimp'ом).

-----
ds





Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 07 февраля 2017 02:22
· Личное сообщение · #22

DimitarSerg, любопытный способ)
я в том же акелпаде прохожу заменой на пустую строку через регэксп ^[0-9A-F]{6}.+?\n



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

Создано: 07 февраля 2017 09:57
· Личное сообщение · #23

Убрал прототипы. Файл там же, на github

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

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

Создано: 11 февраля 2017 12:43
· Личное сообщение · #24

Небольшой гуёвый баг - статусная строка ползает при прокрутке списка
Пришлось убрать из главного окна статус-бар и прогресс-бар. Положил на github. Возможны проблемы.
ЗЫ
Да, в дальнейшем лучше свои замечания фиксировать на github, а то здесь тема уже всем надоела. Подумаю, не закрыть ли ее совсем...



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

Создано: 11 февраля 2017 14:10
· Личное сообщение · #25

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

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

| Сообщение посчитали полезным: yuryrce, SReg, zNob, Dart Raiden, 4kusNick, MacTep


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

Создано: 12 февраля 2017 01:57
· Личное сообщение · #26

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



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

Создано: 12 февраля 2017 11:42 · Поправил: crypto
· Личное сообщение · #27

reversecode
А зачем мне что-то делать для ИДЫ? Вполне хватит генератора IDC.
Исходники билдера баз знаний находятся на github, можете попробовать сами сделать сигнатуры.




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

Создано: 12 февраля 2017 11:59
· Личное сообщение · #28

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

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

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

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

Создано: 12 февраля 2017 12:16 · Поправил: crypto
· Личное сообщение · #29

reversecode
Взглянем. А кто-нибудь пытался? Да, похоже большинство юзеров занимается кряками, поэтому им достаточно подобной технологии использования IDR. Я, к примеру, уже несколько больших проектов сделал с помощью моего инструмента и очень им доволен (последний проект состоит из 230 файлов объема 12М). ИДА в таких проектах слабо поможет, потому-что ее декомпилятор создает С-подобный текст. Не спорю, исходный текст, создаваемый IDR, нужно обрабатывать и здесь помог бы какой-нибудь плагин, зато он ориентирован на Дельфи. Исходники выложены, желающие могут менять что угодно в любую сторону.

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

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

Создано: 12 февраля 2017 16:00
· Личное сообщение · #30

>> наверное потому что идр используется многими или рискну сказать всеми, как фронт для генерации idc или map

Так и есть
https://habrahabr.ru/post/255767/




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

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

crypto пишет:
исходный текст, создаваемый IDR


Гм. У меня там всегда пустое окно. Расскажите, plz, - где и что нажать, чтобы хоть что-то увидеть. (Текст на Delphi для меня все равно нечитаем, просто любопытно).


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