Всем привет! Хочу реализовать такую идею : в файле DLL я шифрую секции. Т.е. читаю PE загловок, вычисляю смещения секций и переписываю файл уже с зашифрованными секциями В основоной программе, после за грузки ДЛЛ (LoadLibrary) я нахожу эти секции и расшифровываю их в памяти. Проблема - найти адреса загрузки секций. Как ? Заранее спасибо. И еще вопросик : есть ли недостатки в таком методе шифрования ? Загрузится ли библ-а с зашифрованными секциями ? Мне кажется что да, но не уверен. Заранее спасибо.
ImageBase бинарника + VirtualAddress нужной секции а зачем шифровать каждую в отдельности? почему не все сразу? (обычно ведь секции в памяти располагаются последовательно одна за другой...)
Я только начал изучать вопрос, и для меня стало сюрпризом, что адрес загрузки ДЛЛ порописан в самой ДЛЛ. Но как бы там ни было, можно ли быть уверенным что ДЛЛ будет загружена именно по этому адресу ??? Я смотрел ДЛЛ через PE Module Explorer. Там это поле описано как "Preffered load address", т.е. совсем не обязятельное Как быть ?
gershkovich The RemoveRelocations function lets the user strip relocation information from an executable image. However, it is not recommended that you do this because the image will not load if its preferred address is occupied. This function exists so an image can be rebased after building and then have the relocations stripped so it will always load at that preferred load address.
crypto Ссылку можно ? Прокатит ли такой вариант ? : Код (Text): section '.code' code readable executable firstByte db 0 proc DllEntryPoint hinstDLL, fdwReason, lpvReserved ....... ...... ; ------------------------------- section '.edata' export data readable export 'entry.dll',\ firstByte, 'firstByte' GetProcAddress вернет адрес начала сегмента ? Я щас как раз пишу программку чтоп проверить гипотезу, но может кто-то похожее делал уже ? Стоит продолжать в этом направлении ?
из себя вызывай GetModuleHandle,0 получишь смещение досовкого заголовка, от туда уже рабирай pe header->optional header.. там и до секций доберёшся
Если ты зашифровал ВСЕ секции ДЛЛ, то она у тебя не загрузится. 1. LoadLibrary оставит в памяти библиотеку только тогда, когда <DLL_ENTRY_POINT> вернет 1. 2. Библиотека НЕ загрузится когда нет валидной секции ".reloc" (много раз сам попадался на этом, когда в фасме забывал приклеить эту секцию к либе)