Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Опкоды, Формулы, Клиент > Копаем клиент

Важная информация

Копаем клиент Копаем клиент

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 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
Deamon
WowCore Dev
 
Регистрация: 11.03.2010
Сообщений: 112
Сказал(а) спасибо: 10
Поблагодарили 51 раз(а) в 25 сообщениях
Deamon Скоро придёт к известности
По умолчанию

Ну вирусописатели начала 2000-х описывали разные техники. В том числе и такие, где не нужно было импортировать вообще ни одну функцию. Т.е. секция импорта просто отсутствовала как таковая. В таком случае использовался детект версии Виндовс и в зависимости от версии брался соответствующий адрес в памяти для GetProcAddress в kernel32.dll.

Microsoft в прежних версиях(а возможно и в текущих) Виндовс специально делала адреса по умолчанию для системных dll библиотек таким образом, чтобы те не пересекались. За счет этого dllки подружались в память быстрее, т.к. не было необходимости делать для них relocate.

Поэтому kernel32.dll грузился по одному и тому же адресу и при желании можно было обойтись вообще без таблицы импорта.

Но это так, для общего развития, вряд ли бы Близы стали использовать этот трюк.
Deamon вне форума   Ответить с цитированием
Старый 08.12.2011, 08:30   #3
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

спасибо за ответ,
как ни странно разные програмки показывают наличие секции импорта. Однако мне удалось найти информацию только относительно секции .idata, которой у wow.exe нет.
Предположительно сейчас используется какой-то другой подход, возможно импорт находится в секции .rdata. У кого-нибудь есть информация или ссылки по поводу формата этой секции?
Йоха вне форума   Ответить с цитированием
Старый 08.12.2011, 16:53   #4
Deamon
WowCore Dev
 
Регистрация: 11.03.2010
Сообщений: 112
Сказал(а) спасибо: 10
Поблагодарили 51 раз(а) в 25 сообщениях
Deamon Скоро придёт к известности
По умолчанию

Господин 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
Получается, что информация о смещении для секции импорта берется из таблиц Data Directories, а не из таблицы секций. Что там еще может находиться можно прочесть здесь: http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Deamon вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Йоха (09.12.2011)
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по функции 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


Текущее время: 05:27. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot