Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 04.05.2009, 05:25
Аватар для The King Bear
The King Bear The King Bear вне форума
Прохожий
 
Регистрация: 17.12.2008
Адрес: irk
Сообщения: 16
Репутация: 10
По умолчанию

по поводу сервисов есть в книге
"Delphi в шутку и в серьез что умеют хакеры" - М. Ефремов
Как остановить как запустить и как вообще сделать его нестанавливаемым.
__________________
www.su6a.narod.ru
Ответить с цитированием
  #17  
Старый 08.05.2009, 10:10
новичёк новичёк вне форума
Прохожий
 
Регистрация: 25.12.2008
Сообщения: 17
Репутация: 10
По умолчанию

Выручайте, осталось пару штрихов добавить. Мне надо заблокировать CAD, нашел исходник с внедрением в winlogon. Впринципе CTRL+ALT+DEL я обошел закрытием окна по его названию, а как быть с ALT+TAB и CTR+ESC?

Вот DLL с внедрением.
Код:
library cad_hook_dll;

uses
  Windows, Messages;

var
  lpOldSASProc: pointer;
  hwSAS: DWORD;

{$R *.res}

function NewSASProc(hSAS, uMsg, wParam, lParam: DWORD): DWORD; stdcall;
begin
if uMsg = WM_HOTKEY then
  //Если нажата комбинация клавиш ALT+CTRL+DELETE
  if lParam = DWORD(MAKELONG(MOD_CONTROL or MOD_ALT, VK_DELETE)) then
    MessageBox(GetActiveWindow, 'Кто-то давит ALT+CTRL+DELETE', 'SAS-хук',
               MB_ICONINFORMATION + MB_DEFAULT_DESKTOP_ONLY)
  //Если нажата комбинация клавиш CTRL+SHIFT+ESCAPE
  else if lParam = DWORD(MAKELONG(MOD_CONTROL or MOD_SHIFT, VK_ESCAPE)) then
    MessageBox(GetActiveWindow, 'Кто-то давит CTRL+SHIFT+ESCAPE', 'SAS-хук',
               MB_ICONINFORMATION + MB_DEFAULT_DESKTOP_ONLY);
result := CallWindowProc(lpOldSASProc, hSAS, uMsg, wParam, lParam);
end;

begin
hwSAS := FindWindow('SAS Window class', 'SAS window');
if hwSAS <> 0 then
  lpOldSASProc := pointer(SetWindowLong(hwSAS, GWL_WNDPROC, DWORD(@NewSASProc)));
MessageBox(GetActiveWindow, 'Сообщение из Winlogon''а', 'Мы здесь!',
           MB_ICONINFORMATION + MB_DEFAULT_DESKTOP_ONLY);
end.

А это программа управления
program cad_hook;

uses
  Windows;

type
  TPROCESSENTRY32 = packed record
    dwSize,
    cntUsage,
    th32ProcessID,
    th32DefaultHeapID,
    th32ModuleID,
    cntThreads,
    th32ParentProcessID: DWORD;
    pcPriClassBase: Longint;
    dwFlags: DWORD;
    szExeFile: array[0..MAX_PATH - 1] of Char;
    end;

const
  TH32CS_SNAPPROCESS = $00000002;

function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): dword stdcall; external 'kernel32.dll';
function Process32First(hSnapshot: THandle; var lppe: TProcessEntry32): BOOL stdcall; external 'kernel32.dll';
function Process32Next(hSnapshot: THandle; var lppe: TProcessEntry32): BOOL stdcall; external 'kernel32.dll';

var
  hWinlogon: DWORD;

{$R *.res}

function GetProcessId(pName: PChar): dword;
var
 Snap: dword;
 Process: TPROCESSENTRY32;
begin
Result := 0;
Snap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if Snap <> INVALID_HANDLE_VALUE then
  begin
  Process.dwSize := SizeOf(TPROCESSENTRY32);
  if Process32First(Snap, Process) then
    repeat
      if lstrcmpi(Process.szExeFile, pName) = 0 then
        begin
        result := Process.th32ProcessID;
        CloseHandle(Snap);
        exit;
        end;
    until not Process32Next(Snap, Process);
  Result := 0;
  CloseHandle(Snap);
  end;
end;

function EnablePrivilegeEx(Process: dword; lpPrivilegeName: PChar):Boolean;
var
  hToken: dword;
  NameValue: Int64;
  tkp: TOKEN_PRIVILEGES;
  ReturnLength: dword;
begin
result := false;
OpenProcessToken(Process, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken);
if not LookupPrivilegeValue(nil, lpPrivilegeName, NameValue) then
  begin
  CloseHandle(hToken);
  exit;
  end;
tkp.PrivilegeCount := 1;
tkp.Privileges[0].Luid := NameValue;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, false, tkp, SizeOf(TOKEN_PRIVILEGES), tkp, ReturnLength);
if GetLastError <> ERROR_SUCCESS then
  begin
  CloseHandle(hToken);
  exit;
  end;
result:=true;
CloseHandle(hToken);
end;

function InjectDll(Process: dword; ModulePath: PChar): boolean;
var
  Memory: pointer;
  Code,
  BytesWritten,
  ThreadId,
  hThread,
  hKernel32: DWORD;
  Inject: packed record
          PushCommand: BYTE;
          PushArgument: DWORD;
          CallCommand: WORD;
          CallAddr: DWORD;
          PushExitThread: BYTE;
          ExitThreadArg: DWORD;
          CallExitThread: WORD;
          CallExitThreadAddr: DWORD;
          AddrLoadLibrary: pointer;
          AddrExitThread: pointer;
          LibraryName: array[0..MAX_PATH] of char;
          end;
begin
result := false;
Memory := VirtualAllocEx(Process, nil, sizeof(Inject), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
if Memory = nil then exit;
Code := DWORD(Memory);
Inject.PushCommand    := $68;
inject.PushArgument   := code + $1E;
inject.CallCommand    := $15FF;
inject.CallAddr       := code + $16;
inject.PushExitThread := $68;
inject.ExitThreadArg  := 0;
inject.CallExitThread := $15FF;
inject.CallExitThreadAddr := code + $1A;
hKernel32 := GetModuleHandle('kernel32.dll');
inject.AddrLoadLibrary := GetProcAddress(hKernel32, 'LoadLibraryA');
inject.AddrExitThread  := GetProcAddress(hKernel32, 'ExitThread');
lstrcpy(@inject.LibraryName, ModulePath);
WriteProcessMemory(Process, Memory, @inject, sizeof(inject), BytesWritten);
hThread := CreateRemoteThread(Process, nil, 0, Memory, nil, 0, ThreadId);
if hThread = 0 then exit;
CloseHandle(hThread);
result := True;
end;

begin
if EnablePrivilegeEx(INVALID_HANDLE_VALUE, 'SeDebugPrivilege') then
  begin
  //Имея привилегии отладчика можно открыть Winlogon с полными правами доступа!
  hWinlogon := OpenProcess(PROCESS_ALL_ACCESS, false, GetProcessId('Winlogon.exe'));
  if hWinlogon <> 0 then
    begin
    if InjectDll(hWinlogon, 'cad_hook_dll.dll') then
      MessageBox(0, 'Внедрение в процесс Winlogon успешно проведено', 'Заебись!', MB_ICONINFORMATION)
    else
      MessageBox(0, 'Не возможно внедриться в Winlogon', 'Ошибка', MB_ICONERROR);
    CloseHandle(hWinlogon);
    end
  else
    MessageBox(0, 'Не возможно открыть процесс Winlogon на запись', 'Ошибка', MB_ICONERROR);
  end
else
  MessageBox(0, 'Не возможно добавить привилегии отладчика', 'Ошибка', MB_ICONERROR);
end.
Admin: Читаем правила форума и пользуемся тегами!

Что дописать что бы блокировались все кад сочетания? И самое главное в этом примере выскакиевает окошко что нажаты CTRL+ALT+DEl и всеравно появляется диспечер задач. Помогите разобратся, в нете ничего не могу найти.

Последний раз редактировалось Admin, 08.05.2009 в 10:30.
Ответить с цитированием
  #18  
Старый 08.05.2009, 10:32
новичёк новичёк вне форума
Прохожий
 
Регистрация: 25.12.2008
Сообщения: 17
Репутация: 10
По умолчанию

Или вообще игнорировать все нажатия клавиатуры. А перед закрытием включить нормальное функционирование клавиатуры.
Ответить с цитированием
  #19  
Старый 09.05.2009, 10:28
новичёк новичёк вне форума
Прохожий
 
Регистрация: 25.12.2008
Сообщения: 17
Репутация: 10
По умолчанию

Все с этим разобрался ловим хуками tab, CRLT, ALT, DEL, WINDOWS, а CTRL+ALT+DEL отключаем по названию окна!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:06.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter