![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Загрузка 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 надо предусмотреть реакцию на какое-либо сообщение, по команде которого будет производится блокировка/разблокировка файла.
А вообще сначала надо описать, что ты хочешь получить с приведением сырцов, а потом спрашивать совет.