Есть зашифрованная dll. надо её скопировать в память, там дешифровать и подключить к программе... Копировать на диск дешифрованный вариант нельзя.
Вопрос: Как её отразить в память, чтоб обращаться к ней как к файлу?
И что передавать функции LoadLibrary(), или имени будет достаточно, раз библиотека в памяти?
Re: Работа с dll в оперативной памяти
От:
Аноним
Дата:
03.11.06 11:22
Оценка:
Здравствуйте, Smoke_Jaguar, Вы писали:
S_J>Есть зашифрованная dll. надо её скопировать в память, там дешифровать и подключить к программе... Копировать на диск дешифрованный вариант нельзя.
S_J>Вопрос: Как её отразить в память, чтоб обращаться к ней как к файлу? S_J>И что передавать функции LoadLibrary(), или имени будет достаточно, раз библиотека в памяти?
Поищи по форуму, уже было.
Помоему сделать это таки возможно, но сложно.
Здравствуйте, Smoke_Jaguar, Вы писали:
S_J>Есть зашифрованная dll. надо её скопировать в память, там дешифровать и подключить к программе... Копировать на диск дешифрованный вариант нельзя.
S_J>Вопрос: Как её отразить в память, чтоб обращаться к ней как к файлу? S_J>И что передавать функции LoadLibrary(), или имени будет достаточно, раз библиотека в памяти?
Здравствуйте, Smoke_Jaguar, Вы писали:
S_J>Есть зашифрованная dll. надо её скопировать в память, там дешифровать и подключить к программе... Копировать на диск дешифрованный вариант нельзя.
S_J>Вопрос: Как её отразить в память, чтоб обращаться к ней как к файлу? S_J>И что передавать функции LoadLibrary(), или имени будет достаточно, раз библиотека в памяти?
Здравствуйте, Smoke_Jaguar, Вы писали:
S_J>Есть зашифрованная dll. надо её скопировать в память, там дешифровать и подключить к программе... Копировать на диск дешифрованный вариант нельзя.
А протекторы не подходят (Armadillo, AsProtect etc)? Они на лету могут дешифровать секции файла. И не надо лисапеда.
S_J>Вопрос: Как её отразить в память, чтоб обращаться к ней как к файлу? S_J>И что передавать функции LoadLibrary(), или имени будет достаточно, раз библиотека в памяти?
LoadLibraryEx с флагом DONT_RESOLVE_DLL_REFERENCES и LOAD_LIBRARY_AS_DATAFILE не спасет отца русской демократии?
Здравствуйте, Какая разница, Вы писали:
КР>Здравствуйте, Smoke_Jaguar, Вы писали:
S_J>>Есть зашифрованная dll. надо её скопировать в память, там дешифровать и подключить к программе... Копировать на диск дешифрованный вариант нельзя.
S_J>>Вопрос: Как её отразить в память, чтоб обращаться к ней как к файлу? S_J>>И что передавать функции LoadLibrary(), или имени будет достаточно, раз библиотека в памяти?
КР>Но там глюки и автор текста не отзывается КР>Если сам займешся и исправишь то весь форум тебе будет благодарен
Автор прекрасно отзывается... Возможно его просто зае$%ли мессаги а-ля топикстартер.
kalsarikännit
Re[2]: Работа с dll в оперативной памяти
От:
Аноним
Дата:
05.11.06 04:07
Оценка:
Здравствуйте, trophim, Вы писали:
S_J>>Вопрос: Как её отразить в память, чтоб обращаться к ней как к файлу? S_J>>И что передавать функции LoadLibrary(), или имени будет достаточно, раз библиотека в памяти?
T>LoadLibraryEx с флагом DONT_RESOLVE_DLL_REFERENCES и LOAD_LIBRARY_AS_DATAFILE не спасет отца русской демократии?
Если бы всё было так просто.
LOAD_LIBRARY_AS_DATAFILE
Use this flag when you want to load a DLL only to extract messages or resources from it.
S_J>Есть зашифрованная dll. надо её скопировать в память, там дешифровать и подключить к программе... Копировать на диск дешифрованный вариант нельзя.
а зашифрован весь файл, или только код?
если только код, то проблем загрузить, затем получить указатель на функцию и расшифровать в памяти — нет особых проблем
Здравствуйте, NightBlade, Вы писали:
S_J>>Есть зашифрованная dll. надо её скопировать в память, там дешифровать и подключить к программе... Копировать на диск дешифрованный вариант нельзя.
NB>а зашифрован весь файл, или только код? NB>если только код, то проблем загрузить, затем получить указатель на функцию и расшифровать в памяти — нет особых проблем
Пожалуйста, можно поподробней.
Тоесть сначала подключаем частично зашифрованную библиотеку...
Есть указатель на начало функции и прямо подряд в памяти с этого места дешифровывать? А конец как определить?
Когда файл на диске, как его зашифровать чтобы, потом дешифровать можно было?
S_J>>>Есть зашифрованная dll. надо её скопировать в память, там дешифровать и подключить к программе... Копировать на диск дешифрованный вариант нельзя.
NB>>а зашифрован весь файл, или только код? NB>>если только код, то проблем загрузить, затем получить указатель на функцию и расшифровать в памяти — нет особых проблем
S_J>Пожалуйста, можно поподробней.
S_J>Тоесть сначала подключаем частично зашифрованную библиотеку...
S_J>Есть указатель на начало функции и прямо подряд в памяти с этого места дешифровывать? А конец как определить?
S_J>Когда файл на диске, как его зашифровать чтобы, потом дешифровать можно было?
судя по этим вопросам, ты лезешь в дебри (персональные)
как работать с кодом в памяти есть здесь
ключ — функции WriteProcessMemory и ReadProcessMemory. может понадобится VirtualProtect и еще одна хорошая статья
"конец определить" можно по указателю на следующую функцию, например (надо очень четко знать, какая функция будет следующей. для скомпилированнной DLL это можно посмотреть через Dependency Walker, входящий в состав SDK, а можно самому проанализировать файл, что лучше)
вопрос про шифрование/дешифрование бесмысслен вне рамок контекста
какая вообще задача стоит? защита кода от дезассемблирования? защита программы от копирования? это задачи непростые даже для высококвалифицированного специалиста
самый простой способ — зашифровать через XOR, но такая "шифровка" взламывается вручную за пару минут
NB>>вопрос про шифрование/дешифрование бесмысслен вне рамок контекста
S_J>Имелся ввиду способ определения секций которые надо шифровать.
блин...
определить какой кусок файла (кода) нужно шифровавть очень просто. формат exe-файла очень подробно документирован
главный вопрос в том, КАК шифровать и где хранить ключ для дешифровки
Здравствуйте, NightBlade, Вы писали:
NB>главный вопрос в том, КАК шифровать и где хранить ключ для дешифровки
Защита нужна только чтоб лишние люди не могли быстро получить доступ к приложению.
Например, алгоритм RC4 и ключ на внешнем носителе? Чем плохо?
Re: Работа с dll в оперативной памяти
От:
Аноним
Дата:
10.11.06 14:26
Оценка:
Здравствуйте, Smoke_Jaguar, Вы писали:
S_J>Есть зашифрованная dll. надо её скопировать в память, там дешифровать и подключить к программе... Копировать на диск дешифрованный вариант нельзя.
S_J>Вопрос: Как её отразить в память, чтоб обращаться к ней как к файлу? S_J>И что передавать функции LoadLibrary(), или имени будет достаточно, раз библиотека в памяти?
Это вам поможет... что касательно длл все тоже самое только вам придется самому парсить таблицу Експорта длл. что вообщем-то совсем не сложно. Находим смещение нужной функции из таблицы и вызываем ее..
Здравствуйте, Smoke_Jaguar, Вы писали:
S_J>Здравствуйте, NightBlade, Вы писали:
NB>>главный вопрос в том, КАК шифровать и где хранить ключ для дешифровки
S_J>Защита нужна только чтоб лишние люди не могли быстро получить доступ к приложению.
S_J>Например, алгоритм RC4 и ключ на внешнем носителе? Чем плохо?
что значит "лишние люди"?
и что в твоем понятии "быстро"?
если ты будешь давать "лишнему человеку" ключ, то получить доступ к твоему коду можно будет очень быстро