07.12.2011, 09:22 | #1 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Импортируемые функции
У кого-нибудь есть идеи насчет того зачем близы импортируют функции из kernel32 и прочих системных библиотек через GetProcAddress, а не как обычно через секцию exe файла .idata.
И еще один вопрос, в самом экзешнике нет секции .idata, но ида ее показывает. Что-то я не пойму как это получается. Да и в любом случае приложению нужно импортировать как минимум Loadlibrary или GetModuleHandle и GetProcAdreess что бы хоть как-то начать работать. [добавлено] ага, Dependency Walker говорит что в файле используется механизм Delay-load dll. С этим понятно Остался вопрос как все таки импортируются хотя бы минимально необходимые функции Последний раз редактировалось Йоха; 07.12.2011 в 09:38. |
07.12.2011, 15:47 | #2 |
WowCore Dev
Регистрация: 11.03.2010
Сообщений: 112
Сказал(а) спасибо: 10
Поблагодарили 51 раз(а) в 25 сообщениях
|
Ну вирусописатели начала 2000-х описывали разные техники. В том числе и такие, где не нужно было импортировать вообще ни одну функцию. Т.е. секция импорта просто отсутствовала как таковая. В таком случае использовался детект версии Виндовс и в зависимости от версии брался соответствующий адрес в памяти для GetProcAddress в kernel32.dll.
Microsoft в прежних версиях(а возможно и в текущих) Виндовс специально делала адреса по умолчанию для системных dll библиотек таким образом, чтобы те не пересекались. За счет этого dllки подружались в память быстрее, т.к. не было необходимости делать для них relocate. Поэтому kernel32.dll грузился по одному и тому же адресу и при желании можно было обойтись вообще без таблицы импорта. Но это так, для общего развития, вряд ли бы Близы стали использовать этот трюк. |
08.12.2011, 08:30 | #3 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
спасибо за ответ,
как ни странно разные програмки показывают наличие секции импорта. Однако мне удалось найти информацию только относительно секции .idata, которой у wow.exe нет. Предположительно сейчас используется какой-то другой подход, возможно импорт находится в секции .rdata. У кого-нибудь есть информация или ссылки по поводу формата этой секции? |
08.12.2011, 16:53 | #4 |
WowCore Dev
Регистрация: 11.03.2010
Сообщений: 112
Сказал(а) спасибо: 10
Поблагодарили 51 раз(а) в 25 сообщениях
|
Господин Total Commander говорит, что
Код:
DATA DIRECTORY (Virtual Address and Size) Export Directory rva: 00896A40h size: 00000069h Import Directory rva: 00893C64h size: 00000168h Resource Directory rva: 00C15000h size: 0004B590h Exception table rva: 00000000h size: 00000000h Security table rva: 009FAA00h size: 00001450h Base Relocation table rva: 00C61000h size: 000661B8h Debug Directory rva: 007880D0h size: 0000001Ch Architecture Specific Data rva: 00000000h size: 00000000h Global Pointer rva: 00000000h size: 00000000h TLS Directory rva: 0088EF20h size: 00000018h Load config table rva: 00000000h size: 00000000h Bound Import table rva: 00000000h size: 00000000h Import Address Table rva: 00786000h size: 00000884h Delay import descriptor rva: 00000000h size: 00000000h COM descriptor rva: 00000000h size: 00000000h unused rva: 00000000h size: 00000000h |
Пользователь сказал cпасибо: | Йоха (09.12.2011) |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрос по функции php | lovepsone | Языки программирования | 38 | 07.12.2011 22:09 |
[11691][patch] Опечатка в функции выбора difficulty спелла | PSZ | Принятые патчи | 1 | 28.06.2011 11:26 |
Overhead в базовой функции SendPacket() | xex | Отвергнутые патчи | 19 | 26.03.2011 12:47 |