Сейчас на форуме: Rio, vsv1, site-pro (+7 невидимых)

 eXeL@B —› Софт, инструменты —› IDA. Как загрузить имена функций из static linked DLL
Посл.ответ Сообщение

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

Создано: 25 февраля 2012 21:52
· Личное сообщение · #1

Приветствую всех!
Нужна помощь.
Загрузил в IDA файло.EXE (написано на VC++) в процессе написания использовала функции из DLL-ки.
После компиляции функции DDL-ки выли всасаны в тело EXE, тем самым убрав нужду таскать за собой DLL-ку.
Имею саму dll.dll, dll.H и её dll.lib файл.
Пытаюсь востановить исходник - но встала проблема, как загрузить имена функции из DLL-ки?
Очень неудобно читать код с вызовами типа "call sub_65847E53", зная что это вызов какойнить функции из DLL-ки..
Спасибо за любой дельный софет .




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 25 февраля 2012 22:03
· Личное сообщение · #2

Через FLAIR сигнатур нагородить разве что.




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

Создано: 25 февраля 2012 22:03
· Личное сообщение · #3

crackintosh пишет:
Загрузил

crackintosh пишет:
использовала

вы уже с полом своим определитесь))

если dll не експортирует их никак, и дебаг инфо пострипана - смиритесь с
crackintosh пишет:
"call sub_65847E53",




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

Создано: 25 февраля 2012 22:12 · Поправил: crackintosh
· Личное сообщение · #4

2 reversecode: Я загрузил. Программа использовала

DLL-ка экпортирует. Но EXE-ка уже может обойтись и без неё (DLL-ки) так как тела функций
всасаны в EXE.
Есть ли какойнить способ найти тела функций из DLL-ки в EXE-шнике?



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

Создано: 25 февраля 2012 22:45
· Личное сообщение · #5

Интересно, чем это надо компилировать, чтоб "всосать" длл?
Загружаете длл в иду, делаете сигнатуры плагом ... (забыл название), подгружаете сигнатуры в иду с основной прогой.

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




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

Создано: 26 февраля 2012 10:36
· Личное сообщение · #6

"забыл название" - потерял вечер... но так и не нашел нужное название.



Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 26 февраля 2012 10:56 · Поправил: Hexxx
· Личное сообщение · #7

dll.lib - это библиотека экспорта, или это тот же код, что в DLL, но в виде статической либы?

Если ответ да - то --> Link <--

Если нет, то FLAIR.

-----
Реверсивная инженерия - написание кода идентичного натуральному


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

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

Создано: 26 февраля 2012 13:22
· Личное сообщение · #8

Hexxx

если у вас есть вот ето (c указанной линки)
>Исправленную версию можно взять тут: http://extint.narod.ru/Files/coff.rar
закиньте пож-та
Спасибо



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

Создано: 26 февраля 2012 14:37
· Личное сообщение · #9

crackintosh
В аттаче. Если либа идет парой .lib+.dll то в .lib только экспорт будет.

46ce_26.02.2012_EXELAB.rU.tgz - sigs.zip

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




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

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

2 Hexxx: "это тот же код, что в DLL, но в виде статической либы"

Разобрался... большинсво функций DLL дублируются в теле EXE! остальные загружаются динамически. Нафига это сделано - не знаю.

2 sendersu: Ссылка на http://extint.narod.ru/Files/coff.rar мертвая... а жаль. Хороший плаг!

2 r_e: Спасибо! Вечером попробую поюзать плаг.

Уже в 50% кода разобрался - интерфейс востановил. Процесс пошел.
Спасибо всем за помощь!



Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 26 февраля 2012 20:24 · Поправил: Hexxx
· Личное сообщение · #11

Вот, в атаче тот самый coff плагин.

crackintosh пишет:
Разобрался... большинсво функций DLL дублируются в теле EXE!

Либу сделали так что ее можно линковать любым удобным способом. Так же как MFC или CRT может быть влинковано в exe, или быть импортируемой либой.

1113_26.02.2012_EXELAB.rU.tgz - coff.7z

-----
Реверсивная инженерия - написание кода идентичного натуральному


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

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

Создано: 12 сентября 2014 04:18 · Поправил: inoplanetnoe
· Личное сообщение · #12

Для lib файлов новых студий он не работает . Попробовал довести до рабочего состояния, но моего уровня недостаточно. Кто-то может разъяснить что там не так или сразу подпилить плагин до рабочего вида?

Code:
  1. --- coff.cpp      Tue Oct 12 22:53:02 2010
  2. +++ coff.new.cpp  Fri Sep 12 04:30:13 2014
  3. @@ -143,6 +143,9 @@
  4.  ea_t FindBase(FILE * fp, int bookmark, const coff_section_header * textSectionHdr, vector<ge_reloc_t> ge_relocs)
  5.  {
  6.          unsigned int codeBlockLen = textSectionHdr->size;
  7. +
  8. +        if (!codeBlockLen)
  9. +               return BADADDR;
  10.          
  11.          char * codeBlock = (char*)qalloc(codeBlockLen);
  12.          memset(codeBlock, 0, codeBlockLen);
  13. @@ -195,7 +198,7 @@
  14.          
  15.          for (unsigned i = 0; i < hdr.num_sections; i++)
  16.          {
  17. -               if (strcmp(secHdr->name, ".text") == 0 || ((secHdr[i].flags & IMAGE_SCN_CNT_CODE) == IMAGE_SCN_CNT_CODE))
  18. +               if (_memicmp(secHdr->name, ".text", 5) == 0 || ((secHdr[i].flags & IMAGE_SCN_CNT_CODE) == IMAGE_SCN_CNT_CODE))
  19.                 {
  20.                       ge_section_t sect;
  21.                       sect.section = secHdr[i];
  22. @@ -273,7 +276,7 @@
  23.          qfread(fp, &hdr, sizeof(coff_file_header));
  24.          if (hdr.cpu_type != IMAGE_FILE_MACHINE_I386)
  25.          {
  26. -               msg("COFF Plugin -> This plugin only applicable for 32bit i386 COFF format!\n");
  27. +               msg("COFF Plugin -> Expected 32bit i386 format (format: %02a)!\n", hdr.cpu_type);
  28.                 return;
  29.          }
  30.  
  31. @@ -314,45 +317,28 @@
  32.  void ParseLibFile(FILE * fp)
  33.  {
  34.                 
  35. -        arch_header hdr;
  36. -        qfread(fp, &hdr, sizeof(arch_header));
  37. -
  38. -        int _1stLen = atol(_S(hdr.size));
  39. -        qfseek(fp, _1stLen, SEEK_CUR); // skip 1st. header
  40. -
  41. -        align(fp);
  42. -
  43. -        qfread(fp, &hdr, sizeof(arch_header));
  44. -
  45. -        int _2ndLen = atol(_S(hdr.size));
  46. -        int bookMark1 = qftell(fp);
  47. -        int numberOfMembers = 0;
  48. -        qfread(fp, &numberOfMembers, sizeof(numberOfMembers));
  49. -
  50. -        if (numberOfMembers)
  51. +        arch_header head;
  52. +        int bookmark_head;
  53. +        static int header_size = sizeof(arch_header);
  54. +        qfread(fp, &head, header_size);
  55. +        while (qfseek(fp, atol(_S(head.size)), SEEK_CUR) == 0)
  56.          {
  57. -               vector<int> objFiles(numberOfMembers);
  58. -               qfread(fp,&objFiles.front(),numberOfMembers*sizeof(int));
  59. -
  60. -               int numberOfSymbols = 0;
  61. -               qfread(fp, &numberOfSymbols, sizeof(numberOfSymbols));
  62. -               qfseek(fp, bookMark1, SEEK_SET); // go back to end of the 2nd. header
  63. -               qfseek(fp, _2ndLen, SEEK_CUR); // skip 2nd. header
  64. -
  65.                 align(fp);
  66. -
  67. -               qfread(fp, &hdr, sizeof(arch_header));
  68. -               for (unsigned i = 0; i < objFiles.size(); i++)
  69. -               {
  70. -                     qfseek(fp, objFiles[i], SEEK_SET);
  71. -                     qfread(fp, &hdr, sizeof(arch_header));
  72. +               if (qfread(fp, &head, header_size) == header_size) {
  73. +                     bookmark_head = qftell(fp);
  74.                       applyCoffObject(fp);
  75. -                     if (wasBreak()) 
  76. -                          break;
  77.                 }
  78. +               else
  79. +               {
  80. +                     msg("COFF Plugin -> end of file reached!\n");
  81. +                     break;
  82. +               }
  83. +               if (wasBreak()) 
  84. +                     break;
  85. +               qfseek(fp, bookmark_head, SEEK_SET);
  86.          }
  87. -        else
  88. -               error("This lib file has no object files within!");
  89. +        //else
  90. +        //     error("This lib file has no object files within!");
  91.  
  92.          
  93.  }


98e3_12.09.2014_EXELAB.rU.tgz - coff.new.cpp


 eXeL@B —› Софт, инструменты —› IDA. Как загрузить имена функций из static linked DLL
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати