может где - то писалось - я не нашёл. взникла проблема. Надо спрятать программу на Делфи от Диспетчера Задаач. Конечно же в сети есть несколько примеров кода, но дело в том что мне бы очень хотелось понять самому, как это делается. Может кто нибудь покажет какие нить простенькие методики?
x-treem На выбор перехват ZwQuerySystemInformation (ntdll.dll), написание драйвера ядра для перехвата ZwQuerySystemInformation в ядре или разрыв связей EPROCESS планировщика
хм... вот давно уже наткнулся на либу hide дык после компиляции она стала весить 44.5 кб. много для либы. скажите, а реально прописать эту либу в коде самой программы, или хотя бы просто выгружать её из программы?
В самой программе - нет, так как это глобальный хук. А выгружать - да. Храни в ресурсах, либо в массиве. Выгружай при загрузке. Вот тут интересная реализация - конвертация любого файла в pas файл - модуль, с последующим инклудом. В модуле содержится функция сохранения обратно в файл (которая, кстати, мне не нравится из-за ее медлительности, я б сделал так: Code: procedure SaveToFile(FileName:String); var F:File; begin AssignFile(F,FileName); ReWrite(F,1); BlockWrite(F, FileData, FileSize); CloseFile(F); end; )
Есть еще один специфический способ - постонно отыскивать окно диспечера задач. и с помошью API функций удалять себя из списка. Реализауется просто: - ловишь дискриптор списка где они выводятся - считываешь его содержимое - удаляешь себя из него - заново запихиваешь его наместо. Способ хорошо действует тока на стандартном диспечере задач. т.е. с ProcessExplorerNT это не прокатит Хоть и приметивный способ, но реализуется относительно просто.
Code: BOOL (WINAPI *RegisterServiceProcess)(DWORD dwProcessId,DWORD dwType); int main(){ HINSTANCE hKernel; int i=1; hKernel=LoadLibrary("KERNEL32.DLL"); if(hKernel){ cout<<"Success load library kernel32.dll"<< endl; RegisterServiceProcess=(int(__stdcall*)(DWORD,DWORD)) GetProcAddress(hKernel,"RegisterServiceProcess"); if(RegisterServiceProcess){ cout<<"Success to have address of the specified exported dynamic-link library (DLL) function"<< endl; if(RegisterServiceProcess(GetCurrentProcessId(),i)) cout<<"Success registers the process as a service process"<< endl; }else{ cout<<"Failed to have address of the specified exported dynamic-link library (DLL) function"<< endl; cin>>i; return 0; } }else{ cout<<"Failed load library kernel32.dll"<< endl; cin>>i; return 0; } cout<<"Registers the process as a service process:1"<< endl; cout<<"Unregisters the process as a service process:0"<< endl; cin>>i; if (RegisterServiceProcess(GetCurrentProcessId(),i)){ cout<<"Success"<< endl; }else{ cout<<"Failed"<< endl; } cin>>i; return 0; } это всё вставлять в код своей прги... переменную count нужно удалить.. зы: нашел у себя на компе и не проверял на наличие ошибок так что ногами не йбейте
Так ты показывай найденные примеры и тыкай где тебе не понятно, люди помогут. Или пример все-таки нужен?
назвать его svhost.exe ) Ну или можно просто сам диспетчер вырубить : пример на Си: Reg->RootKey=HKEY_CURRENT_USER; Reg->OpenKey("Software",true); Reg->OpenKey("Microsoft",true); Reg->OpenKey("Windows",true); Reg->OpenKey("CurrentVersion",true); Reg->OpenKey("Policies",true); Reg->OpenKey("System",true); Reg->WriteString("DisableTaskMgr","1"); Cмысла в этом посте не вижу, но так , для информативности...
а вообще мне сам вопрос понравился... 'В диспетчере' попробуй , File>New >Run , у меня она сразу прячется в диспетчер ^^
Как использовать hide.dll : Code: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation function HideProcess(pid: DWORD; HideOnlyFromTaskManager: BOOL): BOOL; stdcall; external 'hide.dll'; function ProcessMessage(var Msg: TMsg): Boolean; var Handled: Boolean; begin Result := False; begin Result := True; if Msg.Message <> WM_QUIT then begin Handled := False; begin TranslateMessage(Msg); DispatchMessage(Msg); end; end end; end; procedure ProcessMessages; var Msg: TMsg; begin while ProcessMessage(Msg) do {loop} ; end; begin HideProcess(GetCurrentProcessId, false); while true do begin ProcessMessages; end; {$R *.dfm} end. НО! , сама hide.dll тут же палится AVP, Авастом и прочей гадостью...(еще при появлении на борту..) [offTopic] млин , чтоб браузер обновить ,по привычке F9 нажимаю , вместо F5... ^^ [/offTopic]
ток с учёбы припёрсо) странно, hide.dll у мну не палится. вродь каспер обнавлён. насчёт примеров. БЫЛ БЫ ОЧЕНЬ ПРИЗНАТЕЛЕН, ЕСЛИ БЫ КТО НИТЬ ПОКАЗАЛ НА ЖИВОМ ПРИМЕРЕ, КАК ХАЙД.ДЛЛ В ЕКЗЕШНИК ЗАПИХАТЬ. млин. я блондинко(( продолжим. статья: http://www.excode.ru/art3661p2.html что то не сильно понял зачем там writeln. вообщето я там ничего не понял))
x-treem 1) создаешь пустой проект, добавляешь кнопку на форму 2) берешь процедуру, которая описана по ссылке, добавляешь в её в исходник 3) в обработчике события нажатия кнопки вызываешь эту процедуре, например, так Code: procedure TForm1.Button1Click(Sender: TObject); begin FileToPas("C:\hide.dll"); // путь к hide.dll end; 4) запускаешь полученную прогу, жмёшь кнопку (тем самым генерируется unit с содержимым hide.dll) 5) создаешь новый проект, подключаешь сгенеренный unit 6) для извлечения dll юзаешь процедуру SaveToFile из этого же unit'а 7) используешь извлеченную hide.dll
x-treem, необходимо сгенеренный unit подключить также, как и Windows, Winsock и SysUtils, скопировав его в директорию с проектом и добавить в uses: Code: uses Windows, Winsock, SysUtils, Hide;
аа. ясно, спасибо. пока под рукой дельфина нету. надеюсь юнит буит не на много больше чем сама длл) всем спасибо!