Форум: "Потрепаться";
Текущий архив: 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.026 c