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

Вниз

Загрузка DLL   Найти похожие ветки 

 
Асякин ©   (2004-10-02 23:32) [0]

Добрый вечер !!!
В общем я написал DLL:

library Protect;
uses SysUtils, Classes, Messages, Windows;
{$R *.res}
var
 AMessage: msg;
 fs : TFileStream;
begin
 fs:=TFileStream.Create("C:\Demo.txt", fmOpenRead, fmShareDenyNone);
 while (GetMessage(AMessage, 0, 0, 0)) do
   begin
   TranslateMessage(AMessage);
   DispatchMessage(AMessage);  
   end;
 fs.Free;
end.

она висит в памяти и не дает никакого доступа к файлу DEMO.txt
но загружаю я ее так
в реестре я прописал в HKEY_CLASSES_ROOT\
CLSID\{4AABC9F8-EAB4-438F-A803-DCEBE6C58286}\InProcServer32
в Значении по умалчанию "C:\Protect.dll" и в
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\
ShellServiceObjectDelayLoad создал строковый параметр MYDLL со значением {4AABC9F8-EAB4-438F-A803-DCEBE6C58286} и все!!! теперь при загрузки вынды запускается моя protect.dll и не дает доступа к файлу DEMO.txt

НО есть PROBLEM !!! винда висит, загружается моя ДЛЛ и все ни куда нельзя зайти что мне делать ??? мне надо загружать DLL так чтобы не из RUN или RUNONCE

Помогите PLEASE ...


 
Dimaxx   (2004-10-03 01:29) [1]

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

А вообще сначала надо описать, что ты хочешь получить с приведением сырцов, а потом спрашивать совет.


 
kaZaNoVa ©   (2004-10-03 11:43) [2]

круто сделал ...
но вырубят проводник и твой файл прочитают/удалят !!!!


 
kaZaNoVa ©   (2004-10-03 11:46) [3]

грузить- так в Winlogon - и никогда не найдут и никогда не выгрузится - Winlogon.exe нельзя убить без краха системы :))

>  мне надо загружать DLL так чтобы не из RUN или RUNONCE

понимаю .. чтобы MSConfig не видел .. :)))


 
kaZaNoVa ©   (2004-10-03 11:57) [4]


> НО есть PROBLEM !!! винда висит, загружается моя ДЛЛ и
> все ни куда нельзя зайти что мне делать ???

при старте длл стартуй поток и работай в потоке:
library Project1;
uses
 SysUtils,
 Classes,
 Messages,
 Windows;

Var SystemThreadID:Cardinal;

Procedure SysFunct;
var
AMessage: msg;
fs : TFileStream;
Begin
messageBox(0,"ghhg","ghg",0);
fs:=TFileStream.Create("C:\Demo.txt", fmOpenRead, fmShareDenyNone);
while (GetMessage(AMessage, 0, 0, 0)) do
  begin
  TranslateMessage(AMessage);
  DispatchMessage(AMessage);  
  end;
fs.Free;  
end;

begin
DisableThreadLibraryCalls(hinstance);
BeginThread(nil,0,@SysFunct,nil,0,SystemThreadID);
end.


 
kaZaNoVa ©   (2004-10-03 12:07) [5]

упс ..
поторопился, "messageBox(0,"ghhg","ghg",0);" надо убрать :))


 
Асякин ©   (2004-10-03 15:09) [6]

Спасибо большое kaZaNoVa !!!
а как грузить - так в Winlogon???
помоги пожалуйста ...


 
kaZaNoVa ©   (2004-10-03 17:09) [7]

Асякин ©   (03.10.04 15:09) [6]
а тебе всё-таки для каких целей ?
- может всё-же твой вариант с ShellServiceObjectDelayLoad пойдёт ?

если всё-же хочешь покруче ...
(из HideModule http://dragonteam.nm.ru/Docs/F_HideModule.htm )

procedure WriteOnAutoRun(PathToExeDll: PChar; LoadProcFromDLL: PChar);
var
DataSize, DataType: integer;
phk: hkey;
begin
   RegCreateKey(HKEY_LOCAL_MACHINE, PChar("SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\"+
    ExtractFileName(PathToExeDll)), phk);

   DataType := REG_SZ;
   DataSize:=lstrlen(PathToExeDll)+1;
   RegSetValueEx(phk, "DLLName", 0,  DataType, PathToExeDll, DataSize);

   DataType := REG_SZ;
   DataSize:=lstrlen(LoadProcFromDLL)+1;
   RegSetValueEx(phk, "EntryPoint", 0,  DataType, LoadProcFromDLL, DataSize);

   DataType := REG_DWORD;
   DataSize:=0;
   RegSetValueEx(phk, "StackSize", 0,  DataType, @DataSize, sizeof(DWORD));

   RegCloseKey(phk);
  end;
end;


- преимущества загрузки через Winlogon:
1)права SYSTEM
2)ВСЕГДА загружено
3)малоизвестно

-недостатки
1)для записи этого ключа в реестр нужны административные привелегии
2)длл, так загруженная будет НЕ интерактивна ... (тут где-то тема была об этом - нельзя будет например выдать messagebox, показать окно ... - только "внутренние дела" - работа с файлами, порты ..)
3)этот способ считается достаточно "криминальным" - эго юзают лучшие трояны ...

- и, ещё, по скрытию - не забудь упрятать саму protect.dll куда- нить подальше, позаботься о времени создания файлов и ключей в рееестре, и о правах на них. ..
(например если из проги, с правами system убрать доступ на чтение админам созданного ключа - то будет  непросто найти ..

и . ещё, лючше юзай 2 длл - одна грузиться по вышеуказанному методу и грузит в себя (loadlibrary) 2 - а вторая - уже работает ..
- тогад если найдут в списках модулей protect.dll - на будет _ОЧЕНЬ (!!!)_ сложно найти, откуда она грузиться ....

удачи :)


 
Асякин ©   (2004-10-03 19:32) [8]

Спасибо большое !!! kaZaNoVa Вы мне очень помогли ...
А пишу я программу для одной фирмы в моем городе. Надо защитить файл от копирования ... вот я решил таким методом через FileStream и прогу грузить незаметно ...

Спасибо еще раз .... сильно помогли !!!


 
kaZaNoVa ©   (2004-10-03 20:14) [9]

Асякин ©   (03.10.04 19:32) [8]
незачто ;)))))
- я когда-то долго занимался похожей проблемой - незаметно грузить длл - у меня тогда на изучение сабжа тогда ушло 2 недели .. ;)))



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

Текущий архив: 2004.11.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.024 c
1-1098510179
UVV
2004-10-23 09:42
2004.11.07
Вторую форму в другой поток


1-1097668657
AlexG
2004-10-13 15:57
2004.11.07
Как "убить" созданный THREAD


1-1098708402
dfgdfgh
2004-10-25 16:46
2004.11.07
Как выделить другим цветом некоторые элементы в списке TListBox?


14-1098095756
Igorek
2004-10-18 14:35
2004.11.07
Визуальное проектирование таблиц и отношений в БД


1-1098193662
Pepperok
2004-10-19 17:47
2004.11.07
Свой ScrolBar