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

Поиск:

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


Эксперт
****


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

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



Цитата

...Disable CTRL+ALT+DELETE under XP? 
Autor: Andreas Kirchmeyer 
Homepage: http://www.kaweb.de
2 Comment(s) to this tip [Write new comment]
[ Print tip ]   

Tip Rating (53): 
Код
     
procedure DisableTaskMgr(bTF: Boolean);
var
 reg: TRegistry;
begin
 reg := TRegistry.Create;
 reg.RootKey := HKEY_CURRENT_USER;

 reg.OpenKey('Software', True);
 reg.OpenKey('Microsoft', True);
 reg.OpenKey('Windows', True);
 reg.OpenKey('CurrentVersion', True);
 reg.OpenKey('Policies', True);
 reg.OpenKey('System', True);

 if bTF = True then
 begin
   reg.WriteString('DisableTaskMgr', '1');
 end
 else if bTF = False then
 begin
   reg.DeleteValue('DisableTaskMgr');
 end;
 reg.CloseKey;
end;

// Example Call:
procedure TForm1.Button1Click(Sender: TObject);
begin
 DisableTaskMgr(True);
end;



Взято с http://swissdelphicenter.ch/en/
PM   Вверх
-=::BlackCat::=-
Дата 5.9.2004, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 12.7.2003
Где: растёт анаша?

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





--------------------
-=::BlackCat::=-user posted image

такой дуратцкий аватар потому как мой 100х100, а такие подгрузить нелзя, движок форума чо сам не может его переделать??  гррр, админ, форум косячит  
PM MAIL ICQ   Вверх
Pathfider
Дата 17.9.2004, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Это все очень хорошо, НО!!! изменения действуют только после перезагрузки. А если нужно отключить три кнопки только на время работы проги? Я еще ничего по этому поводу не нашел и не смог накодить(в смысле чтобы вырубалось/врубалось в релтайме).
--------------------
Trust is a weakness
PM MAIL   Вверх
Pakshin A. S.
Дата 17.9.2004, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Судя по коду (если он рабочий), то:
Код

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

PM   Вверх
Ripper
Дата 17.9.2004, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

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



Т.е. если я запущу прогу с DisableTaskMgr(true); потом закрою её и никогда не будет действовать CAD? Класс)) Чего только не придумают =)


--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
Pakshin A. S.
  Дата 17.9.2004, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Должно вроде так работать.
Лучше это сунуть в ProjectName.dpr.
Код

...

begin
  Application.Initialize;
  ...
  DisableTaskMgr(True);
  Application.Run;
  DisableTaskMgr(False);
end.


Это сообщение отредактировал(а) Pakshin A. S. - 17.9.2004, 20:08
PM   Вверх
devmstr
Дата 18.9.2004, 06:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


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

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



Я б вообще Microsoft за такие штучки прибилбы. Когда мен первый раз такое сделали на моей рабочей машине я был в ярости! mad.gif
Добавлено @ 06:47
И еще все это делается без перезагрузки.
Замечание по примеру.
RegOpen двести раз. Один раз написал с полным путем и всё! Keep it simple! smile.gif


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
Nicholas
Дата 20.10.2004, 06:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



DisableTaskMgr - Delphi 7 у меня говорит [Error] Project1.dpr(12): Undeclared identifier: 'DisableTaskMgr'!!!!???????
:qstn

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


Творец
****


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

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



в секции private напиши
Код
procedure DisableTaskMgr(bTF: Boolean);

в тексте модуля
напиши
Код

procedure TForm1.DisableTaskMgr(bTF: Boolean);
var
reg: TRegistry;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_CURRENT_USER;

reg.OpenKey('Software', True);
reg.OpenKey('Microsoft', True);
reg.OpenKey('Windows', True);
reg.OpenKey('CurrentVersion', True);
reg.OpenKey('Policies', True);
reg.OpenKey('System', True);

if bTF = True then
begin
reg.WriteString('DisableTaskMgr', '1');
end
else if bTF = False then
begin
reg.DeleteValue('DisableTaskMgr');
end;
reg.CloseKey;
end;

// Example Call:
procedure TForm1.Button1Click(Sender: TObject);
begin
DisableTaskMgr(True);
end;


PM MAIL   Вверх
Nicholas
Дата 20.10.2004, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Блин, че-то я не туда посмотрел! :hehe

DisableTaskMgr(True); - работает, но при нажатии Ctrl+Alt+Del вылетает сообщение (которое мне очень не нравиться, а главное она выдает в чем причина не срабатывания нажатия клавишь!), что типо "Диспетчер задач отключен администратором", может и окошко это в реестре можно вырубить???
И еще, не всегда есть доступ к изменению реестра, особенно в XP!!!

А может кто знает как это все дело провернуть через простое нажатие клавишь, по такому типу можно например нажатие горячих клавиш заставить программу ловить :

Код

unit Unit1;

interface

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

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
protected
procedure hotykey(var msg:TMessage); message WM_HOTKEY;
end;

var
 Form1: TForm1;
 id,id2:Integer;

implementation

{$R *.DFM}

procedure TForm1.hotykey(var msg:TMessage);
begin
if (msg.LParamLo=MOD_CONTROL) and (msg.LParamHi=81) then
begin
ShowMessage('Ctrl + Q wurde gedrьckt !');
end;
if (msg.LParamLo=MOD_CONTROL) and (msg.LParamHi=82)
then
begin
ShowMessage('Ctrl + R wurde gedrьckt !');
{здесь что-то типо замены сообщений виндовс или не получиться ?}
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
id:=GlobalAddAtom('hotkey');
RegisterHotKey(handle,id,mod_control,81);
id2:=GlobalAddAtom('hotkey2');
RegisterHotKey(handle,id2,mod_control,82);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
UnRegisterHotKey(handle,id);
UnRegisterHotKey(handle,id2);
end;

end.

В этом коде, что-то не получилось у меня даже WIN+D отловить, не говоря уже о Ctrl+Alt+Del !

Таким макаром это сделать нельзя , т.е. например отловил нажатие и сообщение виндовс о запуске менеджера заменить другим каким нибудь, но без DLL, так можно??????
:sample


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


Творец
****


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

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



выломай клавишу Delete из клавы
PM MAIL   Вверх
Felt
Дата 20.10.2004, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Гм... А зачем вырубать менеджер? Можно ведь только свою прогу скрыть из списка задач даже в 2000\XP я уж не говорю о 9x
PM MAIL   Вверх
Pathfider
Дата 20.10.2004, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата
Гм... А зачем вырубать менеджер? Можно ведь только свою прогу скрыть из списка задач даже в 2000\XP я уж не говорю о 9x

Ага... А как ты ее из списка процессов уберешь?
--------------------
Trust is a weakness
PM MAIL   Вверх
decoder
Дата 20.10.2004, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Pathfider @ 20.10.2004, 14:57)
Ага... А как ты ее из списка процессов уберешь?

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


Опытный
**


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

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



Цитата(Felt @ 20.10.2004, 14:34)
А зачем вырубать менеджер?


Зтем, чтобы не только мою, но и чужие проги не вырубались!!!
PM MAIL ICQ   Вверх
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   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.

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


 




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


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

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