Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Вниз

Загрузка 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.043 c
1-1098673588
Wood
2004-10-25 07:06
2004.11.07
Программное переключение


1-1098752183
Stivi
2004-10-26 04:56
2004.11.07
Columns в TListView


14-1098218510
хм
2004-10-20 00:41
2004.11.07
во как


6-1093321220
OlegM
2004-08-24 08:20
2004.11.07
Получение заголовков и количества писем с ящика


3-1095682111
Галинка
2004-09-20 16:08
2004.11.07
Как узнать версию MS Access





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский