Сейчас на форуме: rmn, Magister Yoda, vasilevradislav, tyns777, zombi-vadim (+5 невидимых)

 eXeL@B —› Программирование —› Вопрос по построению таблицы импорта вручную
Посл.ответ Сообщение


Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 02 сентября 2008 22:09
· Личное сообщение · #1

Вот собственно собираю свою таблицу импорта вручную, и тут тормознулся на одном моменте. Ниже предоставлен фрагмент из структуры IMAGE_IMPORT_DESCRIPTOR.
Code:
  1. DD Unpack.0044F6A3
  2. DD 00000000                                      ; Struct 'IMAGE_IMPORT_DESCRIPTOR'
  3. DD 00000000
  4. DD 00000000
  5. DD 000790A6
  6. DD 0005339C
  7. DD 00000000                                      ; Struct 'IMAGE_IMPORT_DESCRIPTOR'
  8. DD 00000000
  9. DD 00000000
  10. DD 000790B2
  11. DD 000533AC
  12. DD 00000000                                      ; Struct 'IMAGE_IMPORT_DESCRIPTOR'
  13. DD 00000000
  14. DD 00000000
  15. DD 00079102
  16. DD 00053028

Что это за число такое перед началом структуры и главное - почему первый список имён функций завершается названием библиотеки, а все последующие списки с неё начинаются
Code:
  1. ASCII "VerQueryValueA",0   <---------
  2. DB 00                                |
  3. DB 00                                |
  4. DB 00                                |
  5. ASCII "GetFileVersionIn"             |
  6. ASCII "foA",0                        | 
  7. DB 00                                |
  8. DB 00                                |
  9. ASCII "GetFileVersionIn"             |
  10. ASCII "foSizeA",0                    |
  11. ASCII "VERSION.dll",0      <---------   -------- Имя библиотеки завершило список
  12. ASCII "WSOCK32.dll",0      <---------   -------- Имя библиотеки начало список
  13. DB 00                                |
  14. DB 00                                |
  15. ASCII "ImageList_LoadIm"             | 
  16. ASCII "ageA",0                       |
  17. DB 00                                |
  18. DB 00                                |
  19. DB 00                                |
  20. ASCII "ImageList_Replac"             |
  21. ASCII "eIcon",0                      |
  22. DB 00                                |
  23. DB 00                                |
  24. ASCII "ImageList_Create"             |
  25. ASCII 0       <----------------------          
  26. DB 00                                
  27. ASCII "COMCTL32.dll",0     <---------   -------- Имя библиотеки начало список
  28. DB 00                                |
  29. DB 00                                |
  30. DB 00                                |
  31. ASCII "GetEnvironmentVa"             |
  32. ASCII "riableA",0                    |
  33. DB 00                                |
  34. DB 00                                |
  35. ASCII "SetEnvironmentVa"             |
  36. ASCII "riableA",0                    |
  37. DB 00                                |
  38. DB 00                                |
  39. ASCII "WriteFile",0                  | 
  40. .....


Дальше списки будут токрываться именем библиотеки. Тоесть в первом списке мне всегда надо будет закрывать список именем библиотеки, а во всех последующих открывать?

-----
Research For Food





Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 02 сентября 2008 22:30
· Личное сообщение · #2

www.wasm.ru/article.php?article=1002006

-----
[nice coder and reverser]





Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 02 сентября 2008 22:37
· Личное сообщение · #3

Hellspawn
Ну ответь хоть в кратце на вопросы, дальше сам разбирусь. Голова уже совсем не соображает

-----
Research For Food





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 02 сентября 2008 23:18
· Личное сообщение · #4

daFix никто тебя ничем не ограничивает, как захочешь так и будет. Можешь сделать список из длл за ним список из апи, хочешь сделай длл, за ней все апи, снова длл.... А то что ты приводишь - ... ну просто линкер захотел сделать так, ты не обязан повторять, если конечно не хочешь под него косить.

-----
Yann Tiersen best and do not fuck





Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 02 сентября 2008 23:32
· Личное сообщение · #5

А количество нулевых байтов может быть любым между строками с названиями функций и библиотек?
И всё же чё это за адрес - в нашем случае: 0044F6A3?

-----
Research For Food





Ранг: 154.2 (ветеран), 66thx
Активность: 0.080
Статус: Участник
REVENGE Crew

Создано: 02 сентября 2008 23:37
· Личное сообщение · #6

daFix пишет:
Дальше списки будут окрываться именем библиотеки. Тоесть в первом списке мне всегда надо будет закрывать список именем библиотеки, а во всех последующих открывать?


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

Перед именем функции указывается ее ординал (т.е. номер по которому она экспортируется из требуемой библиотеки), размер 2 байта (т.е. word). После имени функции должен соответственно идти ноль.


Почитай про структуру импорта, а лучше сразу загрузи с сайта Майкрософта описание формата PE, посмотришь его и многие вопросы отпадут сами.

Microsoft Portable Executable and Common Object File Format Specification http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx


Вкратце, у тебя должно быть 3 массива:

1. IAT

Указатели на первый Thunk и имя библиотеки (для каждой библиотеки по записи), 1 запись состоит из 5 dword'ов, конец 5 пустых dword'ов, т.е. нулей) - структуру смотри в описании.

2. Thunks

Указатели на имена функций, функции разных библиотек разделяются нулем (dword), конец всего массива - два нуля.

3. Имена функций

Как уже говорил с ординалами перед именем и нулем в конце строки.




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 03 сентября 2008 00:03
· Личное сообщение · #7

Всё, теперь разобрался во всём кроме этого загадочного адреса перед IMAGE_IMPORT_DESCRIPTOR

-----
Research For Food




Ранг: 271.5 (наставник), 12thx
Активность: 0.150
Статус: Участник
Packer Reseacher

Создано: 03 сентября 2008 11:03 · Поправил: theCollision
· Личное сообщение · #8

daFix
Указатель, который хранится в DataDirectory 2-м по счету, 1-й это экспорт. Так вот этот указатель на массив структур (IMAGE_IMPORT_DESCRIPTOR) и имеет тип (IMAGE_IMPORT_DESCRIPTOR*) . Каждая такая структура описывает одну dll, т.е. все фукции из этой dll используемые в программе можно найти благодаря этой структуре . Это один из импортов, называемый стандартным ;)

Еще вопросы ?

-----
My love is very cool girl.





Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 03 сентября 2008 12:31 · Поправил: daFix
· Личное сообщение · #9

theCollision
Наверное ты не понял вопроса или я туплю. Этот адрес(0044F6A3) не входит в структуру. Он находится перед ней. Ссылается на следующие байты:

Code:
  1. 0044F6A3       33                                                    DB 33
  2. 0044F6A4       F6                                                    DB F6
  3. 0044F6A5       8B                                                    DB 8B
  4. 0044F6A6       7D                                                    DB 7D
  5. 0044F6A7       18                                                    DB 18

Или может быть это случайное число которое не имеет ни какого отношения к таблице импорта?

-----
Research For Food




Ранг: 1045.7 (!!!!), 31thx
Активность: 0.570
Статус: Участник

Создано: 03 сентября 2008 12:38
· Личное сообщение · #10

daFix пишет:
Или может быть это случайное число которое не имеет ни какого отношения к таблице импорта?

не имет, у тебя делфовая таблица похоже ;)



Ранг: 271.5 (наставник), 12thx
Активность: 0.150
Статус: Участник
Packer Reseacher

Создано: 03 сентября 2008 12:58
· Личное сообщение · #11

daFix
Бинарник можешь приаттачить ?

-----
My love is very cool girl.





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

Создано: 03 сентября 2008 18:55 · Поправил: =TS=
· Личное сообщение · #12

daFix
автор жжет

Как ты хочешь, чтобы тебе ответили, если ты даешь листинги без адресов, а также данных на которые они ссылаются? Или атачь бинарник / дамп или дай нормальный листинг

-----
DREAMS CALL US




Ранг: 271.5 (наставник), 12thx
Активность: 0.150
Статус: Участник
Packer Reseacher

Создано: 03 сентября 2008 19:07
· Личное сообщение · #13

=TS=Не гони на человека, он лишний раз кряклабовцев тренирует. Еще чуть-чуть и мы телепатией будем владеть! А в наше непростое время - это самый очень актуальный навык! ;)

-----
My love is very cool girl.





Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 03 сентября 2008 23:21
· Личное сообщение · #14

theCollision
Зачёт!))
Вот и сам бинарник...
rapidshare.com/files/142394209/Unpack.rar.html
Таблицу импорта смотрел на том что первым попало под руки. Это был главный EXE армы.

-----
Research For Food



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


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