Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.01 c
3-55953
Natangelina
2002-09-25 10:44
2002.10.17
dateTimePicker


6-56264
Chertik
2002-08-13 17:52
2002.10.17
Открытие расшареного ресурса


1-56020
^Sanya
2002-10-06 19:32
2002.10.17
Toolbar vs Hint...


1-56128
Шурик Ш
2002-10-09 12:33
2002.10.17
Координаты мышки


1-56113
Leran2002
2002-10-09 08:58
2002.10.17
Дос+Винда





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский