Сейчас на форуме: _MBK_ (+5 невидимых)

 eXeL@B —› Вопросы новичков —› ida - исследование linux elf
Посл.ответ Сообщение

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

Создано: 24 октября 2010 18:10 · Поправил: MadHacker
· Личное сообщение · #1

Здравствуйте.
Имеется в наличие ida 5.5.0.925t крякнутая откуда то с этого форума.
Имеется файл: gs: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.2.5, not stripped
Файл представляет из себя сервер онлайн игрушки (точнее один из компонентов сервера. но это в принципе не важно).
Весит файл примерно 130 метров и из них 120 метров это отладочная информация. (если пройтись стрипом остаётся 8 с небольшим метров от файла).
Глобально задача состоит в том чтобы извлечь из файла структуры данных которыми этот компонент сервера обменивается с клиентом (исследование протокола игры). но ввиду полного отсутствия опыта исследовательского задача упрощается:
Начать я хочу с того, чтобы нормально скормить этот файл в IDA. Дело в том, что файл содержит в себе имена локальных переменных и их типы, а так же имена и типы аргументов передаваемых в функции - всё это замечательно видит GDB. Но я совершенно не знаю как заставить IDA прочитать из этого файла имена локальных переменный и отобразить их. Гугл ответа не дал. Сидеть в GDB и вручную переименовывать локальные переменные и аргументы функций - удовольствие сомнительное. Вменяемой литературы по анализу эльфов идой я найти не смог. На тематических форумах посвящённых этой игре искать информацию тоже бессмысленно - она вся скрыта от глаз простых смертных. Единственный способ добыть нужную информацию - научится получать её самому .
Дополнительная информация о файле.
Code:
  1. readelf -h  gs
  2. ELF Header:
  3.   Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  4.   Class:                             ELF32
  5.   Data:                              2's complement, little endian
  6.   Version:                           1 (current)
  7.   OS/ABI:                            UNIX - System V
  8.   ABI Version:                       0
  9.   Type:                              EXEC (Executable file)
  10.   Machine:                           Intel 80386
  11.   Version:                           0x1
  12.   Entry point address:               0x804d480
  13.   Start of program headers:          52 (bytes into file)
  14.   Start of section headers:          130424836 (bytes into file)
  15.   Flags:                             0x0
  16.   Size of this header:               52 (bytes)
  17.   Size of program headers:           32 (bytes)
  18.   Number of program headers:         8
  19.   Size of section headers:           40 (bytes)
  20.   Number of section headers:         39
  21.   Section header string table index: 36

Секции файла:
Code:
  1. readelf -S  gs
  2. There are 39 section headers, starting at offset 0x7c62004:
  3.  
  4. Section Headers:
  5.   [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  6.   [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  7.   [ 1] .interp           PROGBITS        08048134 000134 000013 00   A  0   0  1
  8.   [ 2] .note.ABI-tag     NOTE            08048148 000148 000020 00   A  0   0  4
  9.   [ 3] .hash             HASH            08048168 000168 000914 04   A  4   0  4
  10.   [ 4] .dynsym           DYNSYM          08048a7c 000a7c 0013c0 10   A  5   1  4
  11.   [ 5] .dynstr           STRTAB          08049e3c 001e3c 001de2 00   A  0   0  1
  12.   [ 6] .gnu.version      VERSYM          0804bc1e 003c1e 000278 02   A  4   0  2
  13.   [ 7] .gnu.version_r    VERNEED         0804be98 003e98 000100 00   A  5   5  4
  14.   [ 8] .rel.dyn          REL             0804bf98 003f98 000080 08   A  4   0  4
  15.   [ 9] .rel.plt          REL             0804c018 004018 0006c0 08   A  4  11  4
  16.   [10] .init             PROGBITS        0804c6d8 0046d8 000017 00  AX  0   0  4
  17.   [11] .plt              PROGBITS        0804c6f0 0046f0 000d90 04  AX  0   0  4
  18.   [12] .text             PROGBITS        0804d480 005480 499f38 00  AX  0   0 16
  19.   [13] .fini             PROGBITS        084e73b8 49f3b8 00001b 00  AX  0   0  4
  20.   [14] .rodata           PROGBITS        084e73e0 49f3e0 0b3e57 00   A  0   0 32
  21.   [15] .eh_frame_hdr     PROGBITS        0859b238 553238 035c7c 00   A  0   0  4
  22.   [16] .eh_frame         PROGBITS        085d0eb4 588eb4 0f7424 00   A  0   0  4
  23.   [17] .gcc_except_table PROGBITS        086c82d8 6802d8 025366 00   A  0   0  4
  24.   [18] .ctors            PROGBITS        086ee000 6a6000 0001d0 00  WA  0   0  4
  25.   [19] .dtors            PROGBITS        086ee1d0 6a61d0 000008 00  WA  0   0  4
  26.   [20] .jcr              PROGBITS        086ee1d8 6a61d8 000004 00  WA  0   0  4
  27.   [21] .dynamic          DYNAMIC         086ee1dc 6a61dc 0000f0 08  WA  5   0  4
  28.   [22] .got              PROGBITS        086ee2cc 6a62cc 000008 04  WA  0   0  4
  29.   [23] .got.plt          PROGBITS        086ee2d4 6a62d4 00036c 04  WA  0   0  4
  30.   [24] .data             PROGBITS        086ee640 6a6640 02926c 00  WA  0   0 32
  31.   [25] .bss              NOBITS          087178c0 6cf8c0 0982ac 00  WA  0   0 32
  32.   [26] .comment          PROGBITS        00000000 6cf8c0 002aad 00      0   0  1
  33.   [27] .debug_aranges    PROGBITS        00000000 6d236d 0aaa28 00      0   0  1
  34.   [28] .debug_pubnames   PROGBITS        00000000 77cd95 509acf 00      0   0  1
  35.   [29] .debug_info       PROGBITS        00000000 c86864 6738ce8 00      0   0  1
  36.   [30] .debug_abbrev     PROGBITS        00000000 73bf54c 07f7a2 00      0   0  1
  37.   [31] .debug_line       PROGBITS        00000000 743ecee 2943bb 00      0   0  1
  38.   [32] .debug_frame      PROGBITS        00000000 76d30ac 2841b4 00      0   0  4
  39.   [33] .debug_str        PROGBITS        00000000 7957260 307d1e 00      0   0  1
  40.   [34] .debug_ranges     PROGBITS        00000000 7c5ef7e 002f08 00      0   0  1
  41.   [35] .note             NOTE            00000000 7c61e86 000014 00      0   0  1
  42.   [36] .shstrtab         STRTAB          00000000 7c61e9a 000168 00      0   0  1
  43.   [37] .symtab           SYMTAB          00000000 7c6261c 151ef0 10     38 3432  4
  44.   [38] .strtab           STRTAB          00000000 7db450c 3a7af6 00      0   0  1
  45. Key to Flags:
  46.   W (write), A (alloc), X (execute), M (merge), S (strings)
  47.   I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
  48.   O (extra OS processing required) o (OS specific), p (processor specific)


А вот так его грузит IDA
Code:
  1.   bytes   pages size description
  2. --------- ----- ---- --------------------------------------------
  3. 134217728 16384 8192 allocating memory for b-tree...
  4. 268435456 32768 8192 allocating memory for virtual array...
  5.    262144    32 8192 allocating memory for name pointers...
  6. -----------------------------------------------------------------
  7. 402915328            total memory allocated
  8.  
  9. Loading IDP module C:\Program Files\IDA\procs\pc.w32 for processor metapc...OK
  10. Autoanalysis subsystem has been initialized.
  11. Possible file format: ELF (Executable) (C:\Program Files\IDA\loaders\elf.ldw)
  12. Loading file 'gs' into database...
  13. Detected file format: ELF (Executable)
  14. Assuming __cdecl calling convention by default
  15.   0. Creating a new segment  (0804C6D8-0804C6EF) ... ... OK
  16.   1. Creating a new segment  (0804C6F0-0804D480) ... ... OK
  17.   2. Creating a new segment  (0804D480-084E73B8) ... ... OK
  18.   3. Creating a new segment  (084E73B8-084E73D3) ... ... OK
  19.   4. Creating a new segment  (084E73E0-0859B237) ... ... OK
  20.   5. Creating a new segment  (0859B238-085D0EB4) ... ... OK
  21.   6. Creating a new segment  (085D0EB4-086C82D8) ... ... OK
  22.   7. Creating a new segment  (086C82D8-086ED63E) ... ... OK
  23.   8. Creating a new segment  (086EE000-086EE1D0) ... ... OK
  24.   9. Creating a new segment  (086EE1D0-086EE1D8) ... ... OK
  25.  10. Creating a new segment  (086EE1D8-086EE1DC) ... ... OK
  26.  11. Creating a new segment  (086EE2CC-086EE2D4) ... ... OK
  27.  12. Creating a new segment  (086EE2D4-086EE640) ... ... OK
  28.  13. Creating a new segment  (086EE640-087178AC) ... ... OK
  29.  14. Creating a new segment  (087178C0-087AFB6C) ... ... OK
  30. Loading symbols...
  31. MACRO_EXTA: failed to add constant CSIZE=48
  32.  15. Creating a new segment  (087AFB6C-08804818) ... ... OK
  33.  16. Creating a new segment  (08804818-088594C4) ... ... OK
  34. Adding relocations...
  35. Patching program-linkage-table for best viewing...
  36. Marking typical code sequences...
  37. Flushing buffers, please wait...ok
  38. File 'gs' is successfully loaded into the database.
  39. Compiling file 'C:\Program Files\IDA\idc\ida.idc'...
  40. Executing function 'main'...
  41. Compiling file 'C:\Program Files\IDA\idc\onload.idc'...
  42. Executing function 'OnLoad'...
  43. IDA is analysing the input file...
  44. You may start to explore the input file right now.
  45. failed to add structure type sigaction
  46. Propagating type information...
  47. Function argument information has been propagated
  48. The initial autoanalysis has been finished.


Прошу подсказать как мне правильно загрузить этот файл в IDA. Чтобы видеть имена локальных переменных и спокойно исследовать файл дальше.
Так же буду рад ссылкам на гайды по теме.




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 25 октября 2010 14:32
· Личное сообщение · #2

Для обычного exe, ИДА может генерировать map файл в котором можно включить: локальные имена, деманглер, видимо для эльфа также, а где файл?

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




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

Создано: 25 октября 2010 18:59 · Поправил: MadHacker
· Личное сообщение · #3

Вот сам файлик. http://zalil.ru/29867202
В 7z архиве примерно 19Mb MD5 f87b74ca0dfad2011730b975495e1803
В распакованном почти 130 Mb MD5 2dbaccf5a3bbd8f488108bc1c10683c7
Сори что сразу не выложил.

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



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

Создано: 28 октября 2010 19:59
· Личное сообщение · #4

Чтож. видимо то о чём я спросил либо слишком банально либо слишком редко встречается.

я несколько переформулирую вопросы:
1) где можно почитать о том, как ида загружает ELF (ну или хоть какие нибудь) файлы (желательно на русском).
2) где можно почитать о ручной загрузке файла (не расшифровке сложных алгоритмов а просто о ручной пошаговой загрузке)



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 31 октября 2010 16:46
· Личное сообщение · #5

MadHacker
Если GDB все видит, не проще ли воспользоватся его командой disasm?



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

Создано: 02 ноября 2010 20:29
· Личное сообщение · #6

tundra37 пишет:
Если GDB все видит, не проще ли воспользоватся его командой disasm?

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

Может хотя бы можете подсказать хорошие сайты с сигнатурами для IDA и статьи по созданию сигнатур?


 eXeL@B —› Вопросы новичков —› ida - исследование linux elf
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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