Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Вниз

записать свою функцию в стороннюю DLL...   Найти похожие ветки 

 
mr. Faga   (2004-04-08 15:39) [0]

подскажите как сделать сабж, плииз, или хотя бы что нужно курить для того чтоб понять как это сделать!


 
Алхимик ©   (2004-04-08 15:42) [1]

Нужно бросить курить, чтобы понять, что этого сделать нельзя.


 
Digitman ©   (2004-04-08 15:42) [2]

курить нужно ту самую траву .. а то не знаешь .. не маленький ужо ..


 
Гаврила   (2004-04-08 15:42) [3]

в смысле что сторонняя DLL без сорса ?


 
Kerk ©   (2004-04-08 15:45) [4]

сделать это можно, только геморрой


 
mr. Faga   (2004-04-08 15:46) [5]

Господа Алхимик © и Digitman ©, ну Вы очень оргинальны... а по теме ответить не судьба, я прав?


 
Алхимик ©   (2004-04-08 15:46) [6]

Нужно бросить курить, чтобы понять, что этого сделать нельзя.


 
Digitman ©   (2004-04-08 15:47) [7]

т.е. покурил и заполучи, фашист, геморрой


 
Verg ©   (2004-04-08 15:51) [8]


> Digitman ©   (08.04.04 15:47) [7]
> т.е. покурил и заполучи, фашист, геморрой


Это же каким местом фашист должен курить, чтобы заработать геморрой? :)))


 
mr. Faga   (2004-04-08 15:51) [9]

мда, а я думал подскажут что-нить... :(
а в ответ только идиотские коменты :(


 
Digitman ©   (2004-04-08 15:53) [10]

а как ты хотел ? на идиотский вопрос  - идиотские "коменты" ..


 
Гаврила   (2004-04-08 15:55) [11]

>>Verg ©   (08.04.04 15:51) [8]

LOL
да уж, фашистам не позавидуешь :-)


 
Тимохов ©   (2004-04-08 15:55) [12]

теоритически можно.

но теоритически, как известно, можно все...


 
mr. Faga   (2004-04-08 15:56) [13]

а что идиотского в вопросе?
ну не знаю я как это делается, хотя такое сделать имхо можно...
ведь делают же подобные вещи всякие упавщики типа AsPack или я не прав?


 
Digitman ©   (2004-04-08 15:57) [14]

угу .. можно все .. даже "геморроем" траву курить


 
Тимохов ©   (2004-04-08 15:58) [15]

Сергей, но теоретически то можно.


 
serge35   (2004-04-08 15:58) [16]

Кури Беломор - от него армат нежнее...


 
Digitman ©   (2004-04-08 16:00) [17]


> всякие упавщики


они-то , упавщики. может, и делают .. а вот тебе "в ломы" объяснить, что есть "записать свою функцию в стороннюю DLL" .. зато про "курево" ты шустро намекнул ..


 
panov ©   (2004-04-08 16:02) [18]

Пишешь свою DLL, с идентичными названиями функций и параметров, добавляешь нужную функцию, вместо чужой DLL подклыдываешь свою. При вызове "не твоей" функции выполняешь функцию из чужой dll.


 
Digitman ©   (2004-04-08 16:04) [19]


> Тимохов ©   (08.04.04 15:58) [15]


теоретически можно и на голову себе встать своими же пятками

> mr. Faga  


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


 
mr. Faga   (2004-04-08 16:04) [20]

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


 
Digitman ©   (2004-04-08 16:05) [21]


> мне ее хочется зашифровать


нахрена ?


 
Матлабист   (2004-04-08 16:10) [22]

1. Изучаешь сегменты DLL. Прикидываешь, куда вставить свои.
2. Делаешь свою DLL с однй функцией. Указываешь нужным образом ImageBase
3. Подкидываешь в исходную DLL новую секцию кода (секцию данных, если необходимо)
4. Смотришь в твоей relocation table какие адреса там есть и аккуратно подвидываешь их в искомую DLL.
5. Если твой код требует инициализации, медитируешь над объеинением PROCESS_ATTACH, THREAD_ATTACH.
6. Пересобираешь заново все секции DLL.


 
serge35   (2004-04-08 16:25) [23]

7.Досташь пачку сигарет и куришь.


 
Digitman ©   (2004-04-08 16:26) [24]


> Матлабист


ты видать заболел

при "как"-постановке вопроса тебе придется читать цикл лекций по граду контрвопросов, а-ля "что такое" :

- сегменты DLL
- ImageBase
- секция кода, секция данных
- relocation table
- PROCESS_ATTACH, THREAD_ATTACH
- и т.д. и т.п.


 
Матлабист   (2004-04-08 16:30) [25]

> Digitman ©   (08.04.04 16:26) [24]

Если у человека есть интерес, почему бы и нет. А нету интереса --- и вопросов не будет.


 
mr. Faga   (2004-04-08 16:41) [26]


> Digitman ©  

Про сегменты я в курсе я в курсе, про relocation table тоже :))
а вот остальное к сожалению даже не представляю :(


> Матлабист  

а по подробней можно, чем смотреть, чего читать по теме и тд :)
Интерес есть :)))


 
y-soft ©   (2004-04-08 17:59) [27]

IMHO самый дельный ответ - panov ©   (08.04.04 16:02) [18]

Просто и действенно, можно не только добавить новые функции, но при желании и изменить поведение существующих...

Остальное - их серии "как делать хирургические операции с помощью топора" - теоретически можно, но практически бесполезно...


 
Mim1   (2004-04-08 21:25) [28]

Зашифровть чтобы враг не добрался? А если расшифровщик лежит рядом что помешает врагу им воспользоваться? :)


 
Saturn_   (2004-04-08 22:20) [29]

2 mr. Faga
Те че врема девать некуда? Фигней заниматся?

2 Mim1   (08.04.04 21:25) [28]
расшифровщик зашифрован чтоб враг немог его розшифровать и потом им воспоьзоватся для расшифровки :))


 
mr. Faga   (2004-04-09 15:33) [30]

2Saturn_
Время есть куда девать, но диплом-то надо сделать...
У меня тема диплома -- "Защита динамических библиотек от несанкционированного распространения", вот теперь и ищу инфу как это сделать :)


 
Рамиль ©   (2004-04-09 16:17) [31]


> Защита динамических библиотек от несанкционированного распространения

Слушай, а зачем тебе чужие dll защищать?!.


 
mr. Faga   (2004-04-09 16:25) [32]

ну задача так прям не стояла, те не было конкретных указаний на чужие, так что можно и свои, вот тока как, я что-то не представляю :(


 
Матлабист   (2004-04-09 16:28) [33]

Основной ресурс это
http://www.osdever.net/docs/PECOFF.pdf?the_id=49

Сегменты, кстати, не DOS-овые (в смысле реального режима). Итак, в кратце. Приложение Windows выполняется в плоском 4 Гбайтном адресном пространстве. Каждый в своем. Вопрос в том, что не под всеми 4 Гб расположена физическая память. Если вы промазали и попали в пустое место, возникает Access violation. При загруке DLL/EXE в этом пространстве резервируются и загружаются секции, описанные в загружаемом файле. Каждая секция имеет начальный адрес, длину, флаги, а также смещение и длину в файле. Первый этап загрузки DLL/EXE состоит в том, что 1) для каждой секции резервируется, выделяется и заполняется нулями виртуальная память (в 4 Гб пространстве) и 2) копируются данные из файла. Некоторые секции имеют заданный заранее формат (например, таблицы экспорта/импорта). Поскольку DLL загружается динамически, может случиться так, что те адреса, на которые "планировалось" загрузить DLL, окажутся уже занятыми. В этом случае используется таблица релокации, которая содержит список всех адресов, которые нужно настроить (т. е. по сути добавить разницу между "планируемым" и "полученым адресом"). Сегменты в EXE-файле, обычно, неперемещаемы (по той причине, что при загрузке EXE-файла предполагается, что вся память пуста).
Еще в образе EXE/DLL-файла есть указатель на точку входа --- адрес, с которого начинается выполнение EXE-файла. Для DLL єто указатель на специальную функцию DllMain, которая вызывается для того, чтобы DLL могла проинициализировать/деинициализируется свои данные. Этой функции передается один из параметров   DLL_PROCESS_ATTACH, DLL_THREAD_ATTACH, DLL_THREAD_DETACH,  DLL_PROCESS_DETACH всякий раз, когда либо процесс загружает DLL, либо когда новый поток обращается к DLL. Более подробно уже посмотри у Рихтера, либо в MDSN.

Итак, навскидку... чтобы добавить функцию в DLL, нужно написать программу, которая разберет секции этой DLL, добавить новую секцию/секции, перезапишет ее.


 
Digitman ©   (2004-04-09 16:52) [34]


> У меня тема диплома -- "Защита динамических библиотек от
> несанкционированного распространения", вот теперь и ищу
> инфу как это сделать :)


ну считай, что облажался ты крепко, выбрав тему именно в такой формулировке)

ибо пока распространение происходит в рамках одной и той же ОС-среды/платформы, защититься от несанкционированного распространения попросту невозможно ...

а вот защита (в той или иной степени) от несанкционированного использования (!!) распространенного тем или иным образом в тех или иных целях некоего ПО - это задача вполне реальная на практике

и для реализации подобной задачи , imho, вовсе не обязательно сразу бросаться менять образ и структуру РЕ-файла ..


 
Матлабист   (2004-04-09 16:58) [35]

Да, кстати, шифрование и ижо с ним могут сказаться на производительности ;) Если пошифроватьсегмент кода, то теряется смысл в самой DLL --- другой процесс не сможет использовать в памяти копию этой DLL-ки.


 
mr. Faga   (2004-04-10 10:47) [36]


> ну считай, что облажался ты крепко, выбрав тему именно в
> такой формулировке)


Это я уже понял :(((


> а вот защита (в той или иной степени) от несанкционированного
> использования (!!) распространенного тем или иным образом
> в тех или иных целях некоего ПО - это задача вполне реальная
> на практике


Подскажи как сделать или что почитать по теме :)))


 
Digitman ©   (2004-04-10 11:20) [37]


> mr. Faga


одна из неплохих идей предложена в [32]

другая наипростейшая (но далеко не наилучшая) по реализации идея - использование системы защиты инф-ции с пом. электр.ключей HASP, HARDLOCK, NOVEX


 
mr. Faga   (2004-04-10 11:35) [38]


> Digitman ©  

[32] это куда читать?
В аське можешь объяснить подробнее?


 
Digitman ©   (2004-04-10 12:48) [39]

пардон, не в [32], а в [35]


 
mr. Faga   (2004-04-10 12:56) [40]


> Digitman ©  


это понятно, осталось тока понять с чего начинать :)))
можешь подсказать как зашифрованный кусок разворачивать и передавать ему управление?


 
Digitman ©   (2004-04-10 13:26) [41]


> mr. Faga


ты все-таки определись для начала, свою ДЛЛ ты намерен защищать или чужую ... от этого многое зависит ...

кр.того, определись со способами загрузки ДЛЛ : статическая, динамическая, или и то и другое допустимо ... если динамическая, то возможен ли вызов твоим (или не только твоим ?) хост приложением LoadLibraryEx вместо LoadLibrary ..


 
mr. Faga   (2004-04-10 13:35) [42]


> Digitman ©  


На сколько я понял свою ДЛЛ защищать проще, я прав?
Значит на этом пока и остановлюсь :)
Загрузка будет статическая.
Вот насчет последнего не знаю, скорее всего да, хотя не знаю нужно ли это.


 
Digitman ©   (2004-04-10 13:41) [43]

вообще говоря, при такой размытой постановке задачи определить конкретные пути ее решения весьма сложно - никак не определено конечное число вариантов использования защищаемого ПО

если же ограничиться защитой только своих библиотечных PE-модулей, то выкрутасы с шифрованием вообще могут и не понадобиться - твоя ДЛЛ в ходе инициализации просто запрашивает у затребовавшего ее загрузку хост-процесса некую конфид.инф-цию, и если таковая отсутствует, то модуль попросту не грузится системой (если при иниц-ции модуля он возвратит системе флаг DLL_INIT_FAILURE)


 
Digitman ©   (2004-04-10 13:55) [44]

library MyDLL;
...

var
 DefaultDLLProc: Pointer;
...

procedure DLLProcHandler(Reason: Integer);
begin
 case Reason of
   DLL_PROCESS_ATTACH:
     if not некое_условие then
       Halt(1);
 end;
end;

begin
 DefaultDLLProc := DLLProc;
 DLLProc:= @DLLProcHandler;
 DLLProcHandler(DLL_PROCESS_ATTACH);
end.

вот и вся защита)


 
Digitman ©   (2004-04-10 13:58) [45]

можно и еще проще, если не нужны выкрутасы с Dllmain
library MyDLL;
..
begin
 if not некое_условие then
   Halt(1);
end.


 
mr. Faga   (2004-04-10 14:02) [46]


> Digitman ©  
> вот и вся защита)


Спасибо!
Хотя хотелось бы понять как сделать вариант с шифровкой/расшифровкой, а то этого, как ты понимаешь, для диплома маловато будет :)))


 
Digitman ©   (2004-04-10 14:09) [47]


> а то этого, как ты понимаешь, для диплома маловато будет


неужели ?) ... ну эт смотря что подразумевать под некое_условие)

к тому же нашута что-то шифровать/дешифровать, если задача и так решена ? библиотека при несоблюдении "некоего условия" попросту не будет загружена, а значит и использована быть не может ..

а это самое "некое условие" можно трактовать по-разному, в зависимости от четкости определения "несанкционированности использования"


 
Digitman ©   (2004-04-10 14:18) [48]

если же свет клином сошелся на "что-то шифровать/дешифровать", то могу предложить вариант c шифрованием/дешифрованием ресурсных данных DLL о привязке к конкретной машине ... после создания Dll некая программулина в составе инсталлятора дозаписывает в ресурсы этой Dll зашифрованную инф-цию о привязках к некоей машине ... при своей инициализации Dll по аналогичному алгоритму получает данные о машине, на которой она в дан.момент инициализируется, берет из ресурса шифрованые данные, расшифровывает их, сравнивает с только что полученными. Условие совпадения сравниваемых данных и  есть некое_условие, при несоблюдении которого ты просто говоришь системе "гуд бай", тут же выполнив Halt(1)

и всех делов !)
а уж под это дело столько воды в дипломе налить можно !
только фантазией твоей ограничено)



Страницы: 1 2 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.58 MB
Время: 0.033 c
14-1081675876
rams
2004-04-11 13:31
2004.05.02
Turbo Pascal


3-1081260725
Alexey
2004-04-06 18:12
2004.05.02
Identity в базе SQLServer


9-1069480497
Агент Смит [8]
2003-11-22 08:54
2004.05.02
Текстура из нескольких бмп. OpenGL


14-1081150358
Странник
2004-04-05 11:32
2004.05.02
Билл Гейтс лишился титула главного богача планеты


1-1081927015
Viktor
2004-04-14 11:16
2004.05.02
exit;





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский