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

Вниз

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

 
Xemax   (2002-09-02 15:43) [0]

Как подгрузить к процессу csrss.exe динамическую библиотеку?


 
Aleksey Pavlov ©   (2002-09-02 15:57) [1]

Поставить hook на что-нибудь, что "делает" процесс(ы) загруженный(ые) из csrss.exe. Всё, собственно. В Сети множество примеров внедрения, как на C++ так и на ObjectPascalе.


 
Игорь Шевченко ©   (2002-09-02 16:02) [2]

Ох, не надо к csrss.exe ничего подключать. Оно спокойнее будет...
Это один из критичных процессов и Blue Screen, скорее всего, гарантирован.

Если не секрет, что за нужда подключать что-то к csrss ? Может, обходной способ есть ?


 
paul_shmakov ©   (2002-09-02 16:55) [3]

2 Xemax:
все верно Игорь Шевченко говорит, не надо трогать csrss.exe. выбирайте другой процесс.
вот пример. loader.exe загружает mydll.dll в csrss.exe, а mydll.dll при своей загрузке выводит командную строку csrss.exe и выгружает саму себя.

loader.dpr

program loader;

{$APPTYPE CONSOLE}

uses
Windows, Messages, SysUtils;

function SetDebugPriv: Boolean;
var
Token: THandle;
tkp: TTokenPrivileges;
begin
Result := false;
if OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token) then
begin
if LookupPrivilegeValue(nil, PChar("SeDebugPrivilege"), tkp.Privileges[0].Luid) then
begin
tkp.PrivilegeCount := 1;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
Result := AdjustTokenPrivileges(Token, false, tkp, 0, PTokenPrivileges(nil)^, PDWord(nil)^);
end;
end;
end;

function Start(ProcessID: Cardinal; DllFileName: string): Boolean;
var
hProcess, hTh: THandle;
BytesWritten, ThreadID, DllNameLen: Cardinal;
LoadLibraryProc, MemPtr: Pointer;
ExitCode: DWord;
begin
Result := false;

SetDebugPriv();

hProcess := OpenProcess(PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION or PROCESS_VM_WRITE,
true, ProcessID);

if hProcess <> 0 then
begin
DllNameLen := Length(DllFileName) + 1;

MemPtr := VirtualAllocEx(hProcess, nil, DllNameLen, MEM_COMMIT, PAGE_READWRITE);

if MemPtr <> nil then
begin
if WriteProcessMemory(hProcess, MemPtr, PChar(DllFileName), DllNameLen, BytesWritten) then
begin
LoadLibraryProc := GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");

hTh := CreateRemoteThread(hProcess, nil, 0, LoadLibraryProc, MemPtr, 0, ThreadID);

if hTh <> 0 then
begin
if (WaitForSingleObject(hTh, INFINITE) = WAIT_OBJECT_0) and
GetExitCodeThread(hTh, ExitCode) then
Result := ExitCode <> 0;

CloseHandle(hTh);
end;
end;

VirtualFreeEx(hProcess, MemPtr, 0, MEM_RELEASE);
end;

CloseHandle(hProcess);
end;

end;


var
ProcessID: Cardinal;
DllName: string;
begin
// !!! здесь введите process id процесса csrss.exe !!!!
ProcessID := 164;

if ProcessID <> 0 then
begin
DllName := ExtractFilePath(ParamStr(0)) + "mydll.dll";

if Start(ProcessID, DllName) then
WriteLn("Success")
else
WriteLn("Fail");
end;
end.


mydll.dpr

library mydll;

uses Windows, SysUtils;

function go(Param: Pointer): DWord; stdcall;
begin
OutputDebugString(PChar(Format("Dll: Process id: %d"#13#10, [GetCurrentProcessId])));
OutputDebugString(GetCommandLine);
FreeLibraryAndExitThread(HInstance, 0);
Result := 0;
end;

procedure DLLEntryPoint(dwReason: Integer);
var
id: Cardinal;
begin
case dwReason of
DLL_PROCESS_ATTACH:
begin
OutputDebugString("Dll: DLL_PROCESS_ATTACH"#13#10);

DisableThreadLibraryCalls(HInstance);
CloseHandle(CreateThread(nil, 0, @go, nil, 0, id));
end;
DLL_PROCESS_DETACH:
OutputDebugString("Dll: DLL_PROCESS_DETACH"#13#10);
end;
end;

begin
DLLProc := @DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH)
end.


dll выводит текст с помощью OutputDebugString. чтобы его посмотреть используйте DebugView ( http://sysinternals.com/ntw2k/freeware/debugview.shtml).


 
Xemax   (2002-09-02 16:56) [4]

Игорь Шевченко > просто можно так спрятать некоторую прогу, которая будет например сидеть в памяти и грабить клаву.


 
Xemax   (2002-09-02 16:59) [5]

Это то что нужно!


 
Игорь Шевченко ©   (2002-09-02 17:16) [6]

Xemax (02.09.02 16:56)

Можно и по-другому :-)
Пароли на вход хочешь узнать ?


 
Xemax   (2002-09-02 17:24) [7]

Игорь Шевченко > Хочу!!!


 
Xemax   (2002-09-02 17:56) [8]

Игорь Шевченко > Жду немогу дождаться! :-)


 
Игорь Шевченко ©   (2002-09-02 18:05) [9]

Xemax (02.09.02 17:56)

MSDN - msgina.dll (с примерами)


 
Xemax   (2002-09-02 18:37) [10]

Игорь Шевченко © (02.09.02 18:05):
Идея очень даже не плохая!
Ты имеешь ввиду заменить gina-у на свой компонетнт (на свою DLL). Или я чтото не так понял?


 
Игорь Шевченко ©   (2002-09-03 12:39) [11]

Да, именно это я имею в виду. Это вполне легальный способ. Описание этого процесс есть в MSDN.


 
Xemax   (2002-09-03 17:19) [12]

а можно ли подгрузить DLL к system или smss.exe? У меня не получается, винд типа сообщает что доступ закрыт.


 
paul_shmakov ©   (2002-09-03 17:24) [13]

нельзя, и не надо



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

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

Наверх




Память: 0.49 MB
Время: 0.018 c
1-56031
Эльф
2002-10-08 08:44
2002.10.17
Меню в стиле OfficeXP


14-56322
Beginner-Designer
2002-09-22 12:23
2002.10.17
Где найти хорошие менюшки на сайт? Только в html.


3-55949
wolfic
2002-09-23 16:33
2002.10.17
Администрирование базы


3-55993
helga
2002-09-25 14:23
2002.10.17
Вставка строки в таблицу формата DBF


8-56239
W1zard
2002-06-14 17:39
2002.10.17
MIDI в Дельфи