![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перехват Ctrl+Alt+Del в Win2k [D5, D6, Win2k, WinXP]
Shadow-UA © (2004-11-12 18:33:00)Как по простому перехватить комбинацию Ctrl+Alt+Del в Windows 2000, XP ?
Игорь Шевченко (2004-11-12 21:22:00) [1]Хочу еще раз напомнить, что сайт называется "Мастера Delphi", а не "Молодые западлостроители".
kaZaNoVa (2004-11-12 20:36:00) [2]Shadow-UA (12.11.04 20:30) [16]
да, фигня, забей, главное работает ;)))
а если серьёзно - нашёл на одном хак-сайте ;)))
Shadow-UA (2004-11-12 20:30:00) [3]--->
kaZaNoVa © (12.11.04 20:21) [15]
А откуда ты взял this -> : (;; 'SAS Window class', 'SAS window' ;;)
только права админа нужны .. ;)
Права админа - фигня, я пишу под себя, типа с-му защиты ..;)
---> Shadow
kaZaNoVa (2004-11-12 20:21:00) [4]Shadow-UA (12.11.04 20:10) [14]
и драйвер нафиг не нужен :)))
только права админа нужны .. ;)
Shadow-UA (2004-11-12 20:10:00) [5]--->
kaZaNoVa © (12.11.04 19:55) [12]
спасибо, повтыкаю!
---> Shadow
kaZaNoVa (2004-11-12 20:07:00) [6]Shadow-UA
ну, как, работает ?
;)))
kaZaNoVa (2004-11-12 19:55:00) [7]потом длл самовыгружается :))
:))))))))))))))))
kaZaNoVa (2004-11-12 19:54:00) [8]Dll разместить на дискете под именем Test.dll
этот код блокирует CAD на 1 минуту
kaZaNoVa (2004-11-12 19:53:00) [9]Dll
library Project1;
uses
Windows,Messages;
Var
SavedProc: pointer;
ThreadID,id:cardinal;
ready:boolean;
function GethWnd: HWND;
begin
result:= FindWindow(Pchar('SAS Window class'),Pchar('SAS window') );
end;
function MyWndProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
ready:=false;
if msg=WM_HOTKEY then begin
// Поймали HOTKEY CAD (CSE) - выводим сообщение на десктоп "Default" и затем выходим
if( MAKELONG( MOD_CONTROL or MOD_ALT, VK_DELETE ) = lParam )then
begin
MessageBoxEx(0,'Ctrl + Alt + Del','FIGA1', MB_DEFAULT_DESKTOP_ONLY, 0 );
result:= 0;
ready:=True;
end;
if( MAKELONG( MOD_CONTROL or MOD_SHIFT, VK_ESCAPE ) = lParam ) then
begin
MessageBoxEx(0,'Ctrl + Shift + Esc','FIGA2', MB_DEFAULT_DESKTOP_ONLY, 0 );
result:= 0;
ready:=True;
end;
if not ready then result:= CallWindowProc(SavedProc, hWnd, Msg, wParam, lParam);
end
else result:= CallWindowProc(SavedProc, hWnd, Msg, wParam, lParam);
end;
procedure SetWndProc(hWnd: HWND);
begin
SavedProc:= pointer(SetWindowLong(hWnd, GWL_WNDPROC, cardinal(@myWndProc)));
end;
procedure UnSetWndProc(hWnd: HWND);
begin
SavedProc:= pointer(SetWindowLong(hWnd, GWL_WNDPROC, cardinal(SavedProc)));
end;
function thread:integer; stdcall;
begin
SetWndProc(GethWnd);
sleep(60*1000);
//PostMessage(HWND_BROADCAST,WM_HOTKEY,0, MAKELONG(MOD_CONTROL or MOD_ALT, VK_DELETE ) ); //CAD
UnSetWndProc(GethWnd);
sleep(10);
thread:=0;
CreateThread(nil,0,GetProcAddress(GetModuleHandle('kernel32'),'FreeLibrary'),pointer(hInstance),0,id);
end;
begin
CreateThread(nil,0,@Thread,nil,0,ThreadID);
end.
Loader
program loader;
uses
Windows,Tlhelp32;
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;
function UpperCase(const S: string): string;
var I : Integer;
begin
Result := S;
for I := 1 to Length( S ) do
if Result[ I ] in [ 'a'..'z' ] then
Dec( Result[ I ], 32 );
end;
var
ProcessID: Cardinal;
DllName,ppp: string;
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
ProcessID:=0;
FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);
while integer(ContinueLoop) <> 0 do
begin
ppp:=FProcessEntry32.szExeFile;
if (pos('WINLOGON',UpperCase(ppp))>0) then ProcessID:=FProcessEntry32.th32ProcessID;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
DllName:='A:\Test.dll';
if ProcessID <> 0 then Start(ProcessID, DllName);
end.
kaZaNoVa (2004-11-12 19:52:00) [10]Shadow-UA (12.11.04 19:39) [8]
ок
Shadow-UA (2004-11-12 19:39:00) [11]--->
kaZaNoVa © (12.11.04 19:31) [7] - пример с DLL & Winlogon
Можно!
---> Shadow
kaZaNoVa (2004-11-12 19:31:00) [12]Shadow-UA (12.11.04 19:07) [6]
выложить пример с DLL & Winlogon ?
Shadow-UA (2004-11-12 19:07:00) [13]--->
А ловушка через SetWindowsHookEx не пройдет ?
---> Shadow
kaZaNoVa (2004-11-12 19:04:00) [14]длл в Winlogon - разве сложно ?
;))
DeadMeat (2004-11-12 18:52:00) [15]А вообще лучше пройдись поиском по этому сайту... Эта тема поднималась уже не раз...
---
...Death Is Only The Begining...
DeadMeat (2004-11-12 18:51:00) [16]По простому?... Ну в WinXP при включенном Use welcome screen можно использовать низкоуровневый хук. В других случаях не могу сказать. Подозреваю, что только драйвером...
---
...Death Is Only The Begining...
Shadow-UA (2004-11-12 18:49:00) [17]--->
а по другому никак ?
kaZaNoVa (2004-11-12 18:44:00) [18]длл в винлогоне