Форум: "WinAPI";
Текущий архив: 2002.10.17;
Скачать: [xml.tar.bz2];
ВнизЗагрузка 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.10.17;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c