Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

записать свою функцию в стороннюю 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;
Скачать: CL | DM;

Наверх




Память: 0.6 MB
Время: 0.056 c
7-1078994779
Vemer
2004-03-11 11:46
2004.05.02
Получиние толщины ScrollBar...


1-1081736582
Guest0
2004-04-12 06:23
2004.05.02
Фокус ввода компонента


1-1081663474
cyborg
2004-04-11 10:04
2004.05.02
Поиск подстроки не чувствительный к регистру букв


1-1081958058
DarkSet
2004-04-14 19:54
2004.05.02
Защита файлов от доступа


3-1081144448
dik
2004-04-05 09:54
2004.05.02
InterBase