Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 14 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 09.12.2007
Господа!

Возникла задача - перехват программой нажатия клавиши SLEEP.
Поскольку ни в книжках, что есть у меня, ни в справке Делфи нет кода клавиш управления питанием, то написал такую программульку, чтобы этот код узнать:
http://slil.ru/25238047
Привожу фрагмент программы.
Код:
unit Unit1;

interface

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

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

var
  Form1: TForm1;

var buf: TKeyboardState;
    i: word;
    L: longbool;
    P: string;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Label1.Caption:='';
 GetKeyboardState(buf);
 L:=false;
 P:='';
   for i:=2 to 255 do
     begin
       if buf[i]=1 then
         begin
            if L then P:=' + ';
            Label1.Caption:=Label1.Caption+P+inttostr(i);
            L:=true;
            buf[i]:=0
         end;
     end;
  SetKeyboardState(buf)
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  for i:=0 to 255 do buf[i]:=0;
   SetKeyboardState(buf)
end;

end.


Запуская её на работе на 3-х машинах, узнал, что power и wake соответствует один и тот же код 255, sleep - 95.
Радостно потирая руки и надувая щёки :D , я пришёл домой с намерением отполировать программу.
Включаю ЭВМ, а моя программа вообще не реагирует на эти клавиши!!! :insane: Не знаю, в какой бубен бить.

Просьба запустить приложенную программку у себя на машинах (намеренно дал исходный код, чтоб не было подозрений насчёт троянов) на предмет высвечивания кода клавиш питания.
Инструкция:
- назначить через панель управления клавишам питания режим "не выполнять никаких действий", дабы не смущать систему;
- запустить программу;
- нажать клавишу питания;
- нажать кнопу программы.
Результат, если не трудно, сообщите.

ЗЫ: На работе на 2-х машинах XP SP2, на 3-й - Виста, ставленная с того же дистрибутива, что и дома.
ЗЫЗЫ: Самое интересное, что ОС реагирует на клавиши питания как положено.



Партнер
 

Member
Статус: Не в сети
Регистрация: 02.08.2004
Откуда: Moscow region
MrGalaxy
У меня на клаве только Sleep. Показывает код 95.

_________________
Когда у общества нет цветовой дифференциации штанов, у него нет цели.


 

Member
Статус: Не в сети
Регистрация: 09.12.2007
SoluS
Цитата:
У меня на клаве только Sleep.

Вот и у меня на новой клаве BTC6300C - тоже... Хочу перековать эту клавишу на POWER.

_________________
Вечный студент


 

Member
Статус: Не в сети
Регистрация: 09.12.2007
Отладил сейчас программку, могу задать выключение по любой клавише. :applause: :super:
Кроме SLEEP и POWER на домашнем компе. :mad2: :bandhead:
Приложенный пример настроен на выключение по клавише PAUSE/BREAK как неиспользуемой мною. Может, кому пригодится. :)
Код:
program Project2;

uses
  Windows, Forms;

var
  tkh: THandle;
  tp: TTokenPrivileges;

begin

Application.Run;
GetAsyncKeyState(19);
while (GetAsyncKeyState(19) and 1)=0 do sleep(1000);
  if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, tkh) then
   if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tp.Privileges[0].Luid) then
     begin
       tp.PrivilegeCount:=1;
       tp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
          If AdjustTokenPrivileges(tkh, false, tp, 0, nil, PDword(nil)^) then
              ExitWindowsEx(EWX_SHUTDOWN,0)
     end
end.

_________________
Вечный студент


 

Member
Статус: Не в сети
Регистрация: 09.12.2007
Сигнал SLEEP, сформированный клавиатурой, подключенной по USB, мне не удалось перехватить, ту же клавиатуру подключил через переходник по PS/2, и всё пошло как по маслу. Во как!

_________________
Вечный студент


 

Member
Статус: Не в сети
Регистрация: 16.04.2004
Откуда: [MSK.RU]
MrGalaxy
Покури Win32 SDK на предмет хуков. Посмотри функцию SetWindowsHookEx.
С помощью одного только этого мануала мне удалось написать кейлоггер для курсача... Он ловит вообще всё.
Правда, писал на С++, ну да это мелочи...


 

Member
Статус: Не в сети
Регистрация: 09.12.2007
Tod Schwarzkaiser
Ваша программа ловит клавиши питания, если клавитура подключена через USB?

_________________
Вечный студент


 

Member
Статус: Не в сети
Регистрация: 16.04.2004
Откуда: [MSK.RU]
MrGalaxy
А фиг её знает... У меня нет ни одной USB-клавиатуры...
Можно попробовать: http://cp.people.overclockers.ru/cgi-bi ... ame=hk.rar
Распаковывается в какую-то папочку, запускается единственный экзешник. Сверху где-то появляется полупрозрачное окошко.
Жмёте на кнопочки какие надо несколько раз, жмёте крестик на этом полупрозрачном окошке - и оно закрывается.
В папке появится пара файликов. CSV со статистикой и TXT со списком нажатых клавиш...


 

Member
Статус: Не в сети
Регистрация: 09.12.2007
Tod Schwarzkaiser
За ссылку респект, попробую декомпилировать её на досуге.
Цитата:
нет ни одной USB-клавиатуры

Самый и смысл в этом. Моя программа тоже ловит все клавиши, но только если клава подключена к PS/2.
Я думаю, те, кто писал драйвер для USB-клавиатуры, посчитал, что пользователю клавиши питания не нужны, и дальше системы их не пустил.

_________________
Вечный студент


 

Member
Статус: Не в сети
Регистрация: 16.04.2004
Откуда: [MSK.RU]
Цитата:
дальше системы их не пустил

А в этом весь смысл :) Кейлоггер занимается перехватом системных сообщений...
Добавлено спустя 1 минуту, 48 секунд
Так он ловит, или нет?


 

Member
Статус: Не в сети
Регистрация: 09.12.2007
Не хотелось эту программу запускать у себя, хотел только декомпилировать и написать на её основе что-то своё (если понравится), но что не сделаешь ради науки.

Докладываю. Распаковал, запустил от имени администратора, она стартовала - и всё. Висит в диспетчере задач, никакого окна не появилось. Перезагрузился, опять стартовал, опять ничего. :) То ли она под Вистой неуютно себя чувствует, то ли под 64-битной системой, в общем, не получилось оценить её.

_________________
Вечный студент


 

Member
Статус: Не в сети
Регистрация: 16.04.2004
Откуда: [MSK.RU]
MrGalaxy
Под вистой её никто до этого не проверял :)
Более того, когда она писалась, Висты ещё не было :tooth:

ЗЫ. Окошко там совсем небольшое и полупрозрачное, это делалось для того, чтобы не отвлекать испытуемых. Может быть, его просто не видно? :) Попробуйте на белом фоне :lol: Смех смехом, а кто его знает, может быть поможет...


 

Member
Статус: Не в сети
Регистрация: 09.12.2007
Tod Schwarzkaiser
Цитата:
Попробуйте на белом фоне

Точно, стало заметно!
Нажал последовательно цифровые клавиши с 1 по 0, потом в обратном порядке, потом power, sleep, wake, потом три пятёрки, потом опять power, потом ещё чего-то.
Вот результат:
Log started at 02.01.2008 18:55:27
8s: 0002 1 Dn [0x000402FA] Hooky Logger TfMain
8s: 0002 1 Up [0x000402FA] Hooky Logger TfMain
8s: 0003 2 Dn [0x000402FA] Hooky Logger TfMain
8s: 0003 2 Up [0x000402FA] Hooky Logger TfMain
9s: 0004 3 Dn [0x000402FA] Hooky Logger TfMain
9s: 0004 3 Up [0x000402FA] Hooky Logger TfMain
10s: 0005 4 Dn [0x000402FA] Hooky Logger TfMain
10s: 0005 4 Up [0x000402FA] Hooky Logger TfMain
10s: 0006 5 Dn [0x000402FA] Hooky Logger TfMain
10s: 0006 5 Up [0x000402FA] Hooky Logger TfMain
11s: 0007 6 Dn [0x000402FA] Hooky Logger TfMain
11s: 0007 6 Up [0x000402FA] Hooky Logger TfMain
12s: 0008 7 Dn [0x000402FA] Hooky Logger TfMain
12s: 0008 7 Up [0x000402FA] Hooky Logger TfMain
12s: 0009 8 Dn [0x000402FA] Hooky Logger TfMain
12s: 0009 8 Up [0x000402FA] Hooky Logger TfMain
12s: 000A 9 Dn [0x000402FA] Hooky Logger TfMain
12s: 000A 9 Up [0x000402FA] Hooky Logger TfMain
13s: 000B 0 Dn [0x000402FA] Hooky Logger TfMain
13s: 000B 0 Up [0x000402FA] Hooky Logger TfMain
14s: 0201 Mouse Left Bd [0x00000000]
16s: 000B 0 Dn [0x00000000]
16s: 000B 0 Up [0x00000000]
16s: 000A 9 Dn [0x00000000]
16s: 000A 9 Up [0x00000000]
17s: 0009 8 Dn [0x00000000]
17s: 0009 8 Up [0x00000000]
17s: 0008 7 Dn [0x00000000]
17s: 0008 7 Up [0x00000000]
18s: 0007 6 Dn [0x00000000]
18s: 0007 6 Up [0x00000000]
18s: 0006 5 Dn [0x00000000]
18s: 0006 5 Up [0x00000000]
19s: 0005 4 Dn [0x00000000]
19s: 0005 4 Up [0x00000000]
19s: 0004 3 Dn [0x00000000]
19s: 0004 3 Up [0x00000000]
19s: 0003 2 Dn [0x00000000]
19s: 0003 2 Up [0x00000000]
20s: 0002 1 Dn [0x00000000]
20s: 0002 1 Up [0x00000000]
36s: 0006 5 Dn [0x00000000]
36s: 0006 5 Up [0x00000000]
37s: 0006 5 Dn [0x00000000]
37s: 0006 5 Up [0x00000000]
37s: 0006 5 Dn [0x00000000]
37s: 0006 5 Up [0x00000000]
45s: 0201 Mouse Left Bd [0x00000000]
45s: 0500 WinActivate A1 [0x000402FA] Hooky Logger TfMain
57s: 0204 Mouse Right Bd [0x00000000]
59s: 0201 Mouse Left Bd [0x00000000]
59s: 0201 Mouse Left Bd [0x00000000]
59s: 0201 Mouse Left Bd [0x00000000]
61s: 0201 Mouse Left Bd [0x00000000]
63s: 0201 Mouse Left Bd [0x00000000]
67s: 0201 Mouse Left Bd [0x00000000]
69s: 0201 Mouse Left Bd [0x00000000]
70s: 0201 Mouse Left Bd [0x00000000]
71s: 0201 Mouse Left Bd [0x00000000]
78s: 0201 Mouse Left Bd [0x00000000]
82s: 0201 Mouse Left Bd [0x00000000]
105s: 0201 Mouse Left Bd [0x00000000]
105s: 0500 WinActivate A1 [0x000402FA] Hooky Logger TfMain
106s: 0201 Mouse Left Bd [0x000402FA] Hooky Logger TfMain
111s: 0201 Mouse Left Bd [0x000402FA] Hooky Logger TfMain
Log finished at 02.01.2008 18:57:19

------------------ O V E R A L L - S T A T S -------------------
1. 0x000402FAh: TfMain [30s], 27%
2. 0x00000000h: [79s], 72%

---------------- K E Y S T R O K E - S T A T S -----------------
[1] 2
[2] 2
[3] 2
[4] 2
[5] 5
[6] 2
[7] 2
[8] 2
[9] 2
[0] 2

Реакция - на какую-то одну из этих клавиш, дело тёмное надо разбираться, как программа написана.

_________________
Вечный студент


 

Member
Статус: Не в сети
Регистрация: 16.04.2004
Откуда: [MSK.RU]
Нет, не отловил.
Он не знает, что такое Power и Sleep, поэтому если он их ловит, то пишет вот так:

5s: 015E Unknown Dn [0x000A0220] _keyhook ExploreWClass
5s: 015E Unknown Up [0x000A0220] _keyhook ExploreWClass
5s: 015E Unknown Dn [0x000A0220] _keyhook ExploreWClass
6s: 015E Unknown Up [0x000A0220] _keyhook ExploreWClass
6s: 015F Unknown Dn [0x000A0220] _keyhook ExploreWClass
6s: 015F Unknown Up [0x000A0220] _keyhook ExploreWClass
7s: 015F Unknown Dn [0x000A0220] _keyhook ExploreWClass
7s: 015F Unknown Up [0x000A0220] _keyhook ExploreWClass
8s: 0163 Unknown Dn [0x000A0220] _keyhook ExploreWClass
8s: 0163 Unknown Up [0x000A0220] _keyhook ExploreWClass
8s: 0163 Unknown Dn [0x000A0220] _keyhook ExploreWClass
8s: 0163 Unknown Up [0x000A0220] _keyhook ExploreWClass
Добавлено спустя 3 минуты, 43 секунды
Расшифровка:
5s: - время от начала лога
015E - инфо о нажатии (скан-код, нажато/отпущено)
Unknown - название клавиши
Dn - нажата, Up - отпущена
[0x000A0220] - хэндл окна, которому предназначалось нажатие
_keyhook - заголовок окна
ExploreWClass - класс окна

WinActivate A1 - это активация окна


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 14 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 25


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan