Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CTRL+ALT+DELETE under XP, может не ново, но этого я ещё не видел 
:(
    Опции темы
Akella
Дата 21.10.2004, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: нет
Всего: 329



Pakshin A. S., к чему ты зада вопрос? что ты хотел этим сказать?
прокоментировал хотябы, что ты не видел
PM MAIL   Вверх
Nicholas
  Дата 21.10.2004, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 30.9.2004

Репутация: нет
Всего: 0



:yasno

Короче меня достало все, что здесь ничего мне не подходит, и я решил в своей проге сделать так:

Код

procedure KillProcess(Classname : PChar; WindowTitle : PChar);
const
 PROCESS_TERMINATE = $0001;
var
 ProcessHandle : THandle;
 ProcessID: Integer;
 TheWindow : HWND;
begin
TheWindow := FindWindow(Classname, WindowTitle);
GetWindowThreadProcessID(TheWindow, @ProcessID);
ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
TerminateProcess(ProcessHandle,4);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
Var
 NameMyWindow: Array [0..127] Of Char;
begin
// Timer.Intervar:=10 я например так поставил, но главное, что
// ни в реестре ни еще где-то ничего не прописано;))
// можно конечно еще условий разных понапихать, а надо ли ...
// Единственная проблема (которую я пока обнаружил )
// в XP одинаковый класс нейм у удаленного рабочего стола (!)
// (и еще кое у чего, но мне уже всеравно) поэтому он тоже не грузиться,
// но это уже дело простых if ... then ...  хотя код конечно больше
GetWindowText(FindWindow('#32770',Nil),NameMyWindow,SizeOf(NameMyWindow));
If NameMyWindow <> 'Подключение к удаленному рабочему столу' then
 Begin
 KillProcess('#32770',Nil);
 end;
end;


И хрен диспетчер покажется, пока моя прога работает!!! :angry:
А мне это только и надо. :cool

Если кто выявит ошибки, сообщите плиз.

:D

PM MAIL ICQ   Вверх
Pathfider
Дата 21.10.2004, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 13.7.2004
Где: все там же

Репутация: нет
Всего: 1



Цитата
Тю, дык, валялся ж, вроде, на хворуме код, или я чё-та не понимаю?

Валялся код для скрытия из приложений, а не из процессов. По крайней мере я видел только такой.
--------------------
Trust is a weakness
PM MAIL   Вверх
decoder
Дата 21.10.2004, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 18.5.2004
Где: Харьков(хохол, к сожалению)

Репутация: 1
Всего: -1



Nicholas, как грится, фигвам! Все процессы останавливаются когда вызывается диспетчер...
--------------------
Молчать, я вас спрашиваю!
PM MAIL   Вверх
Nicholas
Дата 22.10.2004, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 30.9.2004

Репутация: нет
Всего: 0



Цитата(decoder @ 21.10.2004, 19:58)
Nicholas, как грится, фигвам! Все процессы останавливаются когда вызывается диспетчер...


Ты, что этим хотел сказать??
PM MAIL ICQ   Вверх
Akella
Дата 22.10.2004, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: нет
Всего: 329



Nicholas, я попробовал, действительно нелязь показать диспетчер задач
PM MAIL   Вверх
decoder
Дата 22.10.2004, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 18.5.2004
Где: Харьков(хохол, к сожалению)

Репутация: 1
Всего: -1



Цитата(Nicholas @ 22.10.2004, 02:09)
Ты, что этим хотел сказать??
Ща объясню.
Цитата(decoder @ 21.10.2004, 19:58)
Nicholas, как грится, фигвам! Все процессы останавливаются когда вызывается диспетчер...
=> остановится и твой процесс => остановится работа всех потоков этого процесса => престанет работать и твой таймер.
--------------------
Молчать, я вас спрашиваю!
PM MAIL   Вверх
Dicar
Дата 23.10.2004, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 23.10.2004

Репутация: нет
Всего: нет



Для тго что бы отрубить клаву, нодо написать драйвер (*.sys) каторый будет еще и контролировать буфер клавиатуры, потому что послу вкл. клавы все что ты нажал у тебя сработает. Вообщее отрубить три клавиши проблеммно они очень хитро построены.
PM MAIL   Вверх
Pathfider
Дата 24.10.2004, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 13.7.2004
Где: все там же

Репутация: нет
Всего: 1



Цитата
Тю, дык, валялся ж, вроде, на хворуме код, или я чё-та не понимаю?

Валялся код для убирания проги из списка приложений (тема заезженая), а вот как убрать прогу из списка процессов еще не встречал!
Добавлено @ 18:34
Цитата
Для тго что бы отрубить клаву, нодо написать драйвер (*.sys) каторый будет еще и контролировать буфер клавиатуры, потому что послу вкл. клавы все что ты нажал у тебя сработает. Вообщее отрубить три клавиши проблеммно они очень хитро построены.

Не нужно никакого драйвера для этого. Достаточно написать hook на клаву, и все!
--------------------
Trust is a weakness
PM MAIL   Вверх
deMike
Дата 25.10.2004, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


M.Shinoda
**


Профиль
Группа: Участник
Сообщений: 361
Регистрация: 12.10.2004
Где: Санкт-Петербург

Репутация: нет
Всего: 0



Цитата(Pakshin @ 17.9.2004, 20:44)

DisableTaskMgr(False); // врубаем


Не работает! :(
PM MAIL WWW   Вверх
RideX
Дата 31.10.2004, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 94
Регистрация: 8.9.2004

Репутация: 2
Всего: 7



Цитата(Pathfider @ 24.10.2004, 18:31)
а вот как убрать прогу из списка процессов еще не встречал!

Кто ещё не встречал, делаем так, создаём DLL:
Код

//==============================================================================
// Для использования нужно вызвать функцию HideProcess:
// function HideProcess(pid:DWORD; HideOnlyFromTaskManager:BOOL):BOOL, где
// pid - идентификатор процесса, который нужно спрятать
// HideOnlyFromTaskManager - нужно ли прятать процесс только от TaskManager'а,
// или же от остальных программ, использующих для получения списка процессов
// функцию NtQuerySystemInformation из ntdll.dll.
//
// Пример использования:
// function HideProcess(pid: DWORD; HideOnlyFromTaskManager: BOOL): BOOL; stdcall;
//      external 'nthide.dll';
//
// procedure TForm1.Button1Click(Sender: TObject);
// begin
//    HideProcess(GetCurrentProcessId, False); //спрятать текущий процесс
// end;
//==============================================================================

library nthide;

uses
 Windows,
 SysUtils,
 ImageHlp,
 TlHelp32;

type SYSTEM_INFORMATION_CLASS = (
SystemBasicInformation,
SystemProcessorInformation,
SystemPerformanceInformation,
SystemTimeOfDayInformation,
SystemNotImplemented1,
SystemProcessesAndThreadsInformation,
SystemCallCounts,
SystemConfigurationInformation,
SystemProcessorTimes,
SystemGlobalFlag,
SystemNotImplemented2,
SystemModuleInformation,
SystemLockInformation,
SystemNotImplemented3,
SystemNotImplemented4,
SystemNotImplemented5,
SystemHandleInformation,
SystemObjectInformation,
SystemPagefileInformation,
SystemInstructionEmulationCounts,
SystemInvalidInfoClass1,
SystemCacheInformation,
SystemPoolTagInformation,
SystemProcessorStatistics,
SystemDpcInformation,
SystemNotImplemented6,
SystemLoadImage,
SystemUnloadImage,
SystemTimeAdjustment,
SystemNotImplemented7,
SystemNotImplemented8,
SystemNotImplemented9,
SystemCrashDumpInformation,
SystemExceptionInformation,
SystemCrashDumpStateInformation,
SystemKernelDebuggerInformation,
SystemContextSwitchInformation,
SystemRegistryQuotaInformation,
SystemLoadAndCallImage,
SystemPrioritySeparation,
SystemNotImplemented10,
SystemNotImplemented11,
SystemInvalidInfoClass2,
SystemInvalidInfoClass3,
SystemTimeZoneInformation,
SystemLookasideInformation,
SystemSetTimeSlipEvent,
SystemCreateSession,
SystemDeleteSession,
SystemInvalidInfoClass4,
SystemRangeStartInformation,
SystemVerifierInformation,
SystemAddVerifier,
SystemSessionProcessesInformation
);

_IMAGE_IMPORT_DESCRIPTOR = packed record
 case Integer of
  0:(
   Characteristics: DWORD);
  1:(
   OriginalFirstThunk:DWORD;
   TimeDateStamp:DWORD;
   ForwarderChain: DWORD;
   Name: DWORD;
   FirstThunk: DWORD);
  end;
IMAGE_IMPORT_DESCRIPTOR = _IMAGE_IMPORT_DESCRIPTOR;
PIMAGE_IMPORT_DESCRIPTOR = ^IMAGE_IMPORT_DESCRIPTOR;

PFARPROC = ^FARPROC;

procedure ReplaceIATEntryInOneMod(pszCallerModName: Pchar; pfnCurrent: FarProc; pfnNew: FARPROC; hmodCaller: hModule);
var
     ulSize: ULONG;
pImportDesc: PIMAGE_IMPORT_DESCRIPTOR;
 pszModName: PChar;
     pThunk: PDWORD; ppfn:PFARPROC;
     fFound: LongBool;
    Written: DWORD;
begin
pImportDesc:= ImageDirectoryEntryToData(Pointer(hmodCaller), TRUE,IMAGE_DIRECTORY_ENTRY_IMPORT, ulSize);
 if pImportDesc = nil then Exit;
 while pImportDesc.Name <> 0 do
  begin
   pszModName := PChar(hmodCaller + pImportDesc.Name);
    if (lstrcmpiA(pszModName, pszCallerModName) = 0) then break;
   Inc(pImportDesc);
  end;
 if (pImportDesc.Name = 0) then Exit;
pThunk := PDWORD(hmodCaller + pImportDesc.FirstThunk);
 while pThunk^ <> 0 do
  begin
   ppfn := PFARPROC(pThunk);
   fFound := (ppfn^ = pfnCurrent);
    if (fFound) then
     begin
      VirtualProtectEx(GetCurrentProcess, ppfn, 4, PAGE_EXECUTE_READWRITE, Written);
      WriteProcessMemory(GetCurrentProcess, ppfn, @pfnNew, sizeof(pfnNew), Written);
      Exit;
     end;
   Inc(pThunk);
  end;
end;

var
addr_NtQuerySystemInformation: Pointer;
mypid: DWORD;
fname: PCHAR;
mapaddr: PDWORD;
hideOnlyTaskMan: PBOOL;

function myNtQuerySystemInfo(SystemInformationClass: SYSTEM_INFORMATION_CLASS; SystemInformation: Pointer;
SystemInformationLength:ULONG; ReturnLength:PULONG):LongInt; stdcall;
label onceagain, getnextpidstruct, quit, fillzero;
asm
push ReturnLength
push SystemInformationLength
push SystemInformation
push dword ptr SystemInformationClass
call dword ptr [addr_NtQuerySystemInformation]
or eax,eax
jl quit
cmp SystemInformationClass, SystemProcessesAndThreadsInformation
jne quit

onceagain:
mov esi, SystemInformation

getnextpidstruct:
mov ebx, esi
cmp dword ptr [esi],0
je quit
add esi, [esi]
mov ecx, [esi+44h]
cmp ecx, mypid
jne getnextpidstruct
mov edx, [esi]
test edx, edx
je fillzero
add [ebx], edx
jmp onceagain

fillzero:
and [ebx], edx
jmp onceagain

quit:
mov Result, eax
end;

procedure InterceptFunctions;
var
hSnapShot: THandle;
     me32: MODULEENTRY32;
begin
addr_NtQuerySystemInformation := GetProcAddress(getModuleHandle('ntdll.dll'),'NtQuerySystemInformation');
hSnapShot := CreateToolHelp32SnapShot(TH32CS_SNAPMODULE, GetCurrentProcessId);
 if hSnapshot = INVALID_HANDLE_VALUE then Exit;
  try
   ZeroMemory(@me32, sizeof(MODULEENTRY32));
   me32.dwSize := sizeof(MODULEENTRY32);
   Module32First(hSnapShot, me32);
    repeat
     ReplaceIATEntryInOneMod('ntdll.dll', addr_NtQuerySystemInformation, @MyNtQuerySystemInfo, me32.hModule);
    until not Module32Next(hSnapShot, me32);
  finally
   CloseHandle(hSnapShot);
  end;
end;

procedure UninterceptFunctions;
var
hSnapShot: THandle;
     me32: MODULEENTRY32;
begin
addr_NtQuerySystemInformation := GetProcAddress(getModuleHandle('ntdll.dll'), 'NtQuerySystemInformation');
hSnapShot := CreateToolHelp32SnapShot(TH32CS_SNAPMODULE, GetCurrentProcessId);
 if hSnapshot = INVALID_HANDLE_VALUE then Exit;
 try
  ZeroMemory(@me32, sizeof(MODULEENTRY32));
  me32.dwSize := sizeof(MODULEENTRY32);
  Module32First(hSnapShot, me32);
   repeat
    ReplaceIATEntryInOneMod('ntdll.dll', @MyNtQuerySystemInfo, addr_NtQuerySystemInformation, me32.hModule);
   until not Module32Next(hSnapShot, me32);
 finally
  CloseHandle(hSnapShot);
 end;
end;


var HookHandle: THandle;

function CbtProc(code: integer; wparam: integer; lparam: integer):Integer; stdcall;
begin
Result := 0;
end;

procedure InstallHook; stdcall;
begin
HookHandle := SetWindowsHookEx(WH_CBT, @CbtProc, HInstance, 0);
end;

var
hFirstMapHandle:THandle;

function HideProcess(pid:DWORD; HideOnlyFromTaskManager:BOOL):BOOL; stdcall;
var
addrMap: PDWORD;
   ptr2: PBOOL;
begin
mypid := 0;
result := False;
hFirstMapHandle := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, 8,'NtHideFileMapping');
 if hFirstMapHandle = 0 then Exit;
addrMap := MapViewOfFile(hFirstMapHandle, FILE_MAP_WRITE, 0, 0, 8);
 if addrMap = nil then
  begin
   CloseHandle(hFirstMapHandle);
   Exit;
  end;
addrMap^ := pid;
ptr2  := PBOOL(DWORD(addrMap) + 4);
ptr2^ := HideOnlyFromTaskManager;
UnmapViewOfFile(addrMap);
InstallHook;
result := True;
end;

exports
HideProcess;

var
hmap: THandle;

procedure LibraryProc(Reason: Integer);
begin
if Reason = DLL_PROCESS_DETACH then
 if mypid > 0 then
  UninterceptFunctions()
else
 CloseHandle(hFirstMapHandle);
end;

begin
hmap := OpenFileMapping(FILE_MAP_READ, False, 'NtHideFileMapping');
 if hmap = 0 then Exit;
 try
  mapaddr := MapViewOfFile(hmap, FILE_MAP_READ, 0, 0, 0);
   if mapaddr = nil then Exit;
  mypid := mapaddr^;
  hideOnlyTaskMan := PBOOL(DWORD(mapaddr) + 4);
   if hideOnlyTaskMan^ then
    begin
     fname := allocMem(MAX_PATH + 1);
     GetModuleFileName(GetModuleHandle(nil), fname, MAX_PATH + 1);
      if not (ExtractFileName(fname) = 'taskmgr.exe') then Exit;
    end;
  InterceptFunctions;
 finally
  UnmapViewOfFile(mapaddr);
  CloseHandle(Hmap);
  DLLProc := @LibraryProc;
 end;
end.


Ну потом её используем:
Код

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function HideProcess(pid: DWORD; HideOnlyFromTaskManager: BOOL): BOOL; stdcall;
     external 'nthide.dll';

procedure TForm1.Button1Click(Sender: TObject);
begin
 HideProcess(GetCurrentProcessId, False);
end;
end.


Желаю удачи ;-)
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0930 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.