Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Загрузка DLL [D7, WinXP]


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

Добрый вечер !!!
В общем я написал 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 ...


kaZaNoVa   (2004-10-03 20:14:00) [1]

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


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

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

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


kaZaNoVa   (2004-10-03 17:09:00) [3]

Асякин ©   (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 15:09:00) [4]

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


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

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


kaZaNoVa   (2004-10-03 11:57:00) [6]


> НО есть 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 11:46:00) [7]

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

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

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


kaZaNoVa   (2004-10-03 11:43:00) [8]

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


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

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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо